La solución al rompecabezas de la Torre de Hanoi consiste en [matemáticas] 2 ^ n-1 [/ matemáticas] pasos.
Hay algoritmos iterativos que producen tales soluciones. La página de Wikipedia mencionada anteriormente enumera algunos de ellos. A continuación se muestra mi implementación de uno de estos algoritmos iterativos:
N = 5
torres = [lista (rango (N, -1, -1)), [N], [N]]
para clavija en torres: imprimir (clavija [1:])
- ¿Cuáles son algunas aplicaciones inteligentes de búsqueda binaria?
- ¿Cuántos casos hay para reequilibrar los árboles AVL?
- ¿Hay algún problema para el cual se pruebe que no existe un algoritmo óptimo?
- ¿Avanzar en CS en general hará que los algoritmos sean cada vez más complejos con el tiempo que las personas no pueden manejar? ¿Cuáles son las soluciones para ese caso?
- Cómo generar todas las permutaciones de fila de una matriz 2D dada de forma recursiva
para escalones (1, 2 ** N):
si paso% 2 == 1:
# el disco más pequeño mueve una clavija a la derecha
i = (paso // 2)% 3
torres [(i + 1)% 3] .append (torres [i] .pop ())
más:
# el único movimiento que no involucra el disco más pequeño
para i, j en [(0,1), (0,2), (1,0), (1,2), (2,0), (2,1)]:
si 0 <torres [i] [- 1] <torres [j] [- 1]:
torres [j] .append (torres [i] .pop ())
descanso
imprimir (paso)
para clavija en torres: imprimir (clavija [1:])
(Además, técnicamente, “QuickSort” también sería una respuesta válida a su pregunta, ya que big-O solo representa un límite superior. Pero eso no es lo que quería preguntar, ¿verdad? 😉)