RECURSIÓN E ITERACIÓN EN ALGORITMOS:
      EL CASO LA TORRE DE HANOI

                     por

        Vanessa Santiago O...
Resumen

Este documento presenta una comparación entre algoritmos recursivos e
iterativos utilizando como ejemplo el probl...
Abstract

This document presents a comparison between recursive and iterative algorithms
using problem of the Tower of Han...
Tabla de Contenido

Algoritmos………………………………………………………………………………………..                    5

Recursión e Iteración ………………………………...
Algoritmos

La Real Academia de la Lengua Española define un algoritmo como un “conjunto
ordenado y finito de operaciones ...
elementos según apareen en el listado de entrada mientras que el
       inestable no lo mantiene.

Los algoritmos de búsqu...
procesadores mientras que los distribuidos operan en redes de
       computadoras interconectadas. Ambos son algoritmos de...
•   Heurísticas: Estos algoritmos se utilizan para encontrar estimados
        (soluciones subóptimas) de las soluciones r...
Debe resultar evidente que la recursión causa que haya valores intermedios que
no se pueden evaluar hasta que la recursión...
Esta analogía sirve para plantear la bondad de los algoritmos recursivos sobre los
iterativos. En el ajedrez, un algoritmo...
Aunque el juego típicamente tiene ocho discos, en la Internet se consiguen
variaciones del juego que van desde tres hasta ...
Tabla 1: Movidas necesarias para alcanzar la solución óptima
Número de discos        Solución óptima        Número de movi...
algoritmos binarios, no-recursivos y sub-óptimos para solucionar el problema. El
algoritmo también ha sido implementado en...
La Figura 4 muestra el modelo fractal de Sierpinski que representa la solución
gráfica al problema de la Torre de Hanoi. N...
SOLUCIÓN RECURSIVA DE LA TORRE DE HANOI

En términos generales, la literatura reporta el siguiente algoritmo para hallar l...
Figura 6 Algoritmo recursivo para la solución óptima de la Torre de Hanoi

SOLUCIÓN ITERATIVA    DE LA   TORRE DE HANOI

E...
Parte de la simpleza del algoritmo radica en que el patrón de movimiento de los
discos, una vez reconocidos, se repite par...
Figura 7 Algoritmo iterativo para la solución óptima de la Torre de Hanoi

Los resultados del algoritmo iterativo para el ...
Figura 8 Resultado arrojado por el algoritmo iterativo para el caso de tres (3) discos



        Análisis de Resultados

...
Para probar el reclamo del tiempo de ejecución, los algoritmos anteriormente
descritos fueron ejecutados varias veces para...
Figura 9 Datos normalizados del tiempo de computación por disco añadido al juego

De la gráfica que aparece en la Figura 9...
buscan que el algoritmo se ejecute en forma secuencial y consecutiva un cierto
número de veces. La diferencia entre éstas ...
•   Dávila-Rascón, G. 2002. El Desarrollo del Algebra Moderna. Parte I: El
    álgebra en la antigüedad. Apuntes de Histor...
•   Palais, R. S. y Palais, R. A. 2009. Differential Equations, Mechanics, and
    Computation. Student Mathematical Libra...
Upcoming SlideShare
Loading in...5
×

La Torre de Hanoi Monografía vanessa mayo 2010

14,420

Published on

Published in: Education, Travel, Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
14,420
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
290
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

