Torres de hanoi

40
Torres de Hanoi

Transcript of Torres de hanoi

Page 1: Torres de hanoi

Torres de Hanoi

Page 2: Torres de hanoi

LAS TORRES DE HANOI

El clásico problema de las torres de Hanoi

fue dado a conocer en 1883 por el

matemático francés Eduard Lucas.

Page 3: Torres de hanoi

-Consiste en tres columnas verticales y un número indeterminado de discos, que determinarán la complejidad de la solución, al ser mayor la cantidad de estos.

-No hay dos discos iguales, ya que son de tamaños ascendentes ubicados de mayor a menor en la primera columna

-No se puede colocar ningún disco de mayor tamaño sobre un disco menor a él en ningún momento.

-El fin del juego consiste en traspasar todos los discos desde la primera columna hacia la tercera ubicándolos de mayor a menor ascendentemente, de igual forma que estaban ubicados al comienzo del juego.

Page 4: Torres de hanoi

Las torres de Hanoi tienen 3 reglas principales:

1. Sólo se puede mover un disco a la vez.

2. Un disco de mayor tamaño no puede posarse sobre uno más pequeño que él mismo.

3.Sólo puedes desplazar el disco que se encuentre en la parte superior de cada columna.

Eficacia: Posee una eficacia alta, ya que cumple con el ordenamiento o traspaso de la columna origen a la destino, en un juego perfecto, que tiene fin.

Rendimiento: Bueno, ya que el código del algoritmo, no utiliza mucha memoria, puesto que los paso con los que funcionan son obligatorios.

Utilidad: Juego intelectual o de rompecabezas, que es usado además como un juego que ayude al desarrollo de la inteligencia en niños (Educacional).

Complejidad: (Recursivo).

Al ser jugado realmente su complejidad varia en un número indeterminado de discos, que determinarán la complejidad de la solución, al ser mayor la cantidad de estos.

La complejidad del codigo es mas elevada , ya que para que quede correctamente se necesitan una serie de funciones que se llamen a si mismas para que el programa entregue el resultado correcto.

Comprueba que para mover n discos son necesarios

2n-1 movimientos.

Page 5: Torres de hanoi

Algoritmo Recursivo.

Hanoi (dim N , columna A, columna B , columna C)

// N, origen, destino , auxiliar

Si N == 1

Imprimir : Pasar disco de A a B

else

Hanoi(N-1 , A , C, B)

Imprimir : Pasar disco de A a B

Hanoi(N-1 , C , B , A)

Page 6: Torres de hanoi

Iterativa

Otra manera de resolver el problema, sin utilizar la recursividad, se basa en el hecho de

que para obtener la solución más corta, es necesario mover el disco más pequeño en

todos los pasos impares, mientras que en los pasos pares sólo existe un movimiento

posible que no lo incluye. El problema se reduce a decidir en cada paso impar a cuál de

las dos pilas posibles se desplazará el disco pequeño:

El algoritmo en cuestión depende del número de discos del problema.

Si inicialmente se tiene un número impar de discos, el primer movimiento debe ser

colocar el disco más pequeño en la pila destino, y en cada paso impar se le mueve a la

siguiente pila a su izquierda (o a la pila destino, si está en la pila origen).

La secuencia será DESTINO, AUXILIAR, ORIGEN, DESTINO, AUXILIAR, ORIGEN,

etc.

Si se tiene inicialmente un número par de discos, el primer movimiento debe ser colocar

el disco más pequeño en la pila auxiliar, y en cada paso impar se le mueve a la siguiente

pila a su derecha (o a la pila origen, si está en la pila destino).

La secuencia será AUXILIAR, DESTINO, ORIGEN, AUXILIAR, DESTINO, ORIGEN,

Page 7: Torres de hanoi

Algoritmo Iterativo

public Hanoi(int numdiscos)

{

this.numdiscos= numdiscos;

agujas= new int[3][numdiscos];

cimaAguja= new int[3];

nummovimientos= 0;

for (int nivel= 0; nivel < numdiscos; nivel++)

{

int disco= numdiscos - nivel;

agujas[ORIGEN][nivel]= disco;

agujas[TRABAJO][nivel]= 0;

agujas[DESTINO][nivel]= 0;

}

cimaAguja[ORIGEN]= numdiscos - 1;

cimaAguja[TRABAJO]= -1;

cimaAguja[DESTINO]= -1;

}

Page 8: Torres de hanoi

Código Recursivo Código Iterativo

-(2^n)-1

-Es mas lento

-El mas pequeño solo busca el

lugar donde pueda ubicarse

-Se mueve a la posición

habilitada

-(2^n)-1

-Es mas Rápido

-Es necesario mover el disco

más pequeño en todos los

pasos impares

-Cuando es par, se mueve a la

derecha y cuando es impar se

mueve a la izquierda

Page 9: Torres de hanoi

EJEMPLO: Con 5 discos harán falta 25-1=31 movimientos.

Page 10: Torres de hanoi

1

Page 11: Torres de hanoi

2

Page 12: Torres de hanoi

3

Page 13: Torres de hanoi

4

Page 14: Torres de hanoi

5

Page 15: Torres de hanoi

6

Page 16: Torres de hanoi

7

Page 17: Torres de hanoi

8

Page 18: Torres de hanoi

9

Page 19: Torres de hanoi

10

Page 20: Torres de hanoi

11

Page 21: Torres de hanoi

12

Page 22: Torres de hanoi

13

Page 23: Torres de hanoi

14

Page 24: Torres de hanoi

15

Page 25: Torres de hanoi

16

Page 26: Torres de hanoi

17

Page 27: Torres de hanoi

18

Page 28: Torres de hanoi

19

Page 29: Torres de hanoi

20

Page 30: Torres de hanoi

21

Page 31: Torres de hanoi

22

Page 32: Torres de hanoi

23

Page 33: Torres de hanoi

24

Page 34: Torres de hanoi

25

Page 35: Torres de hanoi

26

Page 36: Torres de hanoi

27

Page 37: Torres de hanoi

28

Page 38: Torres de hanoi

29

Page 39: Torres de hanoi

30

Page 40: Torres de hanoi

31

Total: 31 movimientos