torres de hanói

Post on 11-Aug-2015

10 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

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

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.

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.

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.

¿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

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

Resolvamos un juego de Las 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

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)

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)

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

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)

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í

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

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

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

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í

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

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

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

¡Excelente!

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

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

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?

¡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

top related