ALGORITHMIQUE AVANCEE
Rahmoune Mohammed
ENSAO
1
1
Exemple 1
2
2
Exemple 2 : Algorithme nombre base 2
3
3
Notion de complexité d'un algorithme
4
4
Evaluation d’algorithmes
Question : étant donnés deux algorithmes qui calculent
les solutions à un même problème. Comment comparer ces
algorithmes? Autrement dit, quel est le meilleur?
5
5
Evaluation des temps d’exécution
Problématique : Comment évaluer le temps d’exécution
d’un algorithme donné?
6
6
Opération élémentaire
Définition : Une opération élémentaire est une
opération qui s’effectue en temps constant sur tous les
calculateurs usuels.
7
7
Fonction de complexité
Cette fonction de complexité dépend donc du codage retenu pour évaluer la taille de l’instance et du modèle de machine utilisé pour l’évaluation du temps d’exécution d’une opération élémentaire.
Définition : La fonction de complexité temporelle
d’un algorithme exprime le temps requis, par l’algorithme,
pour calculer la solution correspondant à une instance en
fonction de la taille de celle-ci.
8
8
Hypothèses de simplification
Pour évaluer le nombres d’opérations élémentaires on
s’appuie sur les paramètres de description de la donnée.
9
9
Critères d’évaluation
Analyse dans le pire des cas : t(n) = maximum des temps
d’exécution de l’algorithme pour toutes les instances de taille n.
Analyse moyenne : tmoy(n) = moyenne des temps
d’exécution de l’algorithme pour toutes les instances de taille n.
10
10
Ordre de grandeur
Ordre de grandeur : On dit qu’une fonction f(n) est en
O(g(n)) s’il existe une constance c, positive et non nulle,
telle que |f(n)| ≤ c |g(n)| n ≥ 0
11
11
Ordre de grandeur
Complexité | Tâche |
O(1) | Accès direct à un élément |
O(log n) | Divisions successives par deux d’un ensemble |
O(n) | Parcours d’un ensemble |
O(n log n) | Divisions successives par deux et parcours de toutes les parties |
O(n²) | Parcours d’une matrice carrée de taille n |
O(2n) | Génération des parties d’un ensemble |
O(n!) | Génération des permutations d’un ensemble |
12
12
Recherche séquentielle : complexité
N | 103 | 106 | 109 |
temps | 1ms | 1s | 16mn40s |
13
13
Exemple de problème difficile
14
14
Exemple 1 : calculabilité des algorithmes
15
15
Exemple 2 : calculabilité des algorithmes
16
16
Définitions
17
17
Définitions
18
18
Exemple de complexité
19
19
Efficacité
20
20
Récapitulatif :Temps d’exécution d’un algorithme
21
21
Exemple : Calcul de la valeur d’un polynôme
début
P=0
Pour i de 0 à n faire
P = P+ ai*Xi
finpour
fin
Coût de l’algorithme :
22
Exemple : Calcul de la valeur d’un polynôme
debut
Inter=1 P =0
Pour i de 0 à N faire
P = P+ Inter *ai
Inter = Inter * X
finpour
Fin
Coût de l’algorithme :
23
Exemple : Calcul de la valeur d’un polynôme
P(x) = (….(((anx+an-1)x+an-2)x+an-3)…..)x+a0
début
P = an
Pour i de n-1 à 0 (pas = –1) faire
P = P*X + ai
finpour Fin
🡺 Nécessité d’estimer le coût d’un algorithme avant de l’écrire et l’implémenter
Coût de l’algorithme :
24
TYPE DE LA COMPLEXITÉ
Complexité au meilleur
•C'est le plus petit nombre d'opérations qu'aura à exécuter l'algorithme sur un jeu de données de taille n.
•Tmin(n) = mind∈D T(d)
n
Complexité en moyenne
•C’est la moyenne des complexités
de l’algorithme de
données de
sur des jeux taille n
•Tmoy(n) = Σd∈Dn T(d) / |Dn|
Complexité au pire
le plus grand
à
d’opérations
exécuter
l’algorithme sur un jeu de données de taille n
•Tmax(n) = maxd∈Dn T(d)
25
25
= O(n2) veut dire qu'il existe une
constante c > 0
et une constante n0 > 0 tel que pour tout
n > n0 T(n) <= c n2
NOTATION DE LANDAU�
formellement les performances d'un algorithme.
26
26
O(cT ) = c O(T) = O(T)
O(T1) + O(T2) = O(T1 + T2) = max(O(T1);O(T2))
O(T1)O(T2) = O(T1T2)
NOTATION DE LANDAU
27
27
O(T(n)) = O(3 n2 + 10n + 10)
= O(max (3 n2, 10n, 10))
= O(3 n2)
= O (n2)
Pour n = 10 nous avons :
⮚ Temps d'exécution de 3 n2 : 3(10)2 / 3(10)2+10(10)+10 = 73,2%
⮚ Temps d'exécution de 10n : 10(10) / 3(10)2+10(10)+10 = 24,4%
⮚ Temps d'exécution de 10 : 10 / 3(10)2+10(10)+10 = 2,4%
Le poids de 3 n2 devient encore plus grand quand n = 100, soit 96,7%
On peut négliger les quantités 10n et 10. Ceci explique les règles de la notation O.
NOTATION DE LANDAU
28
28
13
CLASSES DE COMPLEXITÉ
Classe | Notation O | Exemple |
Constante | O(1) | Accéder au premier élément d'un ensemble de données |
Linéaire | O(n) | Parcourir un ensemble de données |
Logarithmique | O(log(n)) | Couper un ensemble de données en deux parties égales, puis couper ces moitiés en deux parties égales, etc. |
Quasi-linéaire | O(n log(n)) | Couper répétitivement un ensemble de données en deux et combiner les solutions partielles pour calculer la solution générale |
Quadratique | O(n2) | Parcourir un ensemble de données en utilisant deux boucles imbriquées |
Polynomiale | O(nP) | Parcourir un ensemble de données en utilisant P boucles imbriquées |
Exponentielle | O(an) | Générer tous les sous-ensembles possibles d'un ensemble de données |
29
29
14
CLASSES DE COMPLEXITÉ
30
30
CALCUL DE LA COMPLEXITÉ
Le temps d'exécution de chaque instruction simple est O(1).
31
31
CALCUL DE LA COMPLEXITÉ
Permutation (Var S: tableau [0..n-1] d’entier, i, j: entier)
O(T) = O (T1 + T2 + T3) = O(1)
tmp🡨S[i] | O(T1) = O(1) |
S[i]🡨S[j] | O(T2) = O(1) |
S[j]🡨tmp | O(T3) = O(1) |
32
32
CALCUL DE LA COMPLEXITÉ
3. Cas d'un traitement conditionnel:
Le temps d'exécution d'une instruction SI est le temps d ’exécution des instructions exécutées sous condition, plus le temps pour évaluer la condition. Pour une alternative, on se place dans le cas le plus défavorable.
33
33
CALCUL DE LA COMPLEXITÉ
4. Cas d'un traitement itératif :
Le temps d ’exécution d'une boucle est la somme du temps pour évaluer le corps et du temps pour évaluer la condition.
Remarque : Souvent ce temps est le produit du nombre d'itérations de la boucle par le plus grand temps possible pour une exécution du corps.
| Boucle Pour | Boule Tant que |
34
34
CALCUL DE LA COMPLEXITÉ
Recherche séquentielle (S: tableau [0..n-1] d’entier, x: entier): booléen
i🡨 0
O(1)
Trouve 🡨 faux
O(1)
Tant que ((i<n) et (non trouve)) faire
Condition = O(1);
nombre d’itération = n
Si (S[i] = x) alors
Trouve 🡨 vrai
i🡨 i + 1
FinTantQue
Retourner trouve
O(T) = max(O (1) + O (n *1) + O(1)) = O (n)
35
35
Complexité du Tri par Insertion
(i-1) déjà triées, et ce jusqu'à ce que i = N.
36
Complexité du Tri par Insertion
Procédure tri_Insertion (var tab : tableau entier [N])
i, j :entier ; x: entier ;
Pour i de 2 à N faire
x← tab[i];
k ← i - 1;
Tant que j > 0 ET tab[j] > x faire
tab[j+1] ← tab[j];
j ← j - 1;
Fin Tant que
tab[j+1] ← x;
Fin pour
Fin
37
Complexité du Tri par Insertion
Faire la trace pour
T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]
38
39
Complexité du Tri par Insertion
i | x | j | j > 0 et T[j] > x | T |
- | - | - | - | 3 1 4 0 5 |
2 | 1 | 1 | oui | |
| | 0 | non | 1 3 4 0 5 |
3 | 4 | 2 | non | |
4 | 0 | 3 | oui | |
| | 2 | oui | 1 3 0 4 5 |
| | 1 | oui | 1 0 3 4 5 |
| | 0 | non | 0 1 3 4 5 |
5 | 5 | 4 | non | 0 1 3 4 5 |
Trace de insert(T)
40
Trace de insert(U) et insert(V)
i | x | j | U |
- | - | - | 0 3 4 6 9 |
2 | 3 | 1 | |
3 | 4 | 2 | |
4 | 6 | 3 | |
5 | 9 | 4 | |
i | x | j | V |
- | - | - | 9 6 4 3 0 |
2 | 6 | 1 | |
| | 0 | 6 9 4 3 0 |
3 | 4 | 2 | |
| | 1 | 6 4 9 3 0 |
| | 0 | 4 6 9 3 0 |
4 | 3 | 3 | |
| | 2 | 4 6 3 9 0 |
| | 1 | 4 3 6 9 0 |
| | 0 | 3 4 6 9 0 |
5 | 0 | 4 | |
| | 3 | 3 4 6 0 9 |
| | 2 | 3 4 0 6 9 |
| | 1 | 3 0 4 6 9 |
| | 0 | 0 3 4 6 9 |
Complexité du Tri par Insertion
Exemple 1 : Tri par insertion
41
Complexité du Tri par Insertion
🡺 sa complexité O(n2)
2
Exemple 1 : Tri par insertion
Soit 1+2+3+4+…+(n-1) = n(n +1) - n
42
Complexité du Tri par Insertion
Exemple 1 : Tri par insertion
🡺 O(n2)
43
Complexité du Tri par sélection
45
Complexité du Tri par sélection
Procédure select (T[1..n])
pour i ← 1 jusqu'à n-1 faire
minj ← i,
minx ← T[i]
pour j ← i + 1 jusqu'à n faire
si T[j] < minx alors
minj ← j
minx ← T[j]
FinSi
T[minj] ← T[i]
T[i] ← minx
FinPour
FinPour
Exercice : Faire la trace pour
T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]
46
Complexité du Tri par sélection
i | j | minj | minx | T |
- | - | - | - | 3 1 4 0 5 |
1 | - | 1 | 3 | |
| 2 | 2 | 1 | |
| 3 | 2 | 1 | |
| 4 | 4 | 0 | |
| 5 | 4 | 0 | 0 1 4 3 5 |
2 | - | 2 | 1 | |
| 3 | 2 | 1 | |
| 4 | 2 | 1 | |
| 5 | 2 | 1 | 0 1 4 3 5 |
3 | - | 3 | 4 | |
| 4 | 4 | 3 | |
| 5 | 4 | 3 | 0 1 3 4 5 |
4 | - | 4 | 4 | |
| 5 | 4 | 4 | 0 1 3 4 5 |
Trace de select(T)
47
Trace de select(U) et select(V)
i | j | minj | minx | U |
- | - | - | - | 0 3 4 6 9 |
1 | - | 1 | 0 | |
| 2 | 1 | 0 | |
| 3 | 1 | 0 | |
| 4 | 1 | 0 | |
| 5 | 1 | 0 | 0 3 4 6 9 |
2 | - | 2 | 1 | |
| 3 | 2 | 3 | |
| 4 | 2 | 3 | |
| 5 | 2 | 3 | 0 3 4 6 9 |
3 | - | 3 | 4 | |
| 4 | 3 | 4 | |
| 5 | 3 | 4 | 0 3 4 6 9 |
4 | - | 4 | 6 | |
| 5 | 4 | 6 | 0 3 4 6 9 |
i | j | minj | minx | V |
- | - | - | - | 9 6 4 3 0 |
1 | - | 1 | 9 | |
| 2 | 2 | 6 | |
| 3 | 3 | 4 | |
| 4 | 4 | 3 | |
| 5 | 4 | 0 | 0 6 4 3 9 |
2 | - | 2 | 6 | |
| 3 | 3 | 4 | |
| 4 | 4 | 3 | |
| 5 | 4 | 3 | 0 3 4 6 9 |
3 | - | 3 | 4 | |
| 4 | 3 | 4 | |
| 5 | 3 | 4 | 9 6 4 3 0 |
4 | - | 4 | 6 | |
| 5 | 4 | 6 | 9 6 4 3 0 |
Complexité du Tri par selection
Procédure select (T[1...n])
pour i ← 1 jusqu'à n-1 faire
minj ← i, minx ← T[i]
pour j ← i+1 jusqu'à n faire
si T[j] < minx alors
minj ← j
minx ← T[j]
T[minj] ← T[i]
T[i] ← minx
t(n) = Σ1 ≤ i ≤ n-1 [ a + Σi+1 ≤j ≤ n (b) + d ] = (a + d + bn)(n - 1) – bn(n-1)/2
⇒ t(n) ∈ O(n2)
a
e
d
c
b
48
Complexité du Tri par propagation / à bulles
49
Complexité du Tri par propagation / à bulles
Procédure tri_Bulle (tab : tableau entier [N] ) i, k :entier ;tmp : entier ;
Pour i de N à 2 faire
Pour k de 1 à i-1 faire
Si (tab[k] > tab[k+1]) alors
tmp ← tab[k];
tab[k] ← tab[k+1];
tab[k+1] ← tmp;
Fin si
Fin pour Fin pour
🡺 T(n) = O(n²)
50