FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Que es mas Rapido While,For,Repeat
Buenas amigos estoy haciendo una aplicación en Delphi 7 y necesito que sea lo mas rápida y que consuma lo mínimo en recursos,voy hacer varios ciclos y quisiera saber cual me recomiendan entre el WHILE,REPEAT y FOR gracias.
__________________
La vida es un simple pero complejo If J=rS
|
#2
|
|||
|
|||
Eso va a depender de la logica de tu programación.
Si conoces el numero de CICLOS entonces sera un FOR De igual manera el WHILE y REPEAT dependera de como validar la continuacion del CICLO al INICIO o al FINALIZAR.. Mucho dependera de ti, ya que en ocaciones puedes hacer menos ciclos repitiendo varias veces parte del codigo en los mismos.. Por ejemplo. Suponiendo que vas a llenar un array con 1000 registros, una forma de optimiarlo seria. FOR i:=1 to 200 do begin vararray[i] := i; vararray[i+200] := i+200; vararray[i+400] := i+400; vararray[i+600] := i+600; vararray[i+800] := i+800; end; EN LUGAR DE FOR i:=1 to 1000 do begin vararray[i] := i; end; Si checas en este CASO hacer 200 CICLOS en lugar de 1000.. SALUDOS... al final de cuentas todo depende de la LOGICA que al final de cuentas mientras obtengas resultados y que funcione dependera completamente de ti.
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton |
#3
|
||||
|
||||
Por supuesto, depende de muchos factores.
|
#4
|
||||
|
||||
Hola JerS,
Para la máquina yo diría que le es indiferente. De todas formas, con cualquiera de ellos todo se reduce a lo mismo o muy parecido: intrucciones de salto o brinco. Es decir, el compilador traducirá el fin de ciclo como una instrucción de tipo: si se cumple la condición te sales... y esto está ya altamente optimizado y se podría asumir (y asume) que consumirá lo mismo aunque se tratase de un while, un for o un repeat. Como te han indicado los compañeros, el uso de estos ciclos dependerá de la naturaleza del problema. Lo que deba hacerse dentro es realmente lo que dará el peso real al problema. Lo que puedes hacer, para tener una idea de la complejidad de tu algoritmo y de lo rápido y eficiente que podría ser es calcular la complejidad computacional (en notación O) como la complejidad ciclomática V(G). La primera te dará una idea de lo rápido que podría hacer, y del "tiempo" que podría demorarse. Mientras que la segunda te dará una idea de lo complejo que es el algoritmo y de la cantidad de caminos y casos de prueba a aplicar para evaluarlo totalmente. El ejemplo de pcicom es un clásico. Si tuviéramos que calcular la complejidad computacional fácilmente comprobaremos que es T(n/5) mientras que su contraparte es T(n). De todas formas, ambos tienen por asíntota una complejidad O(n). ¿Eso quiere decir que ambos se harán en el mismo tiempo? No... solamente es que el primero puede asumir una constante c 5 veces menor que el "original"... Esto se traduce a que el primer algoritmo puede recibir un vector de tamaño 5 veces mayor que el original para estar en las mismas condiciones del original. Es decir que el algoritmo modificado "crece" 5 veces más lento, con lo que puede aprovecharse para más hacer operaciones. Por ejemplo: si en vez de esos 1000 fueran 2000, con el primero sólo necesitaríamos 400 pasadas. Para igualar a las 2000 instrucciones del original... se necesita un vector de 10000. Te aconsejo una lectura a libros sobre estructuras de datos y algoritmos. Allí encontrarás explicado el tema de la complejidad computacional. Saludos, |
#5
|
||||
|
||||
Pues yo creo que sí que se ejecutarán en el mismo tiempo. Cada vuelta del ciclo de cinco instrucciones se ejecutará cinco veces más lento que una vuelta del ciclo de una instrucción, con lo cual, realmente no se gana nada.
// Saludos |
#6
|
||||
|
||||
caso for i := 0 to 1000
Código:
1 inicializar i=0 2 inicializar limite=1000 3 hacer algo 4 incrementar i 5 ver si i > limite 6 verdadero saltar a 3 Pasos 4 se ejecuta 1000 veces pasos 5 se ejecuta 1000 veces pasos 6 se ejecuta 1000 veces caso for i := 0 to 200 Código:
1 inicializar i=0 2 inicializar limite=200 3 hacer algo 4 hacer algo 5 hacer algo 6 hacer algo 7 hacer algo 8 incrementar i 9 ver si i > limite 10 verdadero saltar a 3 pasos 8 se ejecuta 200 veces pasos 9 se ejecuta 200 veces pasos 10 se ejecuta 200 veces Conclusión: En el caso de hacer un for, la parte final (incrementar, comporbar, saltar) se ejecuta tantas veces como el for. La parte de dentro (hacer algo) siempre se ejecuta 1000 veces caso 1 = 1000+100+1000+1000+1000 = 5000 caso 2 = 200+1000+200+200+200 = 1800 |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayudenme Rapido, Rapido | omarys | Varios | 6 | 04-06-2011 09:45:34 |
Interrumpir un ciclo Repeat - Until | FGarcia | Varios | 10 | 07-01-2009 00:06:10 |
¿Qué es más rapido? | jcarteagaf | Humor | 3 | 05-07-2008 02:48:58 |
Duda sobre variable en un Bucle Repeat | gerupc | Varios | 9 | 21-07-2007 02:44:34 |
...rapido de mente... | Jure | Humor | 5 | 08-10-2004 16:09:13 |
|