Una línea de código

jueves, el 22. octubre 2009, 15:35 por Inagotable

El corazón de la aplicación se centraba en un algoritmo que contenía dos bucles, uno dentro del otro. El primero de ellos tenía alrededor de 500 iteraciones y el segundo unas 200, lo que hacía un total de 100.000 vueltas que tardaban más de 8 horas en completarse (veía el resultado al día siguiente). Era obvio que se debía optimizar tanto como se pudiese.

Depurando la aplicación me percaté de una línea de código que realizaba una lectura de fichero en disco y se tomaba cerca de un segundo en realizar la tarea, lo que hacía de ella la más lenta de todas las líneas y situada precisamente dentro del segundo bucle (por lo que se ejecutaba 100.000 veces).

Razonando un poco conseguí modificar el algoritmo y dejé esa línea de código en el primer bucle, reduciendo notablemente el número de veces que se repetiría. Y así se convirtió en una aplicación que tardaba 10 minutos en vez de más de 8 horas.

Así que ya sabéis, los bucles de n² en adelante son perjudiciales para tu procesador y tu paciencia.

Escrito en: Informática | Etiquetas: Etiquetas: , , , ,
0 Trackbacks | 4 Comentarios »

4 Respuestas

  1. DarkNekros dice:

    Lo peor seria hacer una funcion recursiva dentro de esos dos bucles sin una salida xDD

  2. Inagotable dice:

    @DarkNekros : entonces haría tostadas con el lateral de la torre xD

  3. Marina dice:

    jummm tienes razón… me paso poco… 🙁
    jiji leyendo esto me he acordado de nuestra práctica de AC… aquella (primera versión) del contador de horas ¿? (no recuerdo si eran horas o dias… pero sí que a la gente le iba rapidisimo y nosotros podiamos merendar (y comprobar la consistencia de un caramelo) sin que terminara la ejecución… xDDDDDD

  4. Inagotable dice:

    @Marina : pero la última versión fue la más rápida y eficiente en comparación con la del resto, incluida la de DarkNekros 😛 xD

Dejar un comentario

A tener en cuenta: Los comentarios son moderados. Esto puede retrasar la aparación de tu comentario. No hay necesidad de que lo envíes de nuevo.