torres de hanói

40
República Bolivariana de Venezuela Min. de Poder Popular para la Educación Universitaria Instituto universitario Politécnico Santiago Mariño Escuela de ingeniería de sistemas Programación no numérica II Las torres de Hanói Por: David Guilarte CI: 22.653.158

Upload: davixe

Post on 11-Aug-2015

10 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Torres de hanói

República Bolivariana de VenezuelaMin. de Poder Popular para la Educación UniversitariaInstituto universitario Politécnico Santiago MariñoEscuela de ingeniería de sistemasProgramación no numérica II

Las torres de Hanói

Por: David GuilarteCI: 22.653.158

Page 2: Torres de hanói
Page 3: Torres de hanói

Dividir y conquistarTan efectivo como el que seria su antónimo "En la unión está la fuerza"

es el proverbio "Divide y vencerás".

En esta ocasión nos referimos a la aplicación de dicho proverbio al modelado de algoritmos, más específicamente para el campo de la programación.

¿En qué consiste?El problema, grupo, ciclo o procedimiento general en cuestión se divide en sub-procesos y estos a su vez también se les trata de la misma manera hasta que cada uno llegue a una solución poco complicada, finalmente se suman los resultados para componer juntos el resultado final.

Pero ya que estamos tratando con algoritmos, mejor se ha de entender este modelo al que nos referimos con un ejemplo del mismo, con la estructura propia de un algoritmo como el que veremos a continuación

Page 4: Torres de hanói

Dividir y conquistarFuncion divide_y_venceras(problema)

{ Si el problema es trivial entonces resolver el problema; Si no es trivial { descomponer el problema en n subproblemas más pequeños; para i=1 hasta n hacer divide_y_venceras(subproblema_k); combinar las soluciones; }}

Page 5: Torres de hanói
Page 6: Torres de hanói

Las torres de HanóiLas torres de Hanói, es un juego matemático o bien un rompecabezas que se juega en solitario, pertenece a la categoría de juegos de mesa.

Su resolución y sus reglas son bastante sencillas pero resulta un excelente ejemplo e introducción utilizado muy comúnmente en ciencias de la computación, en la programación, y en la teoría de algoritmosdebido a su fuerte indicio de funcionamiento procedural y también muy propicio para aplicar lo que se conoce en la programación y otros campos afines como 'Recursividad'

Su proceso de solución si bien puede ser bastante sencillo o de fácil entendimiento, dependiendo de ciertos parámetros puede llegar a ser muy extenso, haciendo más útil y conveniente la utilización de la programación y la recursividad para llevarlo a cabo de la manera más corta, precisa y automatizada.

Page 7: Torres de hanói

Las torres de Hanói¿En qué consiste?Consiste en un tablero con tres varillas:• Una varilla de inicio• Una varilla destino• Una varilla auxiliar• Una cierta cantidad de discos de diferentes tamaños

Inicialmente, la primera varilla tendrá todos los discos ordenados de manera decreciente de abajo hacia arriba, es decir, el disco más grande en la base.

La idea es transportar los discos de la varilla inicio a la varilla destino en el mismo orden pero cumpliendo dos reglas sencillas:

• No se puede mover más de un disco a la vez• No se puede colocar un disco sobre otro de menor tamaño.

Page 8: Torres de hanói
Page 9: Torres de hanói

Un poco de historiaSe cuenta que en un antiguo templo de la India se encontraba una cúpula que señalaba el centro del mundo. Allí estaba una bandeja sobre la que existían tres agujas de diamante. En una mañana lluviosa, un rey mandó a poner 64 discos de oro ordenados por tamaño: el mayor, en la base de la bandeja, y el menor, arriba de todos los discos. Tras su colocación, los sacerdotes del templo intentaron mover los discos entre las agujas, según las leyes que se les habían entregado: «El sacerdote de turno no debe mover más de un disco a la vez, y no puede situar ningún disco encima de otro de menor diámetro».

Hoy no existe tal templo, no obstante, la falacia resultó ser tan efectista y tan bonita que junto al juego aún perdura en el tiempo.

Realmente el juego fue inventado por el matemático francés Edouard Lucasen el año 1883.

Page 10: Torres de hanói

¿Como resolver la torre de Hanói?Para completar este juego seguiremos 3 pasos

recursivamente.

Usaremos una notación general:T(N, Ini, Aux, Fin)

T denota nuestra funciónN denota el número de discosIni es la varilla origenAux es la varilla auxiliarFin es la varilla destino

Page 11: Torres de hanói

Pasos a seguir1. T(N-1, Ini, Fin, Aux)2. T(1, Ini, Aux, Fin)3. T(n-1, Aux, Ini, Fin)

Paso 1: Significa que se mueven los discos de encima (n-1) de la varilla Ini a la varilla Aux.

Paso 2: Mueve un disco de la varilla Ini a la varilla Fin.

Paso 3: Significa que se mueven los discos de encima (n-1) de la varilla Aux a la varilla Fin

Page 12: Torres de hanói

Resolvamos un juego de Las Torres de Hanói

Page 13: Torres de hanói

Tenemos 3 discos, rojo, verde y azul todos colocados en la varilla A

Entonces, N = 3 (Número de discos)

Así que, empezaremos conT (3,A,B,C)

A B C

Page 14: Torres de hanói

Seguiremos los 3 pasos recursivamente para hallar los

movimientos

T(3, A, B, C)

Aplicaremos los 3 pasos aquí

