• Aucun résultat trouvé

Hanoi Les tours de Hanoï. On dispose de trois socles A, B, C tels que figurés ci-dessous :

N/A
N/A
Protected

Academic year: 2022

Partager "Hanoi Les tours de Hanoï. On dispose de trois socles A, B, C tels que figurés ci-dessous :"

Copied!
4
0
0

Texte intégral

(1)

Hanoi

Les tours de Hanoï.

On dispose de trois socles A, B, C tels que figurés ci-dessous :

Socle A Socle B Socle C

Sur le socle A sont empilés n disques (pour l’exemple n=3) de diamètres diminuant de bas en haut. Le problème est de déplacer ces n disques de A vers B - à l’aide

éventuellement du socle intermédiaire C - en respectant les règles suivantes : 1- on ne peut déplacer qu’un disque à la fois ;

2- on ne peut déplacer un disque d’un socle vers un autre socle que si le dernier est vide ou si son disque le plus élevé - son sommet - est plus grand que le disque déplacé.

Par exemple, en notant U -> V le déplacement du disque occupant le sommet du socle U sur le sommet du socle V, pour n=2, on a la solution :

A -> C, A -> B, C -> B.

a- Donner une solution pour n=3.

b- Écrire une procédure récursive donnant la marche à suivre pour résoudre le problème avec n, le nombre de disques initial, quelconque.

On appellera la procédure Hanoï(), et les paramètres seront : k : le nombre de disques ;

X : le socle de départ ; Y : le socle d’arrivée ; Z : le socle intermédiaire.

Initialement, on a k=n, X=A, Y=B, Z=C.

c- Simuler l’appel de Hanoï(3, A, B, C).

d- Calculer le nombre de déplacements de disques.

(2)

a-.

Pour n=3, il suffit d’abord de déplacer les deux disques supérieurs de A vers C, puis le dernier de A vers B avant de ramener les deux disques sauvegardés en C vers B. Mais la première et la dernière de ces opérations consistent chacune à résoudre le problème pour deux disques : dans le cas de la première, en échangeant les rôles de B et C et pour la seconde, ceux de A et C. Compte tenu de la solution pour n=2 donnée ci-dessus, la première opération s’écrit donc :

A -> B, A -> C, B -> C la seconde s’écrit : C -> A, C -> B, A -> B

puis en intercalant le déplacement A -> B on obtient pour n = 3 : A -> B, A -> C, B -> C, A -> B, C -> A, C -> B, A -> B.

b-

D’une manière générale, pour déplacer n disques de A vers B, on voit qu’il suffit de savoir en déplacer n-1 : on déplace alors les n-1 plus élevés de A vers C (avec B comme socle intermédiaire), il en reste un sur A que l’on déplace en B avant de ramener en B, ceux posés en C (avec A comme socle intermédiaire).

Procédure hanoi (k : entier; X : caractère; Y : caractère; Z : caractère) debut

Si k > 0 Alors

hanoi(k-1, X, Z, Y) writeln(X, ‘ ->‘, Y) hanoi(k-1, Z, Y, X) FinSi

fin FinProcédure c-

{Hanoï(3, ‘A’, ‘B’, ‘C’).}

{k=3, X=‘A’, Y=‘B’, Z=‘C’}

