Estoy interesado en encontrar cuántos discos hay en cada clavija en un movimiento dado en el towers of Hanoi rompecabezas. Por ejemplo, dada n = 3
discos que tenemos esta secuencia de configuraciones para resolver el rompecabezas de forma óptima:Configuración de Hanoi en un movimiento determinado
0 1 2
0. 3 0 0
1. 2 0 1 (move 0 -> 2)
2. 1 1 1 (move 0 -> 1)
3. 1 2 0 (move 2 -> 1)
4. 0 2 1 (move 0 -> 2)
5. 1 1 1 (move 1 -> 0)
6. 1 0 2 (move 1 -> 2)
7. 0 0 3 (move 0 -> 2)
Así determinado número de jugadas 5, quiero volver 1 1 1
, dada movimiento número 6, quiero 1 0 2
etc.
Esto se puede hacer fácilmente utilizando el algoritmo clásico y deteniéndolo después de un cierto número de movimientos, pero quiero algo más eficiente. La página de wikipedia a la que he vinculado proporciona un algoritmo en la sección Binary solutions
. Creo que esto está mal, sin embargo. Tampoco entiendo cómo calculan n
.
Si sigue su ejemplo y convierte las posiciones del disco vuelve a lo que yo quiero, da 4 0 4
para discos n = 8
y mueve el número 216
. Usando el algoritmo clásico, sin embargo, obtengo 4 2 2
.
También hay un algoritmo eficiente implementado en C here que también da 4 2 2
como respuesta, pero carece de documentación y no tengo acceso al documento en el que se basa.
El algoritmo en el enlace anterior parece correcto, pero ¿alguien puede explicar cómo funciona exactamente?
Algunas preguntas relacionadas que yo también estoy interesado:
- es el algoritmo de Wikipedia realmente mal, o me estoy perdiendo algo? ¿Y cómo calculan
n
? - Solo quiero saber cuántos discos hay en cada par en un movimiento determinado, no en qué paridad está cada disco, que es lo que la literatura parece estar más preocupada. ¿Hay alguna manera más simple de resolver mi problema?
Creo que sus dos primeros movimientos deben intercambiarse: ------------ '1. 2 0 1 (mover 0 -> 2) '----------------------' 1. 1 1 1 (movimiento 0 -> 1) ' –
El algoritmo de C dado es sin duda excepcionalmente rápido, ya que está principalmente usando cambios de bits simples y lógica, aunque abstrae bastante el problema. La posición de un disco dado debería ser mucho más complicada que la altura de una pila determinada, lo cual debería ser una cuestión de establecer una ecuación de diferencia. – Orbling
Vaya, tuve un error en mi ejemplo. Lo solucioné, gracias. @Orbling - Pensé que lo que quería debería ser más simple también, pero no podía resolverlo ni encontrar nada al respecto. ¿Cómo abordarías la configuración de una ecuación? – IVlad