Professional Documents
Culture Documents
5 R ecursion et arbres
5.1 Nombres Fibonacci
On d enit les nombres Fibonacci par F(0) = 0, F(1) = 1 et la r ecurrence F(n) = F(n1)+F(n2) (fr)
pour n > 1. Les racines de l equation de r ecurrence homog` ene sont =
1+
5
2
et
= 1 =
1
5
2
. La
solution sp ecique se trouve par la solution des equations
F(0) = 0 = a
0
+ b
0
; F(1) = 1 = a
1
+ b
1
.
On obtient a = b = 5
1/2
, donc
F(n) =
n
n
5
=
_
5
1/2
+ o(1)
_
_
1 +
5
2
_
n
= (
n
). (5.1)
Dans dautres mots, F(n) a une croissance exponentielle. Comme
n
n
/
5 + 1/2
_
.
Th eor` eme 5.1. Lalgorithme dEuclid (v. Exemple 4.2) prend au plus log
(b
5)
_
+ o(1) par
Equation (5.1).
REMARQUE. La borne de th eor` eme 5.1 montre le pire cas : cest avec a = F(n + 1), b = F(n). Avec un tel choix, a mod b =
F(n 1), et lalgorithme doit it erer n 2 fois pour arriver ` a a = F(3) = 2, b = F(2) = 1 et se terminer apr` es une derni` ere
it eration de plus o` u b devient 0 et on retourne la r eponse a = 1.
5.2 R ecursion terminale
On peut toujours transformer une boucle en un algorithme r ecursif equivalent.
IFT2015 Miklos Cs uros 19 janvier 2011
4 Analyse dalgorithmes
4.1 Temps de calcul
Pour caract eriser une structure de donn ees, on analysera souvent le temps de calcul pour les op erations
diff erentes. Typiquement, on veut arriver ` a un r esultat tel que lop eration search prend O(log n) temps au
pire cas o` u n mesure la taille de la strucure. Ce quon veut dire par la taille, d epend du contexte. Ici, n
est le nombre d el ements dans une structure qui implante un dictionnaire. De m eme facon, on caract erisera
un algorithme en disant que algorithme Tel-et-tel prend O(n) temps au pire cas, o` u n mesure la taille
de lentr ee. En g en eral, on veut arriver ` a une borne asymptotique en fonction de la taille de lentr ee et celle
de la sortie.
Exemple 4.1. On prend lexemple de rechercher le maximum dans un tableau. Lalgorithme MAX-TABLEAU
utilise une boucle. MAX-REC utilise une r ecurrence terminale equivalente ` a la version it erative.
MAX-TABLEAU
`
x[0..n 1]
2
Taille de l'entre est lg a + lg b bits.
O(log b)
O(log a+log b) fois
O(log^2 a)
O(log a)
O(log b)
O(log c)
1
Les variables locales
(incluant la variable
d'itrations)
deviennent des
arguments dans la
version rcursive
cas
terminal
= fin de la
boucle
mise jour de la
variable de la
boucle
appel rcursif en position terminale
1
Lappel r ecursif est en position terminale : on na pas besoin dattendre le retour de lappel, donc on (fr)
peut simplement transf erer le contr ole dex ecution ` a lappel execut e. Plut ot quallouer de nouvelle espace
sur la pile dex ecution, on peut remplacer le bloc allou e pour les variables locales et adresse de retour. En
cons equence, la pile dex ecution ne d eborde pas. Ce remplacement est en fait l equivalent de transformer la
r ecurrence en une it eration, perform e automatiquement par des compilateurs modernes.
Lappel r ecursif est en position terminale : on na pas besoin dattendre le retour de lappel, donc on
peut simplement transf erer le contr ole dex ecution ` a lappel execut e. Plut ot quallouer de nouvelle espace
sur la pile dex ecution, on peut remplacer le bloc allou e pour les variables locales et adresse de retour. En
cons equence, la pile dex ecution ne d eborde pas.
MAX-REC2
x[0..n 1], i)
Sortie : valeur maximale parmi x[i..n 1]
R1 si i = n alors retourner
R2 sinon retourner max
x[i], MAX-REC2(x, i + 1)