Torre de Hanoi – Algoritmo e implementación en Java

Torre de Hanói: Algoritmo e Implementación en Java

Introducción

La Torre de Hanói es un antiguo rompecabezas que consiste en una base con tres varillas y un número de discos de diferentes tamaños. El objetivo es mover todos los discos de la varilla inicial a la varilla final, siguiendo unas reglas específicas.

Este rompecabezas se atribuye a Joseph Lucas de Bourges, quien lo inventó en 1883. La leyenda cuenta que en un templo hindú había una sala con tres varillas de diamante y 64 discos de oro. Los sacerdotes del templo se encargaban de mover los discos de acuerdo con las reglas del rompecabezas, y se decía que cuando terminaran su tarea, el mundo se destruiría.

La Torre de Hanói es un problema clásico en las ciencias de la computación y la teoría de la complejidad. Su solución requiere un enfoque algorítmico y una comprensión de la recursividad.

Algoritmo de la Torre de Hanói

El algoritmo de la Torre de Hanói funciona de manera recursiva, dividiendo el problema en subproblemas más pequeños hasta que se resuelve. El algoritmo se puede describir de la siguiente manera:

1. Caso base: Si solo hay un disco, muévelo de la varilla inicial a la varilla final.
2. Caso recursivo: Si hay más de un disco, sigue estos pasos:
– Mueve el disco superior de la varilla inicial a la varilla auxiliar.
– Llama recursivamente al algoritmo para mover los discos restantes de la varilla inicial a la varilla final.
– Mueve el disco superior de la varilla auxiliar a la varilla final.

Implementación en Java

La siguiente implementación del algoritmo en Java utiliza una función recursiva para resolver el rompecabezas:

java
public class TorreDeHanói {

public static void main(String[] args) {
int numDiscos = 3;
torreDeHanói(numDiscos, 1, 2, 3);
}

public static void torreDeHanói(int numDiscos, int varillaInicial, int varillaAuxiliar, int varillaFinal) {
if (numDiscos == 1) {
// Caso base: mueve el disco superior de la varilla inicial a la varilla final
System.out.println("Mover disco " + numDiscos + " de la varilla " + varillaInicial + " a la varilla " + varillaFinal);
} else {
// Caso recursivo: mueve los discos restantes de la varilla inicial a la varilla auxiliar
torreDeHanói(numDiscos - 1, varillaInicial, varillaFinal, varillaAuxiliar);
// Mueve el disco superior de la varilla inicial a la varilla final
System.out.println("Mover disco " + numDiscos + " de la varilla " + varillaInicial + " a la varilla " + varillaFinal);
// Mueve los discos restantes de la varilla auxiliar a la varilla final
torreDeHanói(numDiscos - 1, varillaAuxiliar, varillaInicial, varillaFinal);
}
}
}

Complejidad del Algoritmo

La complejidad del algoritmo de la Torre de Hanói es exponencial, lo que significa que el tiempo de ejecución aumenta exponencialmente con el número de discos. La siguiente fórmula describe la complejidad del algoritmo:


f(n) = 2^n - 1

donde:

* f(n) es el número de movimientos necesarios para resolver el rompecabezas con n discos
* n es el número de discos

Conclusiones

La Torre de Hanói es un rompecabezas clásico que ha fascinado a matemáticos y científicos de la computación durante siglos. Su solución requiere un enfoque algorítmico y una comprensión de la recursividad. La implementación en Java presentada en este artículo proporciona una forma práctica de resolver el rompecabezas de manera eficiente.

Este rompecabezas no solo es un ejercicio intelectual desafiante, sino que también tiene aplicaciones en ciencias de la computación, como la teoría de grafos y la programación dinámica. Su simplicidad aparente esconde una profunda complejidad que lo convierte en un tema de estudio fascinante para estudiantes y profesionales por igual.

Preguntas Frecuentes (FAQs)

1. ¿Quién inventó la Torre de Hanói?
R: Joseph Lucas de Bourges, en 1883.

2. ¿De qué está hecha la legendaria Torre de Hanói en el templo hindú?
R: Diamantes y discos de oro.

3. ¿Cuál es el caso base del algoritmo de la Torre de Hanói?
R: Resolver el rompecabezas con un solo disco.

4. ¿Cuál es la complejidad del algoritmo de la Torre de Hanói?
R: Exponencial, 2^n – 1.

5. ¿Qué aplicaciones tiene la Torre de Hanói en las ciencias de la computación?
R: Teoría de grafos y programación dinámica.

6. ¿Qué lenguaje de programación se utilizó en la implementación presentada?
R: Java.

7. ¿Cómo puedo resolver la Torre de Hanói con 5 discos?
R: El algoritmo recursivo es el mismo, pero con 5 discos en lugar de 3.

8. ¿Existe una solución iterativa para la Torre de Hanói?
R: Sí, pero es más compleja que la solución recursiva.