Está en la página 1de 4

INSTITUTO POLITECNICO NACIONAL

UPIICSA

INGENIERIA EN INFORMATICA

Algoritmos computacionales

Maldonado Gutiérrez Edgar Uriel.

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

35 34359738367 34359738367 s 40 1.099511627775E+12 1.09951162E+12


s

45 3.518437209E+13 3.518437209E+13 50 1.12589990684262E+15 1.12589990E+15


s s

55 3.602879701E+16 3.602879701E+16 60 1.15292150460685E+18 1.15292150E+18


s 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>

using namespace std;

// origen aux destino


void Jugada(int disco, int torre1, int torre2, int torre3){
if(disco == 1){ //PASO.nAC - Mover el disco mas grande de A a C
cout<<"Mover disco de la torre "<<torre1<<" a la torre "<<torre3<<endl;
}else{
//PASO.Hn-1AB
// origen aux destino
Jugada(disco - 1, torre1, torre3, torre2);
cout<<"Mover disco de la torre "<<torre1<<" hacia la torre "<<torre3<<endl;
//PASO Hn-1BC
// origen aux destino
Jugada(disco - 1, torre2, torre1, torre3);
}
}

void movimientos(int disco){


int mov = pow(2, disco)- 1;
cout<<"El numero de movimientos"<<mov<<endl;
}

int main(){
double tiempoTotal;
clock_t tiempoInicial, tiempoFinal;
int torre1 = 1, torre2 = 2, torre3= 3, disco = 0;

cout<<"Con cuantos discos quieres jugar?";


cin>>disco;

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;
}

También podría gustarte