Vous êtes sur la page 1sur 7

Universidad Nacional del Nordeste

F.A.C.E.N.A.

Algoritmos y estructuras de datos 2

Tema: Torres de Hani.


Realizado:
Integrantes:
28/08/2015
1 Acevedo Duprat, Joaqun Cruz
2 Broll, Eugenio
3 Carboni, Manuel Roberto

Contenido
Fundamentos tericos .................................................................................................................................... 3
Torres de Hani .......................................................................................................................................... 3
Objetivo.......................................................................................................................................................... 3
Desarrollo de la experiencia ........................................................................................................................... 3
Anlisis y discusin de datos ........................................................................................................................... 4
Conclusin ...................................................................................................................................................... 7
Bibliografa y/o citas ....................................................................................................................................... 7

Fundamentos tericos
Torres de Hani
Es un juego de estrategia que consiste en tres varillas verticales. En una de las varillas se apila un
nmero indeterminado de discos que determinar la complejidad de la solucin. Los discos se apilan sobre
una varilla en tamao decreciente. No hay dos discos iguales, y todos ellos estn apilados de mayor a menor
radio en una de las varillas, quedando las otras dos varillas vacantes. El juego consiste en pasar todos los
discos de la varilla ocupada a una de las otras varillas vacantes. Para realizar este objetivo, es necesario seguir tres simples reglas:
1.
2.

Slo se puede mover un disco cada vez.


Un disco de mayor tamao no puede descansar sobre uno ms pequeo que l mismo.

3. Slo puedes desplazar el disco que se encuentre arriba en cada varilla.


El nmero de movimientos mnimo a realizar para resolver el problema de este modo es:
C = 2 1
dnde n es el nmero de discos.
[1]

Objetivo
El propsito de esta actividad es el estudio de la cantidad de operaciones y el tiempo de ejecucin
del programa en funcin de la cantidad de discos en juego.

Desarrollo de la experiencia
En esta experiencia se estudi el comportamiento del programa a medida que se cambia la cantidad de discos en las torres.
Se parti del programa, codificado en Pascal, facilitado por el profesor (hanoi.pas).
Primeramente se le agreg al cdigo fuente un contador, para contar la cantidad de veces que realiza un movimiento. El movimiento cosiste en trasladar un disco de una torre a otra. Este contador se lo puso
dentro del procedimiento.
Posteriormente se le agreg una captura de la fecha, hora, minutos y segundos al momento de
introducir la cantidad de discos a operar. Adems, se agreg otra captura en el momento que finaliza el
3

programa. Todo ello empleando informacin del sistema. Ambas se realizaron tomando en consideracin si
el tiempo de ejecucin superaba las 24 horas. Para ello se usaron las siguientes funciones:

TimeToStr();
DateToStr().

Nota: se utiliz DateToStr() porque al comenzar la experiencia no se tena nocin del tiempo que empleara
una ejecucin, fue una precaucin a tener en cuenta.
Se emplearon 4 variables auxiliares del tipo string, dos destinadas a parmetros iniciales (hora y
fecha) y dos destinadas a parmetros finales (hora y fecha).
Tambin, se agregaron nueve variables auxiliares del tipo entero largo (longint) para contar cada
caso posible en que algn disco pase de una torre a otra. Las cuales contienen:
1.
2.
3.
4.
5.
6.
7.
8.
9.

movimientos de A a B.
movimientos de B a A.
la suma de los dos anteriores.
movimientos de A a C.
movimientos de C a A.
la suma de los dos anteriores.
movimientos de B a C.
movimientos de C a B.
la suma de los dos anteriores.

Por cada ejecucin del programa se anotaron dichos datos en una planilla de Excel. Se realiz el experimento hasta que se consider que el tiempo de ejecucin era muy grande. Obtenindose as una tabla,
de la cantidad de discos, momento inicial, momento final y contador de operaciones.
Seguidamente se calcul la funcin que representa el caso experimental. La cual se compar con la
adquirida tericamente, estimndose as el error experimental obtenido.
Se adjunta el cdigo fuente, con todas las modificaciones realizadas (hanoi_modif.pas).
Todo el experimento fue realizado en una computadora que cuenta con un procesador Intel Core i3
de 4ta generacin, con Windows 8.1, sin tocar las prioridades o hilos para el proceso de ejecucin.

Anlisis y discusin de datos


