Académique Documents
Professionnel Documents
Culture Documents
TD 1 : rappels d’algorithmique
I Exercice 1 J On a trois algorithmes pour résoudre un problème. Le premier est de complexité Θ(n2 log n), le
second de complexité Θ(n(log n)3 ) et le troisième de complexité Θ(2n ). Lequel faut-il choisir si on a des données de
grande taille ?
I Exercice 2 J √
Classez pour l’inclusion les ensembles suivants : O( logn n ), O(n), O(1), O(log n), O( n log n), O(3n ), O(n2n ).
I Exercice 3 J
(a) Est-ce que la complexité d’un algorithme peut être à la fois en O(n2 ) et en O(n log n) ?
(b) Est-ce que la complexité d’un algorithme peut être à la fois en Ω(n2 ) et en O(n log n) ?
(c) Est-ce que la complexité d’un algorithme peut être à la fois en Θ(n2 ) et en Ω(n log n) ?
Fonction2(n)
Fonction1(n)
1 t=0
1 t=0 2 for i allant de 1 à n do
2 for i allant de 1 à n do 3 for j allant de 1 à i do
3 t = t + i×i 4 t=t+j
4 return t
5 return t
Fonction3(n) Fonction4(n)
1 t=0 1 t=0
2 i=0 2 i=1
3 while i × i < n do 3 while log2 i < n do
4 t=t+i 4 t=t+i
5 i=i+1 5 i=i+1
6 return t 6 return t
Fonction5(n)
1 t=0
2 for i allant de 1 à n do
3 j=1
4 while log2 j < i do
5 t=t+j
6 j=j+1
7 return t
1
I Exercice 7 J Dans chacun des cas et en utilisant le théorème maı̂tre, que pouvez-vous dire de la complexité
T (n) d’un algorithme vérifiant la propriété suivante? (Précisez le cas appliqué.)
1. T (n) = 4T (n/2) + 5n
? Exercice 8 ? On a un tableau T de n entiers distincts (positifs ou négatifs), qui est trié. On veut savoir s’il existe
un indice i tel que T [i] = i. Proposez une solution linéaire en n.
En vous inspirant de la dichotomie, proposez une solution de complexité O(log n).
? Exercice 10 ? On reprend le premier algorithme de l’exercice précédent : calculer la valeur de P (x) pour x donné
en entrée. En s’appuyant sur le fait que
P (x) = a0 + a1 X + a2 X 2 + . . . + an X n
= a0 + X × a1 + a2 X + . . . + an X n−1 ,
Proposez un algorithme récursif pour résoudre le problème. Donnez l’équation de sa complexité. Montrez que
l’algorithme est linéaire. Proposez une version itérative (non récursive) de l’algorithme.
I Exercice 11 J On s’intéresse à des arbres binaires qu’on représente classiquement avec une référence sur le fils
gauche et sur le fils droit (qui est vide s’il n’y en a pas). Pour chacune des questions donnez également la complexité
de l’algorithme proposé.
(a) Ecrire un algorithme qui calcule la hauteur d’un arbre.
(b) Ecrire un algorithme qui compte combien il y a de feuilles.
(c) Ecrire un algorithme qui compte combien il y a de nœuds qui ont un fils gauche mais pas de fils droit.