Cours 2
Algorithmes et complexité
25 février 2013
Struct 1/23
Complexité Algos sur les tableaux
Struct 2/23
Complexité Algos sur les tableaux
Struct 3/23
Complexité Algos sur les tableaux
Struct 4/23
Complexité Algos sur les tableaux
Complexité asymptotique
La notation O
Definition
Pour une fonction g(n) donnée, on note O(g(n)) l’ensemble de
fonctions suivant :
O(g(n)) = { f (n) | ∃c et n0 , ∀n ≥ n0 , 0 ≤ f (n) ≤ c · g(n) }
On note f (n) = O(g(n)) et on dit “en grand O de g(n)”.
c.g(n) Exemples
f(n) 1 000 000 = O(1)
n = O(n)
10n = O(n2 )
99n + 2100 = O(n)
5n3 + 50n2 + 8 = O(n3 )
n
0 n0 n10 = O(2n )
Struct 8/23
Complexité Algos sur les tableaux
Propriétés utiles
Struct 9/23
Complexité Algos sur les tableaux
Struct 10/23
Complexité Algos sur les tableaux
Synthèse
Struct 11/23
Complexité Algos sur les tableaux
Choisir un tableau
comme structure de données
Struct 12/23
Complexité Algos sur les tableaux
Comment modéliser...
...
Struct 13/23
Complexité Algos sur les tableaux
Comment modéliser...
Struct 13/23
Complexité Algos sur les tableaux
Struct 14/23
Complexité Algos sur les tableaux
0 i n-1 TMAX
0 i n-1 TMAX
→ coût : O(1)
Struct 14/23
Complexité Algos sur les tableaux
suppression de l’élément e
suppression de l’élément d’indice i
Struct 16/23
Complexité Algos sur les tableaux
→ coût : O(n)
suppression de l’élément e → recherche + décalages O(n)
suppression de l’élément d’indice i → décalages O(n)
Struct 16/23
Complexité Algos sur les tableaux
Recherche dichotomique
int rechercheDicho(int elem, int tab[], int lg){
int debut = 0;
int fin = lg-1;
int milieu = (debut+fin)/2;
while(debut<=fin)
if (elem == tab[milieu])
return milieu;
else if (elem < tab[milieu]){
fin = milieu-1; /* cherche à gauche... */
milieu = (debut+fin)/2;
}
else{ debut = milieu+1; /* elem > tab[milieu] */
milieu = (debut+fin)/2; /* ... à droite */
}
return -1; /* si on n’a rien trouvé dans le while */
}
Struct 17/23
Complexité Algos sur les tableaux
Algorithmes de TRI
TRI : étant donnés un ensemble de données et une relation
d’ordre sur ces données, les trier en ordre croissant.
les données peuvent être des entiers, des flottants ( !), des
mots, des structures complexes, ...
elles peuvent être dans un tableau, une liste, un fichier, ...
l’ordre peut être numérique, lexicographique, militaire, ...
Algorithmes de tri :
les LENTS :
tri par insertion
tri à bulles
tri par sélection
...
les RAPIDES :
tri par fusion (pas en place)
tri rapide (quicksort) : rapide en moyenne
tri par tas (structure de données complexes)
...
Struct 18/23
Complexité Algos sur les tableaux
0 i+1 n-1
partie triée
Complexité ? ?
Struct 19/23
Complexité Algos sur les tableaux
0 i+1 n-1
partie triée
partie triée
0 i+1 n-1
partie triée
Complexité ? ?
Struct 20/23
Complexité Algos sur les tableaux
partie triée
0 i+1 n-1
partie triée
Quicksort
pivot
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
<= pivot >pivot
1 3 4 2 5 11 12 7 10 8 9 6
trier récursivement trier récursivement
1 2 3 4 5 7 6 8 9 10 11 12
fusionner
1 2 3 4 5 6 7 8 9 10 11 12
Complexité ?
Struct 21/23
Complexité Algos sur les tableaux
Quicksort
pivot
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
<= pivot >pivot
1 3 4 2 5 11 12 7 10 8 9 6
trier récursivement trier récursivement
1 2 3 4 5 7 6 8 9 10 11 12
fusionner
1 2 3 4 5 6 7 8 9 10 11 12
Complexité O(n2 ) ! !
Struct 21/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
Complexité ?
Struct 22/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
Complexité ?
Struct 22/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
1 2
Complexité ?
Struct 22/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
1 2 3
Complexité ?
Struct 22/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
1 2 3 4 5 6 7 8 9 10 11 12
Complexité ?
Struct 22/23
Complexité Algos sur les tableaux
Tri Fusion
0 n/2 n-1
5 1 11 3 12 7 10 8 4 2 9 6
séparer
5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
1 3 5 7 11 12 2 4 6 8 9 10
fusionner
1 2 3 4 5 6 7 8 9 10 11 12
Struct 22/23
Complexité Algos sur les tableaux
Struct 23/23