-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChanoi.tex
94 lines (92 loc) · 2.6 KB
/
Chanoi.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
\begin{enumerate}
\item On se permet de ne pas écrire les \texttt{deplacer} mais seulement les suites de couples d'indices.\newline
Première liste:
\begin{multline*}
(1,2)\rightarrow (1,3) \rightarrow (2,3) \rightarrow (1,2) \rightarrow (3,2) \rightarrow (3,1) \rightarrow (2,1) \\
\rightarrow (2,3) \rightarrow (1,2) \rightarrow (1,3) \rightarrow (2,3)
\end{multline*}
Soit 11 déplacements, on sent bien que l'on peut faire plus rapidement.\newline
Deuxième liste:
\begin{displaymath}
(1,3)\rightarrow (1,2) \rightarrow (3,2) \rightarrow (1,3) \rightarrow (2,1) \rightarrow (3,2) \rightarrow (1,3)
\end{displaymath}
Soit 7 déplacements seulement.
\item Si on peut passer du tas 1 au tas 3, on peut également passer du tas 1 au tas 2 et la séquence comprendra exactement le même nombre d'instructions. Précisément, si dans la séquence d'instructions pour passer de 1 à 2, on permute 2 et 3 dans tous les \texttt{deplacer()}, on obient une séquence d'instruction qui fait passer du tas 1 au tas 2.\newline
On organise alors les transferts de la manière suivante
\begin{multline*}
\begin{aligned}
\begin{pmatrix}
1 \\ 2 \\ \vdots \\ n
\end{pmatrix}
& &
\begin{pmatrix}
\\
\end{pmatrix}
& &
\begin{pmatrix}
\\
\end{pmatrix}
\end{aligned}
\longrightarrow
\begin{aligned}
\begin{pmatrix}
n
\end{pmatrix}
& &
\begin{pmatrix}
1 \\ 2 \\ \vdots \\ n-1
\end{pmatrix}
& &
\begin{pmatrix}
\\
\end{pmatrix}
\end{aligned}
\longrightarrow
\begin{aligned}
\begin{pmatrix}
\\
\end{pmatrix}
& &
\begin{pmatrix}
1 \\ 2 \\ \vdots \\ n-1
\end{pmatrix}
& &
\begin{pmatrix}
n
\end{pmatrix}
\end{aligned} \\
\longrightarrow
\begin{aligned}
\begin{pmatrix}
\\
\end{pmatrix}
& &
\begin{pmatrix}
\\
\end{pmatrix}
& &
\begin{pmatrix}
1 \\ 2 \\ \vdots \\ n
\end{pmatrix}
\end{aligned}
\end{multline*}
Dans le schéma précédent, les transferts du début et de la fin viennent de l'hypothèse de récurrence relative à un tas de hauteur $n-1$.\newline
Notons $h_n$ le nombre de déplacements nécessaires pour transférer un tas de hauteur $n$. Cette notation est justifiée par le fait que ce problème est celui des \emph{tours de Hanoï}. On a alors
\begin{displaymath}
h_3 = 7 \text{ et } h_n=2h_{n-1}+1
\end{displaymath}
Pour exprimer $h_n$, on introduit un "point fixe" $c$ qui fait apparaitre une suite géométrique:
\begin{displaymath}
\left.
\begin{aligned}
h_n &=2h_{n-1}+1 \\ c &= 2c+1
\end{aligned}
\right\rbrace
\Rightarrow
h_n - c = 2(h_{n-1}-c) = 2 ^{n-3}(h_3-c)
\end{displaymath}
Avec $c=-1$ et $h_3=7$, on obtient finalement
\begin{displaymath}
h_n = 2^n -1
\end{displaymath}
\end{enumerate}