La Torre de Hanoi Monografía vanessa mayo 2010

  1. 1. RECURSIÓN E ITERACIÓN EN ALGORITMOS: EL CASO LA TORRE DE HANOI por Vanessa Santiago Olivares Monografía sometida en cumplimiento parcial de los requisitos para el grado de MAESTRO EN CIENCIAS en MATEMÁTICA APLICADA Universidad Interamericana Recinto de San Germán Departamento de Matemáticas 2010 Aprobado por: _______________________________________ Dr. Balbino García Director del Proyecto Creativo
  2. 2. Resumen Este documento presenta una comparación entre algoritmos recursivos e iterativos utilizando como ejemplo el problema de la Torre de Hanoi. De acuerdo a la literatura, ambos métodos de programación se pueden adaptar a los mismos problemas pero, en general, los algoritmos recursivos son más simples y toman mayor tiempo de ejecución. El problema de la Torre de Hanoi, en su formato original, consiste de tres columnas paralelas. En una de las columnas se colocan discos concéntricos de diferentes diámetros de forma que la columna pasa por el centro de los discos y los discos están apilados en orden ascendente de diámetro, es decir, el disco de menor diámetro está arriba y el de mayor diámetro abajo. El objetivo es mover los discos de una columna a otra. Para esto se imponen las restricciones de que (1) sólo se puede mover un disco a la vez, y (2) los discos sólo se pueden colocar en espacios vacíos o sobre discos de mayor diámetro. Para realizar la comparación se construyeron dos algoritmos, uno recursivo y otro iterativo, en Mathematica 7.0.0, y se comparó su ejecución. El algoritmo recursivo requirió menos líneas de código que el iterativo, lo cual va de acuerdo a lo reportado en la literatura en el sentido de que los algoritmos recursivos son más simples que los iterativos. Para evaluar el tiempo de ejecución, se calculó la razón de tiempo de ejecución a cantidad de discos y se normalizó a la razón para tres discos. Los resultados sugieren que, en efecto, el tiempo de ejecución para el algoritmo recursivo es mayor que para el iterativo. Palabras clave: Algoritmos, Recursión, Torre de Hanoi 2
  3. 3. Abstract This document presents a comparison between recursive and iterative algorithms using problem of the Tower of Hanoi as example. According to literature, both programming methods can be adapted to similar problems but, in general, recursive algorithms are simpler but require longer run times. The problem of the Tower of Hanoi, on its original format, consists of three parallel columns. In one of the columns, concentric discs of different diameters are stacked so that the column goes through the center of the discs. Discs are piled up in ascending of diameter, that is, the disc with smaller diameter on top and the one of greater diameter at the bottom. The objective is to move the stack of discs from a column to another one. The following two restrictions are imposed to accomplish this objective: (1) only one disc can be moved on each turn, and (2) the discs can only be placed in empty spaces or over discs of greater diameter. In order to make the comparison two algorithms were constructed in Mathematica 7.0.0, one recursive and another iterative one, and their performance compared. The recursive algorithm required less lines of code than the iterative one, which agrees with reported literature in the sense that the recursive algorithms are simpler that the iterative ones. In order to evaluate the run time, the rate of run time to amount of discs was calculated and standardized to the rate for three discs. The results suggest that, in fact, the run time for the recursive algorithm is greater than for the iterative one. Key words: Algorithms, Recursion, Tower of Hanoi 3
  4. 4. Tabla de Contenido Algoritmos……………………………………………………………………………………….. 5 Recursión e Iteración …………………………………………………………………………. 8 Torre de Hanoi ………………………………………………………………………………….. 10 Solución Gráfica de la Torre de Hanoi …………………………………………. 13 Solución Recursiva de la Torre de Hanoi ……………………………………… 15 Solución Iterativa de la Torre de Hanoi ……………………………………….. 16 Análisis de Resultados ………………………………………………………………………… 19 Conclusión………………………………………………………………………………………… 21 Referencias………………………………………………………………………………………. 22 4
  5. 5. Algoritmos La Real Academia de la Lengua Española define un algoritmo como un “conjunto ordenado y finito de operaciones que permite hallar la solución de un problema” (RAE, 2001). La palabra surge del nombre del matemático persa Muhammad ibn Musa al- Jwarizmi que se estima vivió entre los años 780 y 850 y a quien se considera como el padre del álgebra y nuestro sistema de numeración. Al-Jwarizmi fue matemático, astrónomo y geógrafo. Su principal logro consistió en publicar libros de fácil comprensión que permitían el aprendizaje y aplicación de los conocimientos en matemática por un mayor número de personas. En sus tratados enfatizó que especificar de forma clara y concisa la manera sistematizada de realizar cálculos llevaba a la definición de algoritmos que podían ser usados en dispositivos mecánicos como los ábacos. Esto lo llevó a estudiar los modos de reducir las operaciones que componían los cálculos, es decir, el “conjunto ordenado y finito de operaciones que permite hallar la solución de un problema” (Dávila-Rascón, 2002). El estudio de los algoritmos y los efectos de factores externos sobre el desempeño de estos se conoce como algoritmia. De acuerdo a esta ciencia, los algoritmos de computación y matemáticas se pueden clasificar, según su función, en dos tipos principales: de ordenamiento y de búsqueda. Los algoritmos de ordenamiento colocan los elementos de una lista o vector en un orden específico siguiendo una serie de reglas preestablecidas. Estos son la base de de procesos como bases de datos, análisis del escenario mejor, peor o promedio y análisis de límite inferior (algoritmia.org, 2010). Existen varias subclases para los algoritmos de ordenamiento. • Interno versus externo: Si el ordenamiento de lleva a cabo en la memoria (RAM) de la computadora se le llama interno. Algoritmo externo sería aquel en que el ordenamiento se lleva a cabo en otro lugar, por ejemplo, un disco duro. • Natural versus no-natural: Esta es una clasificación en términos del tiempo que toma el ordenamiento. Esto depende de si los datos de entrada ya tienen una estructura ordenada (natural) o hay que generar dicha estructura para entonces ordenar (no-natural). • Estable versus inestable: La estabilidad del algoritmo se refiere a su capacidad de tratar con datos que tienen las mismas claves de ordenamiento, por ejemplo, un algoritmo que ordene por apellido y se encuentra con elementos de información que tienen el mismo apellido. En este caso, el algoritmo estable va a mantener el orden de los 5
  6. 6. elementos según apareen en el listado de entrada mientras que el inestable no lo mantiene. Los algoritmos de búsqueda, por su parte, pretenden determinar si un elemento en particular existe dentro de un conjunto, listado o vector de datos. Este algoritmo se reduce a la aplicación de lógica boleana para encontrar el elemento de interés. Estos algoritmos pueden ser de tipo secuencial o binario. Algoritmos de tipo secuencial se utiliza cuando no hay garantía de que el conjunto de datos esté ordenado. Esta condición hace necesario el pasar por todo el conjunto para evaluar cada uno de los elementos. Por el contrario, si el conjunto de datos está ordenado por el criterio de interés, usando un algoritmo binario es posible ir específicamente al lugar donde podría estar el elemento buscado y determinar si está presente o no en el conjunto. Esto hace que los algoritmos de búsqueda binarios sean mucho más eficientes en términos del tiempo de procesamiento (algoritmia.org). Otra manera de clasificar los algoritmos es en base a la técnica utilizada (Brassard y Bratley, 1996; Wikipedia.org, 2010). Técnica se refiere a la forma en que se construye el algoritmo para enfrentar el problema y tomar decisiones que lleven a la solución correcta o el mejor estimado posible de dicha solución. Desde esta perspectiva se consideran las siguientes clases. • Exacto versus aproximado: Se refiere al tipo de solución que pretende ofrecer el algoritmo. La selección de uno sobre otro depende de la complejidad del problema y la incertidumbre de los factores externos. • Determinístico versus no-determinístico: Algoritmo determinístico o estático es un algoritmo lineal, tipo receta de cocina, que hace siempre lo mismo sin tomar en cuenta decisiones o con opciones previamente definidas. Cada paso del algoritmo tiene únicamente un paso sucesor y otro antecesor y siempre produce el mismo resultado al enfrentar el mismo conjunto de datos iniciales. Los no-determinísticos, por otro lado, son algoritmos que tienen la capacidad de tomar decisiones en base a parámetros aleatorios (o semi-aleatorios) que cambian cada vez que se ejecutan. Esto permite que el mismo algoritmo aplicado a los mismos datos pueda ofrecer resultados diversos. • En serie, paralelo o distribuidos: Algoritmos que se ejecutan un paso a la vez se conocen como seriados o en serie. Los algoritmos paralelos y distribuidos dividen los problemas en subproblemas, o partes menos complejas, y resuelven cada parte de forma individual y simultánea utilizando varios sistemas. La diferencia entre algoritmos paralelos y distribuidos radica en la arquitectura de los sistemas en los que pueden operar. Los algoritmos paralelos operan en sistemas con varios 6
  7. 7. procesadores mientras que los distribuidos operan en redes de computadoras interconectadas. Ambos son algoritmos de alto nivel que utilizan otros algoritmos para resolver los subproblemas e integrar sus soluciones. • Lógicos: Se clasifican como algoritmos lógicos a aquellos que operan en función de los conceptos y axiomas de la matemática lógica. • Recursión versus iteración: Para llegar a la solución deseada, los algoritmos son comúnmente utilizados en varias ocasiones durante el procesamiento de los datos. Cuando el algoritmo termina y vuelve a correr, se dice que está iterando. Por otro lado, cuando el algoritmo se llama a si mismo para resolver parte del problema, se dice que está recurriendo. Otra posible clasificación de los algoritmos es en base al paradigma de implementación, es decir, la forma en que va a determinar la solución al problema bajo consideración. En términos generales, existen las siguientes categorias (Brassard y Bratley, 1996; Wikipedia.org, 2010). • Solución por fuerza bruta o búsqueda exhaustiva: Este término se utiliza para denominar algoritmos que exploran todas las posibles combinaciones para alcanzar la solución óptima. • Algoritmo ambicioso (“greedy”): Son algoritmos simplistas que toman decisiones en base a la información disponible de forma inmediata y que es pre-definida. Esto permite que sean eficientes, fáciles de desarrollar e implantar, pero su simplicidad no se adapta a muchas situaciones de la vida real y, por tanto, típicamente su solución no es óptima. Su uso principal son los problemas de optimización tales como la ruta más corta o el costo más bajo. • Divide y vencerás: En esta técnica se divide el problema en subconjuntos que se resuelven sucesivamente y de forma independiente. Las soluciones parciales se combinan finalmente para obtener la solución al problema bajo consideración. • Programación dinámica: Es una técnica similar a “divide y vencerás” con la diferencia de que los subconjuntos o subproblemas que trata no son totalmente independientes, sino que tienen cierto grado de solapamiento. • Programación lineal: Utiliza un sistema de ecuaciones y desigualdades que acotan y definen el universo. Estos algoritmos utilizan matemática lineal para hallar la solución óptima del sistema. 7
  8. 8. • Heurísticas: Estos algoritmos se utilizan para encontrar estimados (soluciones subóptimas) de las soluciones reales en base a experiencias previas del algoritmo y factores aleatorios. • Grafos: Algoritmos basados en la teoría de grafos para modelar sistemas y resolverlos en base a las restricciones impuestas sobre estos. Recursión e Iteración Como se mencionó anteriormente tanto la recursión como la iteración buscan que el algoritmo se ejecute en forma secuencial y consecutiva un cierto número de veces. La diferencia entre éstas estriba en que la iteración ejecuta el algoritmo completamente antes de volverlo a llamar, mientras que la recursión llama al mismo algoritmo para poder resolverlo. Rosen (2003) establece claramente la diferencia entre ambas técnicas con el ejemplo que se presenta a continuación y sugiere que la iteración es mucho más efectiva en términos de tiempo de computación. Rosen toma como ejemplo el cómputo del factorial de un número n. Por definición, n! = n(n − 1)(n − 2)...(1). En base a esto es posible establecer un algoritmo recursivo en C++ que tenga la siguiente estructura. PROCEDURE factorial(n) { IF n = 1 { nfac = 1 } ELSE { nfac = n*factorial(n-1) } RETURN(nfac) Para visualizar la recursividad de este algoritmo, asumamos que n = 4. Este valor entra al algoritmo y se dispone a evaluar nfac = n*factorial(n - 1). Esta ecuación manda a que se evalúe cuanto es factorial( n - 1) antes de proceder. Entonces se llama el algoritmo por segunda vez pero con n = 3. Esta vez, el algoritmo requerirá evaluar factorial(n - 1) con n = 2 y recurrirá al algoritmo por tercera vez. El proceso continúa hasta que en la cuarta recursión se define que factorial(n - 1) con n = 1 resulta en un valor concreto y permite que las incógnitas anteriores se puedan evaluar. 8
  9. 9. Debe resultar evidente que la recursión causa que haya valores intermedios que no se pueden evaluar hasta que la recursión se acota. Es entonces cuando el proceso puede regresar y concluir los ciclos computacionales externos. El tener que trabajar con valores intermedios que no pueden ser evaluados completamente requiere de espacio de memoria para almacenar dichos valores y tiempo de computación adicional. A modo de comparación, la implementación del cómputo del factorial de n usando un algoritmo iterativo aparece a continuación. PROCEDURE factorial(n) { nfac = 1 FOR i = 1 TO n { nfac = nfac*i } RETURN(nfac) A diferencia del caso anterior, cada ciclo termina sin dejar incógnitas o valores intermedios sin analizar. Veamos, por ejemplo, el caso para n = 4. Al entrar en el algoritmo, se asigna un valor inicial de 1 a nfac y se define en valor del índice de iteración, i. Esto permite que al evaluar la ecuación se obtenga un resultado concreto cada vez. A pesar de la simpleza de la iteración, la recursión tiene su lugar el las matemáticas y la computación ya que en algunos sistemas hay una dependencia tal entre los estados presente, pasado y futuro que requiere la evaluación de los diferentes estados para poder definir la solución. Goodstein (1964), hablado de la teoría recursiva de números, establece una analogía entre el juego de ajedrez y la aritmética. De acuerdo a esta discusión, las fichas del juego se pueden comparar con los numerales y los movimientos de dichas fichas con las operaciones y propiedades de cada numeral. Goodstein razona que el la pieza denominada rey, no es rey debido a su forma o construcción ya que el objeto puede ser reemplazado por cualquier otro y funcionar igual. Siendo así, lo que hace al rey ser tal, son las reglas que definen sus movimientos particulares. Entonces, cualquier objeto que actúe como rey, se puede usar como tal. De igual forma, cualquier símbolo se puede utilizar para representar al 2, lo importante es que las propiedades y efecto al interactuar en operaciones con otros numerales sean las propias de esa figura. 9
  10. 10. Esta analogía sirve para plantear la bondad de los algoritmos recursivos sobre los iterativos. En el ajedrez, un algoritmo iterativo sólo serviría para mover piezas sin más lógica que siguiendo las operaciones permitidas. En cambio, un algoritmo recursivo permitiría la consideración de otras piezas en el tablero y las posibles consecuencias o estados futuros antes de alcanzar una solución. La literatura contiene un sin número de trabajos que documentan los principios y conceptos de la llamada teoría de recursión (Crossley, 1967; Fenstad, 1980; Goodstein, 1964; Greenberg, 2006; Hinman, 1978; Nerode y Shore, 1984) al igual que los principios y aplicaciones de la iteración en las matemáticas y computación (Axelsson, 1994; Beardon, 1991; Palais y Palais, 2009; Norris, 1981). Torre de Hanoi La Torre de Hanoi, también conocida como la Torre de Brahma, es un juego inventado por el matemático francés François Edouard Anatole Lucas en 1883, quien, además de su trabajo en matemática recreacional, es conocido por su contribución relacionada a la secuencia Fibonacci y los algoritmos para determinar si los números son primos (O’Connor y Robertson, 1996). El juego de la Torre de Hanoi (Figura 1), en su formato original, consiste de tres columnas paralelas. En una de las columnas se colocan discos concéntricos de diferentes diámetros de forma que la columna pasa por el centro de los discos y los discos están apilados en orden ascendente de diámetro, es decir, el disco de menor diámetro está arriba y el de mayor diámetro abajo. El objetivo del juego es mover los discos de una columna a otra. Para esto se imponen las restricciones de que (1) sólo se puede mover un disco a la vez, y (2) los discos sólo se pueden colocar en espacios vacíos o sobre discos de mayor diámetro. Figura 1: Juego de la Torre de Hanoi 10
  11. 11. Aunque el juego típicamente tiene ocho discos, en la Internet se consiguen variaciones del juego que van desde tres hasta 12 discos. Otras variaciones del juego definen o limitan la columna a la cual se desea mover los discos, el tiempo disponible para hallar la solución, la dirección del movimiento o la cantidad de movidas para alcanzar el objetivo. En relación al número de movidas mínimo para alcanzar el objetivo, Valeiras (2004) reporta que la solución óptima, es decir, el menor número de movidas para alcanzar la solución final, es 2n-1, donde n es el número de discos en el juego. La Figura 2 presenta como el número mínimo de movidas crece exponencialmente con el número de discos en el juego. 300 250 8 Movidas mínimas 200 150 7 100 6 50 5 3 4 0 1 2 0 2 4 6 8 Número de discos Figura 2: Número mínimo de movidas para la solución óptima según la cantidad de discos en el juego Es interesante notar como la observación cuidadosa del número mínimo de movidas requerido para alcanzar la solución sugiere la recursividad del problema. De acuerdo a la Tabla 1, para tres columnas (k=3), para poder alcanzar la solución al problema con n discos, es necesario resolver el problema para n-1 discos primero. Se puede demostrar también que M(n)=2(M(n-1))+1=2n+1. (Snapp, 2005) 11
  12. 12. Tabla 1: Movidas necesarias para alcanzar la solución óptima Número de discos Solución óptima Número de movidas M(n) = f(M(n-1)) (n) H(n,3) = 2n+1 M(n) 1 1 1 -- 2 3 2(1)+1 2M(1)+1 3 7 2(2(1)+1)+1 2M(2)+1 4 15 2(2(2(1)+1)+1)+1 2M(3)+1 Otras variantes aumentan el número de columnas (por ejemplo, ‘Reve’s puzzle’ es una variante con cuatro columnas) (Houston y Masum, 2004) o la cantidad de conjuntos de discos a mover (Mascolo, 2007). Estas variantes aún se siguen estudiando y para muchas de ellas no se han identificado soluciones tales como el número mínimo de movimientos para mover de una columna a otra. Berend y Sapir (2006), por ejemplo, estudiaron el problema para, dado alguna variante del juego y cantidad de discos específico, hallar el diámetro del grafo o número máximo de pasos para mover los discos de una configuración inicial a otra final previamente especificada. Para el caso particular del problema con cuatro torres, Frame (1941) y Steward (1941) reportaron acerca de un algoritmo que proveía la solución presuntamente óptima. Sin embargo, dicha solución estaba basada en la llamada conjetura Frame-Steward que dice que FS(n,k)=H(n,k), es decir, que el resultado del algoritmo para n discos y k columnas es realmente la solución óptima. En otras palabras, la solución que provee el algoritmo parece ser óptima, pero no se ha podido probar, ni negar, que en realidad lo es. Chen y Shen (2004) retaron esta paradoja y probaron que FS(n,k) y H(n,k) son de la misma magnitud, lo que ellos llamaron la evidencia más contundente en apoyo a la conjetura Frame-Steward. Figura 3: Solución óptima de Frame-Steward para la Torre de Hanoi (Shen, 2004) Stockmeyer y Lunnon (2008) presentan diversas variaciones del problema con más de un conjunto de discos, donde cada conjunto tiene un color particular. Para cada caso explorado, los autores proveen claves de cómo hallar la solución y algoritmos para poder resolver los problemas. No reclaman, sin embargo, que sus soluciones sean óptimas. El problema de la Torre de Hanoi ha sido estudiado usando diferentes algoritmos o implementaciones de dichos algoritmos. Wikipedia, por ejemplo, presenta 12
  13. 13. algoritmos binarios, no-recursivos y sub-óptimos para solucionar el problema. El algoritmo también ha sido implementado en juegos de video y secuencias de almacenamiento de datos en memorias de computadoras y ordenadores. SOLUCIÓN GRAFICA DE LA TORRE DE HANOI Al igual que cualquier otro problema que se desee resolver usando algoritmos recursivos o iterativos, la clave esta en poder identificar un subproblema que al repetir la secuencia nos lleve a la solución final. En el caso de soluciones recursivas, el subproblema debe ser esencialmente una copia reducida del problema mayor. Este es básicamente el concepto de los modelos fractales de Sierpinski. Asumamos que tenemos una Torre de Hanoi con tres columnas (A, B, C) y tres discos. Para propósitos del grafo, asumamos la siguiente nomenclatura. Los discos aumentan de tamaño de izquierda a derecha, es decir, el disco menor está a la izquierda. Además, la localización de disco se identificará con el nombre de la columna. De esta forma, la notación ABC indica que el disco mayor está en la columna A, el segundo disco en la columna B y el disco menor en la columna C. AAA AAB AAC ACB ABC ACC ACA ABA ABB BCC CBB BCA BCB CBC CBA BCB BAB CAC CCA BBB BBC BAC BAA CAA CAB CCB CCC Figura 4: Modelo fractal de Sierpinski que sirve como grafo de la solución al problema de la Torre de Hanoi 13
  14. 14. La Figura 4 muestra el modelo fractal de Sierpinski que representa la solución gráfica al problema de la Torre de Hanoi. Nótese que los vértices de la estructura externa (triángulo) son las condiciones en que los tres discos están en la misma columna. Se aprecia, además, que el triángulo externo está formado por tres triángulos internos siguiendo el arreglo de Sierpinski, y que estos, a su vez, están formados por triángulos más pequeños. De este modelo, es posible establecer que el paso más corto (óptimo) para pasar los discos de A hasta C (Figura 4) es AAA-AAC-ABC-ABB-CBB-CBA-CCA-CCC y que consta de siete pasos solamente. Esto concuerda con el número mínimo de 2n - 1 (23 - 1 = 8 – 1 = 7) mencionado anteriormente. AAA AAB AAC ACB ABC ACC ACA ABA ABB BCC CBB BCA BCB CBC CBA BCB BAB CAC CCA BBB BBC BAC BAA CAA CAB CCB CCC Figura 5: Paso óptimo entre A y C De este grafo es posible obtener otros pasos de interés, por ejemplo, el paso Hamiltiniano, es decir, el paso que lleve el conjunto de discos a todas las columnas y los regrese al principio. Hinz y Parisse (2002) probaron que todo grafo de Hanoi es Hamiltoniano isomórfico y realizaron un análisis exhaustivo de su planaridad. Otros pasos de interés son el paso más largo y el paso del vendedor viajero que pasa por todos los puntos del grafo una sola vez y regresa al origen. Además, es posible establecer un paso que lleve los discos desde cualquier configuración inicial permitida hasta la solución final. 14
  15. 15. SOLUCIÓN RECURSIVA DE LA TORRE DE HANOI En términos generales, la literatura reporta el siguiente algoritmo para hallar la solución al problema de la Torre de Hanoi con tres torres (identificadas como origen, intermediaria y destino) (McCann, 2007; Snapp, 2005; Valerias, 2004; Wikipedia, 2010). 1. Mover el disco menor a la columna intermediaria si hay un número par de discos. Si hay un número impar de discos, mover el disco menor a la columna destino. 2. Hacer un movimiento legal que no sea reversar el paso anterior (sólo debe haber una posibilidad). 3. Mover el disco menor a la columna de la cual no provino en su movimiento anterior. 4. Repetir los pasos dos y tres hasta mover todos los discos. De forma recursiva, este algoritmo se pude expresar como sigue. 1. Mover los n-1 discos superiores de la columna origen a la columna intermediaria usando la columna destino como intermediaria. 2. Mover el disco n a la columna destino 3. Mover los n-1 discos superiores de la columna intermediaria a la columna destino usando la columna origen como intermediaria. La Figura 6 presenta un algoritmo recursivo programado en Mathematica 7.0.0 para resolver el problema de la Torre de Hanoi con tres torres. Dicha implementación es una adaptación realizada por la autora del algoritmo publicado por Weisstein (2006). El algoritmo de la Figura 6 comienza con la asignación de la cantidad de discos en el juego; información que se guarda en la variable Discos. La cantidad de torres está fija a tres, de acuerdo a la versión original del problema. Con esta cantidad de discos, se procede a calcular la secuencia óptima de juego. Nótese que la recursión del programa está en la función movida que, para poder evaluarse, requiere llamarse a si misma. La Figura 6 presenta además la solución del algoritmo para una corrida con tres discos. En la matriz resultante, cada columna de la matriz representa una torre del juego. Las filas de la matriz representan la secuencia de pasos a ejecutar para llegar a la solución. A la izquierda de la matriz aparece el valor 1.37694 *10-17. Este valor corresponde al tiempo de ejecución del algoritmo para llegar a la solución. 15
  16. 16. Figura 6 Algoritmo recursivo para la solución óptima de la Torre de Hanoi SOLUCIÓN ITERATIVA DE LA TORRE DE HANOI El algoritmo recursivo presentado anteriormente fue modificado por la autora para convertirlo en un algoritmo iterativo. El algoritmo modificado aparece en la Figura 7 y su solución para la torre con tres discos aparece en la Figura 8. Al igual que el algoritmo recursivo, esta implementación comienza con la asignación de la cantidad de discos a la variable Discos. Luego se determina la el orden en que se van a mover los discos. Finalmente, se entra en un proceso iterativo que genera la secuencia de pasos necesarios para llegar a la solución óptima. 16
  17. 17. Parte de la simpleza del algoritmo radica en que el patrón de movimiento de los discos, una vez reconocidos, se repite para los diferentes discos. Por ejemplo, cuando hay una cantidad par de discos, todos los discos pares se mueven de la primera columna a la segunda, luego a la tercera y regresan a la primera. En cada movimiento del disco, se moverá de columna en columna siguiendo este patrón. 17
  18. 18. Figura 7 Algoritmo iterativo para la solución óptima de la Torre de Hanoi Los resultados del algoritmo iterativo para el caso de tres discos se presentan en la Figura 8. Cada matriz representa la condición de las torres (columnas de la matriz) en cada paso de la secuencia. 18
  19. 19. Figura 8 Resultado arrojado por el algoritmo iterativo para el caso de tres (3) discos Análisis de Resultados Como se vio en la sección anterior, ambos algoritmos proveen la solución óptima al problema de la Torre de Hanoi. La pregunta queda en relación a su efectividad en términos de tiempo de computación. Como se estableció anteriormente, los algoritmos recursivos son más simples de programar (se pueden programar en menos líneas de código), pero toman más tiempo en ejecutar por la necesidad de mantener valores intermedios para resolver la recursión. Los códigos presentados en la Figuras 6 y 7 ciertamente apoyan lo reportado en la literatura acerca de la complejidad. El código recursivo se completó en menos de la mitad del código requerido para el algoritmo iterativo. Claro está, la autora no reclama ser una experta en programación, por lo que no se concluye que los algoritmos presentados son óptimos en términos de cantidad de líneas de código, pero ciertamente este hallazgo va de acuerdo a lo reportado por otros autores. 19
  20. 20. Para probar el reclamo del tiempo de ejecución, los algoritmos anteriormente descritos fueron ejecutados varias veces para verificar su desempeño y poder comparar sus resultados. Para cada caso (cantidad de discos), los algoritmos se ejecutaron cinco (5) veces y se tomó nota del tiempo de ejecución de cada corrida. La Tabla 2 presenta los resultados como el promedio del tiempo de ejecución. Tabla 2: Resultados experimentales del tiempo de ejecución (seg.) Cantidad de Algoritmo Algoritmo iterativo Algoritmo recursivo Discos iterativo modificado* 3 0.0156 1.872056*10-17 0.47705*10-17 4 0.0314 3.23092*10-17 6.04262*10-17 5 0.0686 0.0053 0.0053 6 0.1498 0.0104 0.0107 7 0.3124 0.0156250 0.016 8 0.7062 0.0312500 0.0263 9 1.5590 0.0468750 0.047 10 3.6248 0.0781250 0.094 *Para el algoritmo iterativo modificado se suprimió la impresión de las matrices intermedias y se cambió el comando Timing, por el comando AbsoluteTiming para poder tener mayor precisión de los resultados. Se entiende que, puesto que los resultados de ambos algoritmos difieren en formato, el tiempo de ejecución va a ser diferente. Por tanto, no sería justo el realizar comparaciones estadísticas respecto a sus diferencias. No obstante, es posible hacer comparaciones entre los algoritmos en relación a la diferencia relativa que tardan en trabajar los problemas cuando aumenta la cantidad de discos. Esta comparación se presenta en la Figura 9 donde los datos que forman las curvas se obtuvieron con la siguiente ecuación. Tiempo de computación para N discos N Tiempo de computación para 3 discos 3 20
  21. 21. Figura 9 Datos normalizados del tiempo de computación por disco añadido al juego De la gráfica que aparece en la Figura 9 se observa que los tiempos de ejecución de los algoritmos recursivo e iterativo difieren grandemente. Nótese que aunque las curvas tienen formas similares, los ejes no tienen la misma escala. Los tiempos para el algoritmo recursivo (línea verde en el eje de la izquierda) están en el orden de 10-15 mientras que el iterativo (línea azul en el eje de la derecha) toma aproximadamente 70 veces más con diez discos que con 3 discos. No obstante, al comparar contra los datos del algoritmo iterativo modificado, en el que se eliminó la impresión de las matrices intermedias para hacerlo más comparable al funcionamiento del algoritmo recursivo, se observa que el incremento en tiempo con aumento en discos es menor para el algoritmo iterativo que para el recursivo. Esto sugiere que, en efecto, los algoritmos recursivos toman más tiempo de computación que los algoritmos iterativos; lo cual también apoya lo reportado en la literatura. Conclusión Por definición, los algoritmos son “conjuntos ordenados y finitos de operaciones que permiten hallar la solución de un problema”. Estos se pueden clasificar de muchas maneras en base a su estructura, acercamiento al problema, construcción, etcétera. En este trabajo se realizó una comparación entre algoritmos recursivos e iterativos. Como se mencionó anteriormente tanto la recursión como la iteración 21
  22. 22. buscan que el algoritmo se ejecute en forma secuencial y consecutiva un cierto número de veces. La diferencia entre éstas estriba en que la iteración ejecuta el algoritmo completamente antes de volverlo a llamar, mientras que la recursión llama al mismo algoritmo para poder resolverlo. De acuerdo a la literatura, los algoritmos recursivos son más simples (requieren menos líneas de código) que los iterativos, pero toman más tiempo de computación. Para verificar esto se construyeron algoritmos recursivos e iterativos para proveer la solución óptima al clásico problema de la Torre de Hanoi. Los algoritmos implementados fueron de forma tal que permiten modificación en la cantidad de discos, pero fija la cantidad de columnas a tres. Los resultados obtenidos de los algoritmos van de acuerdo a lo reportado en la literatura en el sentido de que el algoritmo recursivo requiere menos líneas de código para la implementación, pero el tiempo de ejecución aumenta, en proporción mayor que el iterativo, al aumentar la cantidad de discos en el problema. Referencias • Algoritmia.org. 2010. http://www.algoritmia.org/ • Axelsson, O. 1994. Iterative Solution Methods. Cambridge University Press. • Beardon, A. F. 1991. Iteration of Rational Functions. Graduate Texts in Mathemathics. Number 132. Springer-Verlag. • Berend, D. y Sapir, A. 2006. The Diameter of Hanoi Graphs. Information Processing Letters 98 (2006) 79-85. http://graph.cs.ntust.edu.tw/meeting/ %E8%8E%AB%E5%92%B8%E5%8B%A4/The%20diameter%20of %20Hanoi%20graphs.pdf • Brassard, G. y Bratley, P. 1996. Fundamentals of Algorithmics. Prentice- Hall, Inc. • Chen, X. y Shen, J. 2004. On the Frame-Stewrd Conjeture about the Towers of Hanoi. Society for Industrial and Applied Mathematics. Vol. 33 (3) pp. 584-589. SIAM J. Comput. • Crossley, J. N. 1967. Sets, Models and Recursion Theory. Proceedings of the Summer School in Mathematical Logic and Tenth Logic Colloquium. Leicester. August-September 1965. North-Holland Publishing Company 22
  23. 23. • Dávila-Rascón, G. 2002. El Desarrollo del Algebra Moderna. Parte I: El álgebra en la antigüedad. Apuntes de Historia de la Matemáticas. Vol. 1, No. 3, Septiembre 2002 • Fenstad, J. E. 1980. General Recursion Theory: An axiomatic approach. Springer-Verlag Berlin Heidelberg. • Frame, J. S. 1941. Solution to advanced problem 3918, Amer. Math. Monthly, 48 (1941), pp. 216–217. • Goodstein, R. L. 1964. Recursive Number Theory. A development of recursive arithmetic in a logic-free equation calculus. North Holland Publishing Company • Greenberg, N. 2006. The Role of True Finiteness in the Admissible Recursively Enumerable Degrees. Memoirs of the American Mathematical Society. Number 854. American Mathematical Society. • Hinman, P. G. 1978. Recursion-Theoretic Hierarchies. Springer-Verlag Berlin Heildelberg. • Hinz, A. M. y Parisse, D. 2002. On the Planarity of Hanoi Graphs. Expositiones Mathematicae. 20(2002):263-268 • Houston, B y Masum, H. 2004. Explorations in 4-peg Tower of Hanoi. Carleton University Technical Report TR-04-10. http://www.exocortex.org/toh/ • Mascolo, V. 2007. Stacking puzzle and method for playing same. US Patent 7566057. http://www.patentstorm.us/patents/7566057/claims.html • McCann, W. 2007. Tower of Hanoi & Reve Puzzles. Ney York University. http://cs.nyu.edu/courses/summer07/G22.2340-001/Presentations/McCan n.pdf • Nerode, A. y Shore, R. A. 1984. Proceedings of Symposia in Pure Mathematics of the American Mathematical Society. Cornell University, Ithaca, New York. American Mathematical Society. Volume 42. • Norris, A. C. 1981. Computational Chemistry: An introduction to numerical methods. John Wiley & Sons. • O’Connor, J. J. y Robertson, E. F. 1996. François Edouard Anatole Lucas. http://www-gap.dcs.st-and.ac.uk/~history/Biographies/Lucas.html 23
  24. 24. • Palais, R. S. y Palais, R. A. 2009. Differential Equations, Mechanics, and Computation. Student Mathematical Library. IAS/Park City Mathematical Subseries. Volume 51. American Mathematical Society. Institute for Advance Study. • Real Academia Española. 2001. Diccionario de la Lengua Española. Vigésimo segunda edición. http://www.rae.es/rae.html • Rosen, K. H. 2003. Discrete mathematics and its applications. Quinta edición. McGraw-Hill Co. • Shen, J. 2004. On the Frame-Stewart Conjecture about the Tower of Hanoi. Texas State University. http://frank.mtsu.edu/~sseo/shen.pdf • Snapp, R. 2005. Tower of Hanoi. Lecture Notes for CS 5. Delivered on November 14, 2005. http://www.cs.uvm.edu/~snapp/teaching/cs32/lectures/hanoi.pdf • Stewart, B. M. 1941. Solution to advanced problem 3918, Amer. Math. Monthly, 48 (1941), pp. 217–219. • Stockmeyer, P. K. Y Lunnon, F. 2008. New Variations on the Tower of Hanoi. http://www.cs.wm.edu/~pkstoc/greece.pdf • Valeiras, R. 2004. La Torre de Hanoi. http://www.rodoval.com/heureka/hanoi/ • Weisstein, E. W. 2006 "Tower of Hanoi." From MathWorld--A Wolfram Web Resource. http://mathworld.wolfram.com/TowerofHanoi.html • Wikipedia.org. 2010. http://es.wikipedia.org 24

×