Vous êtes sur la page 1sur 2

Complexité des problèmes

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) ?

I Exercice 4 J Donnez la complexité des algorithmes suivants :

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

? Exercice 5 ? Donnez la complexité de l’algorithme suivant :

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

I Exercice 6 J Pour chacun des algorithmes suivants :


Ecrire une équation satisfaite par T (n), la complexité de l’algorithme.
Que pouvez-vous dire de la complexité de l’algorithme ?

F(n) G(n) P(n)


1 if n ≤ 2 then 1 if n ≤ 2 then 1 if n == 0 then
2 return n + 2 2 return n + 2 2 return 1
3 return F(n − 1) + F(n − 3) 3 return 2 × G(n − 1) 3 return n + P( n2 )

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

2. T (n) = 4T (n/2) + log n

3. T (n) = 6T (n/3) + n2 log n

4. T (n) = 3T (n/3) + n/2

? 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).

I Exercice 9 J On représente un polynôme P = a0 + a1 X + a2 X 2 + . . . + an X n par un tableau, qu’on note aussi


P , de taille n + 1, avec P [i] = ai . Ecrire des algorithmes suivant :
1. pour un float x donné, calculer la valeur de P (x);
2. faire la somme de deux polynômes;
3. faire le produit de deux polynômes. On pourra utiliser que si R(X) = P (X) × Q(X) alors
X
R[m] = P [i] × Q[j].
i+j=m

Donnez les complexités de vos algorithmes.

? 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.

? Exercice 12 ? On reprend les arbres de l’exercice précédent.


(a) Proposez un algorithme pour tester si deux arbres sont égaux (exactement la même forme). Quelle est sa
complexité ?
(b) On considère maintenant que deux arbres sont considéré équivalents s’ils sont égaux à condition de permuter
les fils droits et gauches de certains nœuds pour arriver à les faire coı̈ncider. Proposez un nouvel algorithme pour
effectuer le test d’équivalence et donnez sa complexité.

I Exercice 13 J On a deux chaı̂nes de caractères u et v et on veut savoir si v est un facteur de u (v apparaı̂t


quelque part comme sous-chaı̂ne de u). Proposez un algorithme pour résoudre le problème. Quelle est sa complexité ?

Vous aimerez peut-être aussi