Los datos obtenidos fueron los siguientes:

Discos

Inicio [hh:mm:ss]
Fin [hh:mm:ss] Tiempo [hh:mm:ss] Movimientos
1
20:35:41
20:35:41
00:00:00
1
2
20:37:50
20:37:50
00:00:00
3
3
20:38:18
20:38:18
00:00:00
7
4

4
5
6
7
8
9
10
11
12
13
14
15
16

20:38:44
20:30:06
20:39:20
20:39:39
20:39:54
20:40:19
20:40:46
20:41:17
20:42:26
20:43:13
20:43:53
20:45:01
21:21:29

20:38:44
20:30:06
20:39:20
20:39:39
20:39:55
20:40:20
20:40:48
20:41:21
20:42:35
20:43:30
20:44:27
20:46:08
21:23:46

00:00:00
00:00:00
00:00:00
00:00:00
00:00:01
00:00:01
00:00:02
00:00:04
00:00:09
00:00:17
00:00:34
00:01:07
00:02:17

15
31
63
127
255
511
1023
2047
4095
8191
16383
32767
65535

Tabla 1 - Datos obtenidos

A travs de la Tabla 1 se pudo observar que el tiempo y la cantidad de movimientos era creca a
medida que se aumentaba la cantidad de discos.

Discos A -> B
1
1
2
1
3
3
4
3
5
9
6
9
7
31
8
31
9
117
10
117
11
459
12
459
13 1825
14 1825
15 7287
16 7287

A -> C B -> A B -> C C -> A C -> B A <-> B B <-> C A <-> C


0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
1
0
1
1
1
3
2
2
4
2
1
1
4
5
5
5
4
2
6
6
4
11
10
10
15
12
6
6
15
21
21
21
15
12
27
27
15
43
42
42
58
54
27
27
58
85
85
85
58
54
112
112
58
171
170
170
229
224
112
112
229
341
341
341
229
224
453
453
229
683
682
682
912
906
453
453
912
1365
1365
1365
912
906 1818 1818
912
2731
2730
2730
3643
3636 1818 1818
3643
5461
5461
5461
3643
3636 7279 7279
3643 10923 10922 10922
14566 14558 7279 7279 14566 21845 21845 21845

Total
1
3
7
15
31
63
127
255
511
1023
2047
4095
8191
16383
32767
65535

Tabla 2 - Datos obtenidos

Tambin se pudieron apreciar las grficas siguientes, del tiempo de ejecucin en funcin de la cantidad de discos; de la cantidad de movimientos en funcin de la cantidad de discos y del tiempo de ejecucin
en funcin de la cantidad de movimientos.

00:02:36
00:02:18
00:02:01

Tiempo

00:01:44
00:01:26
00:01:09
00:00:52
00:00:35
00:00:17
00:00:00
0

10

12

14

16

18

14

16

18

Cantidad de discos

Grfico 1

80000
70000

Movimientos

60000
50000
40000

30000
20000
10000
0
0

10

12

Cantidad de discos

Grfico 2

00:02:36
00:02:18

y = 2E-08x - 7E-07
R = 0,9999

00:02:01

Tiempo

00:01:44
00:01:26
00:01:09
00:00:52
00:00:35
00:00:17
00:00:00
0

10000

20000

30000

40000

50000

60000

70000

Movimientos

Grfico 3

Conclusin
Se lleg a la conclusin de que el experimento prueba exactamente lo que dice la teora. Se pudo
observar que la relacin es totalmente exponencial.
Adems, se pudo contemplar que la relacin entre la cantidad de movimientos y el tiempo de ejecucin del programa es totalmente lineal, con un ajuste casi ideal.
Otras observaciones que no se esperaban fueron, que cuando la cantidad de discos es igual o mayor
a 2, se presentan dos casos:
1.

La cantidad total de movimientos es divisible por 3: en este caso la cantidad de movimientos entre
dos torres cualesquiera (teniendo en cuenta ambos sentidos) es la misma.
2. La cantidad total de movimientos no es divisible por 3: la cantidad de movimientos de la primera
torre a la segunda es mayor en una unidad a la cantidad de movimientos que se realizan entre las
dems torres.

Bibliografa y/o citas


[1] Torres de Hani Wikipedia. https://es.wikipedia.org/wiki/Torres_de_Han%C3%B3i

Vous aimerez peut-être aussi