<< Midiendo Tiempos >> |
Dificultad: Se necesitan algunos conocimientos elementales de computación. Lecciones anteriores: ninguna |
|
Resumen: Vamos a ver que cómo hacer para que un programa mida automáticamante cuánto tiempo tarda en ejecutarse. Además vamos a hacer que vaya mostrando en la pantalla el tiempo transcurrido. De paso, vamos a discutir algunas formas de mostrar información en la pantalla sin que el programa sea mucho más lento. Introducción: Este tema no tiene que ver mucho con la matemática a primera vista, pero muchas veces la diferencia entre un buen algoritmo y uno malo es el tiempo que tardan en resolver el problema. En la mayoría de los casos el tiempo se puede estimar, incluso calcular como depende de los parámetros principales. Por ejemplo los métodos más simples para ordenar una lista de números tardan un tiempo proporcional a n2, o sea que si en vez de ordenar 1000 números ordenamos 10000, el programa tardará unas 100 veces más. Sin embargo se pueden escribir programas que tarden un tiempo proporcional a n*log(n), así que en el ejemplo anterior tardaría solo unas 13 veces más. El calculo teórico es en general difícil, así que una posibilidad para tener una idea aproximada es probar el programa y ver cuanto tarda con diferentes ejemplos. Esto también es útil para aproximar cuanto tiempo le falta a un programa para terminar. Por ejemplo si tenía que buscar los números menores que 10000, que cumplen alguna condición y para los primeros 100 números tarda 10 minutos, probablemente el programa tarde demasiado (por ejemplo más de las 3 horas de la prueba). La presición de estas mediciones es poca, el reloj disponible en D.O.S. cambia cada 1/18 de segundo. Así que no es posible utilizarlo para medir tiempos cortos. Midiendo los tiempos: Como ejemplo vamos a ver el método para medir el tiempo que tarda un programa que que suma dos números. Esta operación tarda muy poco así que la vamos a repetir 10000000 veces. Dependiendo de la velocidad de la computadora hay que agrandar o achicar este número hasta obtener un tiempo de ejecución razonable (por ejemplo entre 5 o 10 segundos). En los programas guardo la hora de inicio en la variable Inicio, y la hora de finalización en la variable Final. En Pascal y C++ se obtiene el tiempo separado en horas, minutos y segundos, así que hay que juntarlos en un sólo número que represente la cantidad de segundos, multiplicando por 60 varias veces. Basic :
Pascal :
C++ :
|
|
Mostrando el avance del
programa: Otra posibilidad es agregar unas líneas para ver el avance del programa. Estas líneas aparecen como comentarios en los ejemplos, pruébenlas. Como habrán visto ahora es muchísimo más lento. En general todo lo que tiene que ver con pantalla es medio lento. Sobre todo si la pantalla debe moverse para arriba para que aparezcan las nuevas líneas. Una forma de mejorar eso es no imprimir la información en todas las pasadas, sino por ejemplo cada 100000 pasadas. Para ello debemos reemplazar en cada caso estas las líneas que muestran la información en la pantalla por Basic:
Pascal:
C++:
En estos ejemplos usamos división entera que es más rápida que la normal. Ejercicios:
Lecciones siguientes: Cuadrado
lleno de múltiplos de 17 Probador
de Funciones DCM Cuánto va a tardar en CyM-Wiki |
|
La idea es que hagan los ejercicios y piensen que otras cosas interesantes se pueden hacer relacionadas con estos temas. Cuéntennos lo que consiguieron y pregunten lo que no les salió. Envíen sus preguntas, dudas, sugerencias, experiencias y propuestas. Nuestra dirección es cym98@oma.org.ar .
También nos gustaría saber tu opinión sobre esta clase. Les pedimos que se tomen unos instantes y contesten estas preguntas. Con tu ayuda podremos hacer un curso cada vez mejor.
OmaNet Curso CyM98 | OmaNet - Educación Interactiva www.oma.org.ar/omanet | omanet@oma.org.ar |
mensajes: webmaster@oma.org.ar |