Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UPIICSA
INGENIERIA EN INFORMATICA
Algoritmos computacionales
3NM40
RETO 1
UPIICSA - Algoritmos Computacionales
Función de trabajo - ejercicio sobre Torres de Hanoi
Bajar de Internet un programa que dé la solución a Torres de Hanoi. Añadir a ese programa las instrucciones
para que indique el número de movimientos a realizar según el número de discos, así como el tiempo en
“moverlos”.
Dice la teoría que el número de movimientos responde a la fórmula f(n) = 2 n – 1 y que el tiempo es
proporcional al número de movimientos. Para corroborarlo llene la siguiente tabla:
#discos #movimientos Tiempo #discos #movimientos Tiempo
5 31 Al menos 31 10 1023 Al menos 1023
segundos s
15 32767 32767 s 20 1048575 1048575 s
25 33554431 33554431 s 30 1.073741823E+09 1.073741823E+09
s
64 1.844674407E+19 1.844674407E+19
s
Considere que muy probablemente el tiempo en los primeros renglones puede resultar poco significativo
porque su valor es muy aproximado a cero. También tome en cuenta que puede parar las pruebas cuando
el tiempo se exceda de unos cuantos minutos.
Con los resultados obtenidos:
a) ¿La fórmula teórica corresponde a los resultados prácticos?
Medianamente , puede variar el calculo del error humano però en mi caso fue exacto
b) ¿El tiempo es proporcional al número de movimientos?
SI
c) ¿Cuánto tarda su computadora en cada movimiento?
Depende del número de Discos que se ingressen mientras no sean mas de 25 los discos no son tardados y
mas de 25 si
d) ¿Cuánto tardaría su computadora en calcular todos los movimientos de los siguientes juegos (vea
https://www.youtube.com/watch?v=x_CrVTm7Wi8 )?
a) “Gato” (tres en línea): Tarda unos cuantos segundos y esto es aun mas factible debido a los sin
fin de mvimientos que se pueden generar .
b) Go: variara dependiendo los movimientos , puede llegar hasta los 2 dias.
#include <iostream>
#include <math.h>
int main(){
double tiempoTotal;
clock_t tiempoInicial, tiempoFinal;
int torre1 = 1, torre2 = 2, torre3= 3, disco = 0;
tiempoInicial = clock();
Jugada(disco, torre1, torre2, torre3);
tiempoFinal = clock();
tiempoTotal = (float)(tiempoFinal-tiempoInicial)/CLOCKS_PER_SEC;
cout<<"\n\nTarde "<<tiempoTotal*1000<<" segundos";
movimientos(disco);
return 0;
}