# Tours de Hanoï

Les tours de Hanoï (originellement, la tour d'Hanoï) sont un jeu de réflexion imaginé par le mathématicien français Édouard Lucas, et consistant à déplacer des disques de diamètres différents d'une tour de « départ » à une tour d'« arrivée » en passant par une tour « intermédiaire », et ceci en un minimum de coups, tout en respectant les règles suivantes :
* on ne peut déplacer plus d'un disque à la fois ;
* on ne peut placer un disque que sur un autre disque plus grand que lui ou sur un emplacement vide.
On suppose que cette dernière règle est également respectée dans la configuration de départ.

## Origine du problème

Le problème mathématique des tours de Hanoï a été inventé par Édouard Lucas. Paru d'abord en fascicule en 1889 , il est publié ensuite dans le tome 3 de ses Récréations mathématiques, parues à titre posthume en 1892. Il annonce que ce problème est dû à un de ses amis, N. Claus de Siam (anagramme de Lucas d'Amiens, Amiens étant sa ville de naissance), prétendument professeur au collège de Li-Sou-Stian (anagramme de Saint Louis, le lycée où Lucas enseignait).
Sous le titre « Les brahmes tombent », Lucas relate que « N. Claus de Siam a vu, dans ses voyages pour la publication des écrits de l'illustre Fer-Fer-Tam-Tam, dans le grand temple de Bénarès, au-dessous du dôme qui marque le centre du monde, trois aiguilles de diamant, plantées dans une dalle d'airain, hautes d'une coudée et grosses comme le corps d'une abeille. Sur une de ces aiguilles, Dieu enfila au commencement des siècles, 64 disques d'or pur, le plus large reposant sur l'airain, et les autres, de plus en plus étroits, superposés jusqu'au sommet. C'est la tour sacrée du Brahmâ. Nuit et jour, les prêtres se succèdent sur les marches de l'autel, occupés à transporter la tour de la première aiguille sur la troisième, sans s'écarter des règles fixes que nous venons d'indiquer, et qui ont été imposées par Brahma. Quand tout sera fini, la tour et les brahmes tomberont, et ce sera la fin des mondes ! ».
Comme indiqué ci-dessous, un jeu à 64 disques requiert un minimum de 2$^{64}$-1 déplacements (soit 18 446 744 073 709 551 615 déplacements). En admettant qu'il faille une seconde pour déplacer un disque, ce qui fait 86 400 déplacements par jour, la fin du jeu aurait lieu au bout d'environ 213 000 milliards de jours, ce qui équivaut à peu près à 584,5 milliards d'années, soit 43 fois l'âge estimé de l'univers (13,7 milliards d'années selon certaines sources).

## Nombre de déplacements à effectuer

