Ir al contenido


Foto

[Truco Delphi] Encontrar el Valor Maximo y Minimo en un Arreglo.


  • Por favor identifícate para responder
7 respuestas en este tema

#1 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 18 agosto 2016 - 10:23

[Truco Delphi] Encontrar el Valor Maximo y Minimo en un Arreglo.


delphi
  1. function Find_Max(Arr: array of Integer): Integer;
  2. var
  3. i, M: Integer;
  4. begin
  5. M:=Arr[Low(Arr)];
  6. for i:=1 to High(Arr) do
  7. if Arr[i]> M then M:=Arr[i];
  8. Result:=M;
  9. end;
  10.  
  11. function Find_Min(Arr: array of Integer): Integer;
  12. var
  13. i, M: Integer;
  14. begin
  15. M:=Arr[Low(Arr)];
  16. for i:=1 to High(Arr) do
  17. if Arr[i]< M then M:=Arr[i];
  18. Result:=M;
  19. end;

Saludos!


  • 3

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 18 agosto 2016 - 05:02

También podría ser de utilidad implementarse un FindMinMax() para que permita encontrar el máximo y el mínimo en un mismo y único recorrido.

 

Esto:


delphi
  1. Max := Find_Max(MiArray);
  2. Min := Find_Min(MiArray);

Tiene una complejidad computacional T(n) = 2n.

 

Mientras que un posible:


delphi
  1. type
  2. TMinMax = record
  3. Min, Max: integer;
  4. end;


delphi
  1. var
  2. MinMax: TMinMax;
  3. ...
  4. begin
  5. MinMax := FindMinMax(MiArray);
  6. end;

Mantiene el T(n) = n.

 

Es decir que en un mismo ciclo se hace lo que se puede ahorrar en dos pasadas.

 

Saludos,


  • 1

#3 BDWONG

BDWONG

    Member

  • Miembros
  • PipPip
  • 28 mensajes

Escrito 18 agosto 2016 - 11:06

En efecto como meciona Delphius se puede hacer en una sola funcion.


delphi
  1. type
  2. TMinMax=Record
  3. min,max:Integer;
  4. end;
  5.  
  6. function FindMinMax(Data:array of Integer):TMinMax;
  7. var value:Integer;
  8. begin
  9. Result.max:=Data[0];
  10. Result.min:=Data[0];
  11.  
  12. for value in Data do
  13. begin
  14. if value>Result.max then Result.max:=value;
  15. if value<Result.min then Result.min:=value;
  16. end;
  17. end;
  18.  
  19. var
  20. MinMax:TMinMax;
  21. begin
  22. MinMax:=FindMinMax([3,4,1,3,5,6,8]);
  23. WriteLn('Minimno ',MinMax.min,' Maximo ',MinMax.max);
  24. ReadLn;
  25. end.


  • 2

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 agosto 2016 - 07:52

Un ejercicio interesante sería implementar un algoritmo tipo FindExtremes() en el que se pueda indicar mediante un set-enum que tipo de extremos se quiere devolver: mínimo, máximo o ambos:


delphi
  1. type
  2. TExtremes = (extMinimum, extMaximum);
  3. TExtremeOption = set of TExtremes;

El "reto" sería desarrollar el algoritmo más eficiente posible. Tanto en V(G) como en O(n). Si alguien baja de V(G) = 4 lo declaro campeón ;)

 

Saludos,


  • 2

#5 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 19 agosto 2016 - 08:02

O usando múltiples hilos :)
  • 2

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 19 agosto 2016 - 08:07

O usando múltiples hilos :)

 

¿Vale la pena? Se me hace que podría ser más un caso de "cazar moscas con un cañón".

 

Saludos,


  • 2

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 19 agosto 2016 - 08:10

Como reto vale todo ;)
  • 1

#8 sir.dev.a.lot

sir.dev.a.lot

    Advanced Member

  • Miembros
  • PipPipPip
  • 545 mensajes
  • Location127.0.0.1

Escrito 19 agosto 2016 - 09:43

Eso es... la utilidad de esto es que compartamos información, llegan y regresan comentarios, opiniones y mejoras...

 

Haciendo el foro aun mas activo.

 

Saludos!


  • 2




IP.Board spam blocked by CleanTalk.