J'ai rencontré les doutes suivants sur la complexité des tours de Hanoi , sur lesquelles j'aimerais avoir vos commentaires.
Est-ce en NP? Tentative de réponse: supposons que Peggy (prouveur) résout le problème et le soumette à Victor (vérificateur). Victor peut facilement voir que l'état final de la solution est bon (en temps linéaire) mais il n'aura pas d'autre choix que de passer par chacun des mouvements de Peggy pour s'assurer qu'elle n'a pas fait un mouvement illégal. Puisque Peggy doit faire un minimum de 2 ^ | disques | - 1 coups (prouvable), Victor doit lui aussi emboîter le pas. Ainsi Victor n'a pas de vérification de temps polynomiale (la définition de NP), et ne peut donc pas être dans NP.
Est-ce dans PSPACE ? Semble oui, mais je ne peux pas penser à la façon d'étendre le raisonnement ci-dessus.
Est-il complet sur PSPACE? Semble pas, mais je n'ai qu'une vague idée. La planification automatisée, dont ToH est une instance spécifique, est complète avec PSPACE. Je pense que la planification a des instances beaucoup plus difficiles que ToH.
Mis à jour : Input = , le nombre de disques; Sortie = configuration du disque à chaque étape. Après avoir mis à jour cela, j'ai réalisé que ce format d'entrée / sortie ne correspond pas à un problème de décision. Je ne suis pas sûr de la bonne formalisation pour capturer les notions de NP, PSPACE, etc. pour ce type de problème.
Mise à jour # 2 : Après les commentaires de Kaveh et Jeff, je suis obligé de rendre le problème plus précis:
Soit l'entrée la paire d' entiers où est le nombre de disques. Si la séquence de mouvements effectuée par les disques est écrite au format (numéro de disque, à partir de la cheville, à la cheville) (numéro de disque, de la cheville, à la cheville) ... du premier mouvement à la enfin, et codé en binaire, émet le ème bit.
Faites-moi savoir si j'ai besoin d'être plus précis sur l'encodage. Je suppose que le commentaire de Kaveh s'applique dans ce cas?
Réponses:
Nous pouvons facilement calculer et dans le temps en parcourant la représentation binaire de du bit le moins significatif vers le haut. C'est ça.p d O(logk) k
Supposons maintenant que vous vouliez vraiment le ème bit dans la séquence de sortie, où fait partie de l'entrée au lieu de . Si chaque tour est codé en utilisant le même nombre de bits - en particulier, bits pour le numéro de disque, bits pour le from-peg et bits pour le to-peg - alors nous devons simplement calculer le ème mouvement, où , puis extraire le bit approprié. (Notez que est linéaire dans la taille d'entrée, car nous devons connaître pour déterminer la sortie.)i i k lg(n+1) 2 2 k k=⌊i/(lg(n+1)+4)⌋ lg(n+1)+4 n
D'un autre côté, si nous utilisons une représentation de longueur variable pour les nombres de disques, alors nous pouvons trouver le nombre de déplacements en temps polynomial par recherche binaire. Nous devons connaître le nombre total de tours nécessaires pour déplacer les premiers disques, pour tous les , mais cela est donné par la récurrence que nous pouvons évaluer en temps polynomial par programmation dynamique. Les autres détails sont laissés comme un exercice ennuyeux pour le lecteur.k m m≤k
(Je suppose que j'ai fait au moins une erreur de coup par coup ou de parité, mais j'espère que l'idée principale est claire.)
la source