On peut démontrer par récurrence que si n est le nombre de disques, il faut 2$^n$ - 1 coups au minimum pour parvenir à ses fins, quantité qui augmente très rapidement avec n. En effet, soient A, B et C les trois emplacements des tours ; notons x$_n$ le nombre de déplacements de disques nécessaires au déplacement d'une tour complète. Pour déplacer une tour de n disques de A vers C, on effectue ces trois étapes :
* déplacer la tour des n-1 premiers disques de A vers B (étape qui nécessite x$_{n-1}$ déplacements, d’où la récurrence) ;
* déplacer le plus grand disque de A vers C (un déplacement supplémentaire) ;
* déplacer la tour des n-1 premiers disques de B vers C (à nouveau x$_{n-1}$ déplacements).
Le nombre de déplacements de disques vérifie donc la relation de récurrence :
$\left\{{\begin{matrix}x_{0}&=&0\\x_{n}&=&2x_{n-1}+1&{\mbox{si }}n\geq 1\end{matrix}}\right.$
ce qui donne bien
$x_{n}=2^{n}-1\,$
On peut montrer que la méthode décrite ici donne la séquence optimale (celle qui nécessite le moins de coups), et que celle-ci est unique. En effet, pour déplacer la tour de n disques de A vers C, on devra forcément, à un moment ou à un autre, déplacer le plus grand disque de A vers C, et pour ce faire, on devra avoir empilé les n-1 premiers disques en B.

## Résolution algorithmique
### Solution récursive

Le problème des tours de Hanoï est souvent présenté en cours d'algorithmique (programmation informatique). En effet, il offre un exemple de la puissance et de la lisibilité des programmes définis de façon récursive (un autre exemple étant le tri arborescent). En effet, la méthode de résolution vue précédemment conduit à un algorithme récursif, décrit ci-dessous. Les paramètres de la procédure Hanoï sont :
* n : nombre de disques utilisés,
* A, B, C : trois emplacements
La procédure ci-dessous déplace les n disques supérieurs de la tour A vers la tour C en utilisant la tour B comme emplacement temporaire.
Pour résumer pour déplacer les n disques supérieurs de A vers C en utilisant B comme emplacement temporaire :
* on déplace les n-1 disques supérieurs de A vers B en utilisant C comme emplacement temporaire ;
* on déplace le disque de A vers C ;
* on déplace les n-1 disques supérieurs de B vers C en utilisant A comme emplacement temporaire.
La figure ci-contre montre l'exécution de Hanoï(4, A, B, C). La colonne de gauche, montre l'effet global de déplacer les 4 disques de A vers C. La deuxième colonne montre les actions de Hanoï(3, A, C, B) (déplacement des 3 disques supérieurs en A vers B), le déplacement du disque de A vers C puis de Hanoï(3, B, A, C) (déplacement des 3 disques de B vers C). La troisième colonne détaille les appels récursifs pour n = 1. La dernière colonne (de droite) montre la suite complète des déplacements.

#### Algorithme généralisé à une position quelconque

On peut généraliser la résolution récursive au cas où les disques sont initialement disposés de façon aléatoire sur les trois emplacements, plutôt qu’empilés sur le premier (la position initiale est quelconque). L’objectif sera de regrouper les n disques sur l’emplacement d’arrivée A. On numérote les n disques de 1 à n par ordre de taille croissante, et l’on note P$_k$ la position du disque numéroté k. On part du constat suivant : il faudra forcément, à un moment, déplacer le plus grand disque de P$_n$ vers A. Le raisonnement récursif est alors similaire au précédent :
* regrouper les n-1 premiers disques sur l’emplacement intermédiaire I (celui qui n’est ni A ni P$_n$) ;
* déplacer le plus grand disque de P$_n$ vers A ;
* regrouper les n-1 premiers disques en A.
À la différence du cas particulier traité précédemment, l’emplacement de départ dépend de la disposition des disques. Il faut par ailleurs distinguer le cas où le disque n se trouve déjà au bon endroit (P$_n$ = A). Dans ce cas, suivre la méthode précédente ne serait pas optimal : la deuxième étape est inutile, et l’on peut fusionner les première et troisième étapes en regroupant directement les n-1 premiers disques en A.
L’algorithme généralisé devient donc :
Notons que le dernier appel récursif peut être remplacé par un appel à la procédure Hanoï du cas particulier vu précédemment, puisque tous les n-1 premiers disques sont alors empilés en I.
Avec le même raisonnement que précédemment, on montre que cet algorithme donne l’unique séquence optimale. On peut exprimer le nombre de coups en fonction du nombre n de disques, de leur disposition et de l’emplacement A d’arrivée : on le note y$_n$(A).
* Si le disque n est déjà bien placé, alors le nombre de coups est y$_{n-1}$(A) car on se contente de déplacer les n-1 premiers disques en A ;
* sinon, le nombre de coups est $y_{n-1}({\mbox{I}})+1+x_{n-1}$, soit $y_{n-1}({\mbox{I}})+1+(2^{n-1}-1)$.
On a donc la relation de récurrence suivante :
$\left\{{\begin{matrix}y_{0}({\mbox{A}})&=&0\qquad \qquad \qquad \qquad \qquad \quad \\y_{n}({\mbox{A}})&=&\left\{{\begin{matrix}y_{n-1}({\mbox{A}})&{\mbox{si P}}_{n}={\mbox{A}}\\y_{n-1}({\mbox{I}})+2^{n-1}&{\mbox{sinon}}\qquad \end{matrix}}\right.&\quad {\mbox{, si }}n\geq 1\end{matrix}}\right.$
On peut alors exprimer y$_n$(A) comme une somme de puissances de 2, où un terme est ajouté si et seulement si le disque correspondant est mal placé :
$y_{n}=\sum _{k=1}^{n}b_{k}\times 2^{k-1}$
où b$_k$ vaut 0 si le disque k est bien placé, 1 sinon.
Dans le pire des cas, tous les disques sont mal placés. On a alors $y_{n}=\sum _{k=1}^{n}2^{k-1}=2^{n}-1$. Il est intéressant de remarquer que la situation initiale usuelle est l’un de ces pires des cas.

### Solution itérative

Il existe également une procédure itérative pour résoudre de façon optimale le problème des tours de Hanoï. Elle consiste à effectuer successivement les deux déplacements suivants, en désignant par A, B, C les trois tours (de gauche à droite) :
* déplacer le plus petit disque d'un emplacement à l'emplacement suivant (de A vers B, de B vers C, de C vers A, par exemple) ;
* déplacer un autre disque ;
et à poursuivre itérativement ces deux déplacements jusqu'à ce que la tour complète soit déplacée, le dernier déplacement se limitant alors à celui du plus petit disque sur le sommet de la tour. L'action « déplacer un autre disque » est non ambiguë puisque, en dehors du plus petit disque, un seul mouvement de disque est possible.
Contrairement à la procédure récursive, la procédure itérative n'utilise aucune mémorisation de l'arbre des déplacements à effectuer et nécessite seulement de se souvenir si on doit déplacer le plus petit disque ou non, et dans quel sens sont effectués les déplacements du petit disque. Il permet également, à tout moment, de revenir à la situation de départ : il suffit pour cela d'inverser le sens dans lequel se déplace le plus petit disque. Cependant, les raisons pour lesquelles cet algorithme résout le problème sont moins apparentes que pour l'algorithme récursif.
On peut l’expliquer en constatant que dans la solution optimale, on déplace nécessairement le plus petit disque une fois sur deux exactement, car le déplacer deux fois de suite ne serait pas optimal, et déplacer l’autre disque deux fois de suite non plus. Il reste à déterminer la façon dont on déplace ce plus petit disque.
Supposons que la tour de n disques soit initialement sur l’emplacement A, et qu’on veuille la déplacer sur l’emplacement C. On montre par récurrence sur n que l’itération des deux mouvements décrits précédemment produit la séquence optimale, si le sens dans lequel est déplacé le plus petit disque est A → B → C → A (de la gauche vers la droite) pour n pair, ou A → C → B → A (de droite à gauche) pour n impair. En effet :
* Pour n = 1, il suffit de déplacer l'unique disque de A vers C.
* Supposons la propriété démontrée pour le déplacement de n-1 disques. Comme dans le cas récursif, on va déplacer la tour de n disques en déplaçant les n-1 disques supérieurs de A vers B, puis le grand disque de A vers C, puis les n-1 disques de B vers C.
** Si n est pair, alors n-1 est impair, et selon l'hypothèse de récurrence (en échangeant les rôles de C et B), lors du déplacement de la pile des n-1 disques supérieurs de A vers B, un déplacement sur deux est effectué par le plus petit disque dans l'ordre A → B → C → A → ... → A → B. On déplace alors le grand disque de A vers C (déplacement qui succède au dernier déplacement du plus petit disque). Puis on déplace les n-1 disques de B vers C, un déplacement sur deux étant effectué par le plus petit disque, cette fois dans l'ordre B → C → A → B → ... → B → C. Finalement, la suite des déplacements du petit disque aura bien été A → B → C → A → … → B puis B → C → A → … → C, le plus petit disque étant déplacé une fois sur deux.
** La vérification est analogue si n est impair.

### Une autre solution itérative

On suppose les tours numérotées 1, 2 et 3.
Un déplacement de la tour n° i vers la tour n° j est noté i + j.
Ainsi le déplacement 3 désigne aussi bien le déplacement de la tour 1 vers la tour 2 que de la tour 2 vers la tour 1, mais il n'y a pas d'ambiguïté possible : on disposera le plus petit disque sur le plus grand.
De même le déplacement 4 désigne aussi bien le déplacement de la tour 1 vers la tour 3 que de la tour 3 vers la tour 1.
Et enfin le déplacement 5 désigne aussi bien le déplacement de la tour 2 vers la tour 3 que de la tour 3 vers la tour 2.
Lorsque le nombre de disques est pair, les déplacements à effectuer sont 3,4,5,3,4,5,3,4,5... autant de fois que nécessaire (la séquence 3,4,5 est répétée ${\frac {2^{n}-1}{3}}$ fois).
Lorsque le nombre de disques est impair, les déplacements à effectuer sont 4,3,5,4,3,5,...autant de fois que nécessaire (la séquence 4,3,5 est répétée ${\frac {2^{n}-2}{3}}$ fois puis se termine par le déplacement de la tour 1 vers la tour 3).

### Une troisième solution itérative

On suppose les disques colorés en noir en blanc, alternativement. Par commodité, on supposera aussi que les socles des trois tiges sont colorés en noir ou blanc. Le socle qui supporte la tour initiale est coloré d'une couleur autre que celle du plus grand disque, de façon à respecter l'alternance des couleurs. Les deux autres socles sont l'un noir, l'autre blanc. On déplace itérativement les disques selon les deux règles suivantes :
* On n'effectue jamais un mouvement qui annule directement le dernier mouvement qu'on vient d'effectuer.
* On déplace le seul disque qu'on peut poser sur un disque ou un socle de couleur différente.

## Tours de Hanoï et triangle de Pascal

On peut représenter le jeu des Tours de Hanoï par un graphe abstrait : chaque sommet du graphe représentant une disposition possible des N disques sur les trois tours, une arête reliant deux sommets s'il existe un mouvement d'un disque permettant de passer d'une disposition, représentée par l'un des sommets, à l'autre. L'étiquetage des sommets est basé sur la position des disques dans la disposition qu'il représente : on lit de gauche à droite à quelle tour appartient chaque disque, en commençant par la position du plus grand disque.
Le diagramme montre l'arbre du jeu avec trois disques. La position initiale est située à l'un des sommets du triangle, par exemple AAA, la position finale étant un autre sommet, BBB ou CCC. La couleur des arêtes indique le disque à déplacer : rouge pour le plus petit disque, jaune pour le disque intermédiaire, et bleu pour le grand disque.
On montre que, pour tout N, le graphe des Tours de Hanoï à N disques est identique à celui obtenu à partir d'un Triangle de Pascal d'ordre 2$^N$, où l'on relie par une arête les coefficients binomiaux impairs.

## Applications
### Psychologie

La tâche de la Tour de Hanoï est utilisée dans la recherche en psychologie notamment au travers de la résolution de problème. Il est également utilisé comme test neuropsychologique.
Cette tâche est sensible aux dysfonctionnements frontaux et préfrontaux$^,$.
Ce test permet ainsi l'évaluation des fonctions exécutives, comme la planification, la mémoire de travail et l'inhibition.
La performance à la tour d’Hanoï dépend des capacités d'inhibition, de la mémoire de travail, de la mémoire procédurale, et de l'intelligence fluide.
Or l'inhibition nécessite la suppression de l'activité du cortex moteur primaire, du cortex frontal inférieur droit et de l'aire motrice supplémentairement. La mémoire de travail implique la partie dorso-latérale du cortex frontal qui permet la manipulation active et le contrôle des informations. De même, la planification est corrélée avec l'activation de la partie dorsale du cortex préfrontal, du cortex pariétal et prémoteur et du cerebellum.
On comprend pourquoi la tour d'Hanoï est sensible aux dysfonctionnements frontaux et préfontaux.
Ce test est proche de celui du test de la Tour de Londres ainsi que celui des Tours de Toronto.

### Informatique

La tour de Hanoï est aussi utilisée comme schéma de rotation des sauvegardes (en), quand celles-ci sont sauvegardées sur plusieurs disques ou bandes.