Paso 1: T(N-1, Ini, Fin, Aux) Paso 2: T(1, Ini, Aux, Fin) Paso 3: T(n-1, Aux, Ini, Fin)

Page 15: Torres de hanói

Paso1: T(N-1, Ini, Fin, Aux)

T(3, A, B, C)

T(2, A, C, B )N = 3Ini= AAux = BFin = C

Sustituyendo valores tenemos T(2, A, C, B)

Page 16: Torres de hanói

Paso2: T(1, Ini, Aux, Fin)

T(3, A, B, C)

T(2, A, C, B )N = 3Ini= AAux = BFin = C

Sustituyendo valores tenemos T(1, A, B, C )Esto significa: Mover A a C

T1, A, B, C) A a C

Page 17: Torres de hanói

Paso3: T(N-1, Aux, Ini, Fin)

T(3, A, B, C)

T(2, A, C, B )N = 3Ini= AAux = BFin = C

Sustituyendo valores tenemos T(2, B, A, C )

T(1, A, B, C) A a C

T(2, B, A, C)

Page 18: Torres de hanói

T(3, A, B, C)

T(2, A, C, B)N = 3Ini= AAux = BFin = C

T(1, A, B, C) A a C

T(2, B, A, C)

Ahora aplicaremos los 3 pasos aquí

Page 19: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = AAux = CFin = B

Paso1: T(N-1, Ini, Fin, Aux)Sustituyendo valores tenemos T(1, A, B, C )Esto significa: Mover A a C

T(1, A, B, C) A a C

Page 20: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = AAux = CFin = B

Sustituyendo valores tenemos T(1, A, C, B)Esto significa: Mover A a B

T(1, A, B, C) A a C

Paso2: T(1, Ini, Aux, Fin)

T(1, A, C, B) A a B

Page 21: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = AAux = CFin = B

Sustituyendo valores tenemos T(1, C, A, B)Esto significa: Mover C a B

T(1, A, B, C) A a C

Paso3: T(N-1, Aux, Ini, Fin)

T(1, A, C, B) A a B

T(1, C, A, B) C a B

Page 22: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

TT(1, A, B, C) A a C

T(1, A, C, B) A a B

T(1, C, A, B) C a B

Aplicaremos los 3 pasos aquí

Page 23: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = BAux = AFin = C

Sustituyendo valores tenemos T(1, B, C, A)

T(1, A, B, C) A a C

T(1, A, C, B) A a B

T(1, C, A, B) C a B

Paso1: T(N-1, Ini, Fin, Aux)

Esto significa: Mover B a A

T(1, B, C, A) B a A

Page 24: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = BAux = AFin = C

Sustituyendo valores tenemos T(1, B, A, C)

T(1, A, B, C) A a C

T(1, A, C, B) A a B

T(1, C, A, B) C a B

Paso2: T(1, Ini, Aux, Fin)Esto significa: Mover B a C

T(1, B, C, A) B a A

T(1, B, A, C) B a C

Page 25: Torres de hanói

T(3, A, B, C)

T(2, A, C, B )

T(1, A, B, C) A a C

T(2, B, A, C)

N = 2Ini = BAux = AFin = C

Sustituyendo valores tenemos T(1, A, B, C)

T(1, A, B, C) A a C

T(1, A, C, B ) A a B

T(1, C, A, B ) C a B

Paso3: T(N-1, Aux, Ini, Fin)

Esto significa: Mover A a C

T(1, B, C, A) B a A

T(1, B, A, C) B a C

T(1, A, B, C) A a C

Page 26: Torres de hanói
Page 27: Torres de hanói
Page 28: Torres de hanói
Page 29: Torres de hanói
Page 30: Torres de hanói
Page 31: Torres de hanói
Page 32: Torres de hanói
Page 33: Torres de hanói
Page 34: Torres de hanói

¡Excelente!

Page 35: Torres de hanói

Algoritmo

/*N = Número de discos */ Ini, Aux, Fin son las varillas.T(N, Ini, Aux, Fin)Begin

If N = 1 thenPrint: Ini -> Fin

ElseCall T(N-1, Ini, Fin, Aux)Call T(1, Ini, Aux, Fin)Call T(N-1, Aux, Ini, Fin)

EndifEnd

Page 36: Torres de hanói

Número de movimientos requeridosSi hay N discos entonces acabaremos el juego en un mínimo de:

2n - 1 movimientos

Por ejemplo: N = 3Número mínimo de movimientos necesarios = 2³ - 1 = 7

Page 37: Torres de hanói
Page 38: Torres de hanói

Conclusión

Las torres de Hanói es un juego con una curiosa y muy bonita historia, además, a pesar de su sencilla manera de solución, dependiendo de ciertos parámetros, como por ejemplo: la cantidad de discos, el procedimiento para llegar hasta el final del juego puede tornarse sumamente largo dejándonos en la necesidad de repetir una gran cantidad de veces las mismas funciones.

Es por esto que resulta una excelente carta de presentación para dar a entender la grandísima utilidad de ciertos principios y conceptos de la programación y una excelente puerta de entrada al mundo de la recursividad para aquellos programadores que se inician.

Es por estas razones que Las Torres de Hanói se han ganado un puesto tan particular y son tema común en el mundo de las ciencias computacionales, y no es para menos, ¿verdad?

Page 39: Torres de hanói

¡Juega a las torres de hanói!

Puedes jugar a las torres de hanói en la web accediendo a este enlace:http://www.uterra.com/juegos/torre_hanoi.php

Page 40: Torres de hanói