{hanoi(3-1, ‘A’, ‘C’, ‘B’)

{k=2, X=‘A’, Y=‘C’, Z=‘B’}

{hanoi(2-1, ‘A’, ‘B’, ‘C’)

{k=1, X=‘A’, Y=‘B’, Z=‘C’}

(3)

{hanoi(1-1, ‘A’, ‘C’, ‘B’)}

{k=0, X=‘A’, Y=‘C’, Z=‘B’}

{}

{affichage A ->B}

{hanoi(1-1, ‘C’, ‘B’, ‘A’)}

{k=0, X=‘C’, Y=‘B’, Z=‘A’}

{}

{}

{affichage A ->C}

{hanoi(2-1, ‘B’, ‘C’, ‘A’)

{k=1, X=‘B’, Y=‘C’, Z=‘A’}

{hanoi(1-1, ‘B’, ‘A’, ‘C’)}

{k=0, X=‘B’, Y=‘A’, Z=‘C’}

{}

{affichage B ->C}

{hanoi(1-1, ‘A’, ‘C’, ‘B’)}

{k=0, X=‘A’, Y=‘C’, Z=‘B’}

{}

{}

{}

{affichage A->B}

{hanoi(3-1, ‘C’, ‘B’, ‘A’)

{k=2, X=‘C’, Y=‘B’, Z=‘A’}

{hanoi(2-1, ‘C’, ‘A’, ‘B’)

{k=1, X=‘C’, Y=‘A’, Z=‘B’}

{hanoi(1-1, ‘C’, ‘B’, ‘A’)}

{k=0, X=‘C’, Y=‘A’, Z=‘B’}

{}

{affichage C ->A}

{hanoi(1-1, ‘B’, ‘A’, ‘C’)}

{k=0, X=‘B’, Y=‘A’, Z=‘C’}

{}

{}

{affichage C ->B}

{hanoi(2-1, ‘A’, ‘B’, ‘C’)

{k=1, X=‘A’, Y=‘B’, Z=‘C’}

{hanoi(1-1, ‘A’, ‘C’, ‘B’)}

{k=0, X=‘A’, Y=‘C’, Z=‘B’}

{}

{affichage A ->B}

{hanoi(1-1, ‘A’, ‘C’, ‘B’)}

{k=0, X=‘A’, Y=‘C’, Z=‘B’}

{}

{}

{}

{}

{}

d-

(4)

Si on note Xn le nombre de déplacements nécessaires pour n disques, on a l’équation :

(5)

Xn = 2

(6)

×6

(7)

Xn-1 + 1, X0 = 0.

C’est une équation de récurrence dont la solution est Xn = 2n - 1.

on peut le retrouver par récurrence en remarquant:

pour n = 0, Xn = 0.

pour n = 1, Xn = 1.

pour n = 2, Xn = 3 = 22 - 1.

pour n = 3, Xn = 7 = 23 - 1.

On a donc montré la solution pour n=0,

en supposant que pour i >0, on ait Xi = 2i - 1 alors

(8)

pour i+1 on a Xi+1 = 2

(9)

×9

(10)

(2i - 1) + 1 = 2i+1 - 2 + 1 = 2i+1 - 1.

donc pour tout n>0 on a Xn = 2n - 1.

-

Références

Documents relatifs

Le frottement entre les éléments en contact génère une perte énergétique sous forme de chaleur qui entraine l’échauffement des éléments en contact → ces

Pour ce faire, puisque la plupart d'en- tre nou~ projettent les films devant des associations qui sont des groupes fermés, il fuudrnit faire un effort col- lectif

Ces appréciations proviennent souvent de collègues n'ayant aucune pratique de la musi- que : « J'aime bien, avec la présentation des auteurs, ces préambules

sur l'initiation musicale par le disque. ,A défàut de musiciens, noue formerons des auditeurs. Nous ne disséquerons aucune pièce, ayant hor- reur de certains

Représenter les 6 vecteurs vitesse correspondant aux calculs précédents, en indiquant l’échelle de cette représentation.. Pourquoi ce résultat

Un fichier regroupe un ensemble de donn´ ees appel´ e contenu Un fichier est associ´ e ` a des m´ eta-donn´ ees stock´ ees ou non dans la table d’allocation : un nom, une date,

Un fichier regroupe un ensemble de donn´ ees appel´ e contenu Un fichier est associ´ e ` a des m´ eta-donn´ ees stock´ ees ou non dans la table d’allocation : un nom, une date,

Le disque est situé dans une zone de champ magnétique uniforme Ð B → = B.Ð u → z dirigé selon l’axe du disque.. La liaison pivot entre l’axe ∆ et le disque est