Année universitaire 2020-2021
GL3
TD 4 : Complexité des algorithmes
Exercice 1 :
Le problème connu des tour de HANOI à n rondelles(et 3 piquets), noté P(n,3), peut-être résolu avec
un algorithme récursif de complexité C(n,3)= 2n-1 (mouvements). Il s’agit d’étudier ici le problème
général P(n,p)où l’on dispose de p>3 piquets.
1. Montrer que C(n, n+1)=an-b, a et b entiers positifs à déterminer et que C(n,p)>C(n,n+1) pour
tout p<n+1.
2. Calculer C(n,n)
3. Montrer que C(n,4)=c C(n-2,4)+d, c et d entiers positifs à déterminer. En déduire la valeur de
C(n,4) pour n≥3. Discuter selon la parité de n.
Exercice 2
Quelle est la complexité de l'algorithme suivant ?
float f(float x, int n)
{
int i; float S;
if (n < 1)
return n;
S = 0;
for(i=0;i<n;i++)
S = S + x/(i+n);
return S + f(x,n/2);
}
Exercice 3 - Suite de Fibonacci
On veut calculer la suite de Fibonacci définie par u0=u1=1 et, pour tout n>=2 , un= un-1+un-2
Proposez un algorithme récursif simple pour calculer un . Estimez, sans detailler, sa
complexité. Montrez les différents appels récursifs lors du calcul de u4 . Comment améliorer
l'algorithme?
Proposez une version itérative (non récursive) qui calcule un en temps linéaire.
Année universitaire 2020-2021
GL3
Exercice 4 :
Concevoir un algorithme récursif m-aire (m≥2) calculant le maximum d’une liste de taille n.
Déterminer sa complexité. Comparer avec l’algorithme itératif classique. Conclure.
Exercice 5 :
On considère deux algorithmes récursifs AR1(n,m), de complexité C1(n,m) et AR2(m) de complexité
C2(m) vérifiant les relations de récurrence suivantes :
• C1(n,m)=C1(n/2,m)+C2(m/2)
• C2(m)=2 C2(m-1)+O(1)
Déterminer C2(m) puis C1(n,m), sachant que C1(1,n)=C2(1)=1 et en supposant que n=2 k (k>1) et
m=2r (r>1). Simplifier l’expression de C1(n,m)lorsque m= O(logn) et m=O(n).