Académique Documents
Professionnel Documents
Culture Documents
ALGORITHMIQUE
Mme S. BOUKERRAM
Née AIT KCI AZZOU
1
COMPLEXITÉ ALGORITHMIQUE
2
COMPLEXITE ALGORITHMIQUE
Le calcul de
la complexité d’un
algorithme permet de
mesurer sa performance.
3
4
1 Annèe 2 Annèe 3 Annèe 4 Année 5 Annèe
JE VOIS MA CLASSE
5
1 Annèe 2 Annèe 3 Annèe 4 Année 5 Annèe
6
1 Annèe 2 3 Annèe 4 Année 5 Annèe CM1 CM2 CM3 CM4
Annèe
JE VOIS MA CLASSE
7
1 Annèe 2 3 Annèe 4 Année 5 Annèe CM1 CM2 CM3 CM4
Annèe
8
1 2 3 4 5
Où est ma classe
CM4 ??
9
1 2 3 4 5
10
1 2 3 4 5
11
1 2 3 4 5
12
1 2 3 4 5
13
1 2 3 4 5
Trouvé!!!
14
1 2 3 4 5 6 7 8 9
15
1 2 3 4 5 6 7 8 9
16
1 2 3 4 5 6 7 8 9
17
1 2 3 4 5 6 7 8 9
18
1 2 3 4 5 6 7 8 9
J’ai trouvé
19
1 2 3 4 5 6 7 8 9
20
COMPLEXITE ALGORITHMIQUE
SOIT UN TABLEAU D’ENTIERS ; on veut rechercher une valeur val dans ce tableau
100 20 30 45 15 6 17 8 29
21
La complexité de l’enfant est de déterminer le
temps nécessaire pour trouver sa classe parmi
toutes les classes
23
OBJECTIF DE LA COMPLEXITÉ
24
CALCUL DE LA COMPLEXITÉ
COMPLEXITÉ
Ressources
complexité
complexité spatiale :
temporelle
permet de quantifier
permet de quan3fier
l’utilisation de
le temps d’exécu3on
la mémoire
25
TAILLE DES DONNÉES
Paramètres
Dimension Nœuds
(entiers)
Arêtes
26
COMPLEXITÉ TEMPORELLE
28
PUISQU’IL S’AGIT SEULEMENT DE COMPARER DES
ALGORITHMES, LES RÈGLES DE CE CALCUL DOIVENT ÊTRE
INDÉPENDANTES :
29
CALCUL DE LA COMPLEXITÉ
TEMPORELLE
30
La complexité en temps d’un
algorithme sera exprimé
par une fonction,
notée 𝑇 (pour Time), qui
dépend :
31
LES INSTRUCTIONS ÉLÉMENTAIRES
SOIT UN TABLEAU D’ENTIERS ; on veut rechercher une valeur val dans ce tableau
100 20 30 45 15 6 17 8 29
34
Définitions On note Dn l'ensemble des données de taille n et T(d) le coût
de l'algorithme sur la donnée d.
On définit 3 types de complexité :
35
L'analyse au pire des cas donne
une limite supérieure de la
performance et elle garantit
Un algorithme est dit optimal si qu'un algorithme ne fera
sa complexité est la complexité jamais moins bien que ce qu'on
minimale parmi les algorithmes a établi.
de sa classe.
36
CALCUL DU TEMPS D’EXECUTION
38
REGLES DE CALCUL
39
EVALUATION DE T (N)
(SÉQUENCE)
• lire(a)
• Lire(b)
• S:=a+b
• Ecrire (S)
40
EVALUATION DE T (N) (SÉQUENCE)
• lire(a) → 1
• Lire(b) → 1
• S:=a+b → 2
• Ecrire (S) → 1
T(n)=1+1+2+1 = 5
41
EVALUATION DE T(N)
(CONDITION )
Si <condition>. Tcond
Alors Traitement1. T1(n) Tcond + Max(T1(n),T2(n))
Sinon. Traitement1. T2(n)
42
E VA L U AT I O N D E T ( N ) ( C O N D I T I O N )
• Lire(a)
• Lire(b)
• Si a< b
• alors S:=a+b
• sinon S:= 5
• S:= S+a+b
• Ecrire (S)
43
EVALUATION DE T (N)(CONDITION )
• lire(a) → 1
• Lire(b) → 1
• Si a< b → 1
• alors S:=a+b → 2
• sinon S:= 5 1+max(2,4)= 5
• S:= S+a+b → 4
• Ecrire (S) → 1
44
EVALUATION DE T (N)
(BOUCLE)
Fait
45
EVALUATION DE T (N)(BOUCLE)
• i:=1 → 1
• Tanque i<= n
• Faire
• ecrire(i)
• i:=i+1
• fait
46
EVALUATION DE T (N)(BOUCLE)
• i:=1 → 1
• Tanque i<= n → 1 * (n+1)
• Faire ecrire(i) → 1 * (n) T(n) = (n+1)+ 3*n
• i:=i+1. → 2 * (n)
• fait
47
EVALUATION DE T (N)(SOUS
PROGRAMME)
• Sous-programme
• Pour les appels de procédures/fonc5ons (sans
récursivité́), la complexité́ est égale à la somme des
complexités de chacune de ses instruc5ons.
• Pour les procédures et fonc5ons récursives, l’analyse
donne en général lieu à la résolu5on de rela5ons de
récurrences.
48
CALCUL DE LA COMPLEXIT É
D’UN ALGORITHME
Notation de Landau
50
CALCUL DE LA COMPLEXITÉ D’UN
ALGORITHME
☞ Quand on calcule la complexité d’un algorithme, on ne calcule
généralement pas sa complexité exacte, mais son ordre de
grandeur.
on s’intéresse à des
Pire des cas ? données très grandes
Parmi toutes les données
x de taille n, on ne
considère que celle qui
maximise CoûtA(x)
52
NOTATION DE LANDAU O(F(N))
T(n)=O(f(n))
Si ∃c, ∃n0 tels que ∀n>n0, T(n)≤ c×f(n)
• T(n) et en O(f(n))s’il existe un seuil à partir duquel la fonction T(.) est
toujours dominée par f(.), à une constante multiplicative fixée près.
• Exemple
• T(n)=n3 +2n2 +4n+1= O(n3) si n ≥ 1 alors f(n) ≤ 8 × n3
54
55
EXEMPLE 1
57
EXEMPLE 2
• T2 (n)= O(n2)
4n02+2n0 +1 <= c.n02
4n02+2n0+1<=5 n02
58
EXEMPLE 3
• Calculer la complexité de
• T3(n) = c1.n2+c2.n T(n) <= c. n2
avec c= c1+c2 et n0=1
• T3(n)=c1.n2+c2.n<= c1.n2+c2.n2
• <= (c1+c2)n2 pour tout n>= 1
On suppose qu'on dispose d'un algorithme dont le temps d'exécution est décrit par la fonction
T(n) = 3n2+10n+10.
61
Pourn=10 nous avons :
• Temps d'exécution de 3n2: 3(10)2 / 3(10)2+10(10)+10= 73,2%
Ø Le poids de 3n2 devient encore plus grand quand n = 100, soit 96,7%
La multiplication reste inchangée mais est parfois réécrite d'une façon plus compacte :
O(T1)* O(T2) = O(T1*T2) 63
LES RÈGLES DE LA NOTATION O SONT
LES SUIVANTES :
La complexité́ d’une boucle est égale à la somme sur toutes les itérations de la
complexité́ du corps de la boucle
64
QUELQUES RÈGLES UTILES
65
LES PRINCIPALES CLASSES DE
COMPLEXITÉ
66
LES PRINCIPALES CLASSES DE COMPLEXITÉ
67
ALGORITHME DE CALCUL DE
COMPLEXITÉ
68
CALCUL DE LA COMPLEXITÉ
• lire(a)
• Lire(b)
• S:=a+b
• Ecrire (S)
69
CALCUL DE LA COMPLEXITÉ
• Exemple • Exemple
• lire(a) → 1 • lire(a) → O(1)
• Lire(b) → 1 • Lire(b) → O(1)
• S:=a+b → 2 • S:=a+b → O(1)
• Ecrire (S) → 1 • Ecrire (S) → O(1)
• T(n)=1+2+1+1 = 5 • T(n)= max(O(1),O(1) ,O(1) ,O(1))=O(1)
• Tn =O(5)=O(1)
70
• Exemple
• lire(a) → O(1) • i:=1 → O(1)
• Lire(b) → O(1) • Tanque i<= n → O(1) * (n+1)
O(3n+n+1)
• Si a< b → O(1) • Faire ecrire(i) → O(1) * (n) =O(4n+1)=
• alors S:=a+b → O(2)=O(1) O(n)
• i:=i+1. → O(2) * (n)
sinon S:= 5 O(1) O(1)
• S:= S+a+b. O(4) =O(1)
• fait
72
EXERCICE 1
Algorithme Enigme? Action Nb O() Justification
Déclaration Fois
n, somme, i, nombre : entier; Moyenne : 1 1 O(1) Inst simple
réel; 2 1 O(1) Inst simple
Début 3 1 O(1) Inst simple
1. Lire(n ) 4 n+1 (n+1).O(1) Cond Boucle
(Nbiter+1) fois 1
2. somme ← 0
5 n n.O(1) Corps Boucle
3. i← 1 (Nbiter) fois 1
4. Tant que i <= n faire 6 2n 2n.O(1) Corps Boucle
5. lire( nombre) (Nbiter) fois 1
6. somme← somme + nombre 7 2n 2n.O(1) Corps Boucle
7. i ← i+1 (Nbiter) fois 1
Fin tanque 8 2 O(1) Inst simple
8. moyenne← somme/n T(n)= 6+6n O(5+6n)=O(n) Complexité
Fin linéaire 73
EXEMPE 2
• Algorithme TRI
• 1. Pour i←1 jusqu’à m-1 faire /*BE
• 2. min_pos ← i;
3. min ← t[min_pos];
4. pour j← i+1 jusqu’à m faire /*B.I
• 5. Si (t[j] < min)
• 6. alors min_pos ← j
• 7. min ← t[min_pos]
• Finsi
• Finpour
• 8. t[min_pos] ← t[i];
• 9. t[i] ← min
• Finpour
74
Analyse et Calcul de la Complexité́ de l’algorithme TRI : Coût Tri(m)= ?
•L’ac%on 1 (évaluaion cond boucle Pour ) est exécutée m fois car (Nbre-itéra*on + 1 )*1
•Ici pas = 1 alors Nbre-itéra%on = V.F – V.I +1= (m-1) – 1 + 1 = m – 1, alors:
L’ac*on 1 est exécutée : (Nbre-itéra*on + 1 )*1= (m – 1 + 1 )*1 = m fois.
Rappel
(m) + (m − 1) + (m − 2) ... + 2: est une suite arithmé2que progressant de 1 dont la somme est
obtenue par: .
76
les actions 5, 6, 7 sont exécutés
Coût Tri(m)= = [(m) + 4(m − 1)] O(1) + [(m-1)(m+2)/2] O(1) + 3[m(m−1)/2] )O(1)
= [m + 4m − 4 + (m2+m)/2 − 1 + (3m2−3m)/2] O(1)
= (5m − 5 + 4m2/2 − m) O(1)
ucle
Etape 2 i= n-2=n-2*(2-1) Complexité linéaire
Une bo
Etape 3. i=n-4 =n-2*(3-1)
i= 0
Etap k. i=n-2 * (k-1)
0= n – 2*(k-1) d’où n= 2k - 2 k= (n+2)/2.
79
Action Nb Fois O() Justification
1 1 O(1) Inst simple
2 N+1 (N+1).O(1) Cond Boucle
(Nbiter+1) fois 1
3 N N.O(1) Corps Boucle
(Nbiter) fois 1
4 (N+1)(N+1) (N2).O(1) Cond Boucle
(Nbiter+1) fois 1
5 2.N.N (N2).O(1) Corps Boucle
(Nbiter) fois 1
81
Action Nb Fois O() Justification
1 1 O(1) Inst simple
2 k+1 (k+1).O(1) Cond Boucle
(Nbiter+1) fois 1
3 2.k k.O(1) Corps Boucle
(Nbiter) fois 1
Iteration 1 i= N i= 1
Iteration 2 i= N/2=N/21
Iteration 3. i=N/4 =N/22=(3-1) 1= N/2(k-1) d’où N= 2(k-1)
K= log2(N)+1
Iteration k. i=N/2 (k-1)
82
EXEMPLE : SOUS PROGRAMME
Algorithme principal
Procédure AA(E/S x, n : en*ers) ; Fonc*on BB (E x, n : en*ers) : en*er
Déclara*on
Déclara*on Déclara*on
un, n : en*ers
i : en*er ; i : en*er ;
Début
Début Début
6. lire(n)
1. Pour i ←1 jusqu’à n faire 3. Pour i ←1 jusqu’à n faire
7. un ←0 ;
2. x ←x + BB(i, n) 4. x ← x + i
8. AA (un, n) ;
finpour finpour
9. écrire(BB(n, n))
Fin 5. BB ← x
Fin
Fin
83
84
Fonc*on BB (E x, n : en*ers) :
en*er
Déclara*on Les ac2ons 3 et 4 sont exécutées respec*vement n+1
i : en*er ; et n fois.
Début L’ac*on 5 est exécutée une seule fois.
3. Pour i ←1 jusqu’à n faire Coût BBn) = ( n+1 + n +1) O(1) =(2n+2)(O(1)=. O(n)
4. x ← x + i
finpour
5. BB ← x
Fin L’ac*on 2 a normalement une complexité de l’ordre
de O(1), mais il y a un appel à la fonc*on BB donc le temps
d’exécu*on de l’ac*on 2 est :
O(1) + O(n) = O(n).
Procédure AA(E/S x, n : en*ers) ;
Déclara*on Les lignes 1 et 2 se répètent, n+1 et n fois, respec*vement
i : en*er ; donc la complexité́ de la procédure AA est de l’ordre de
Début
1. Pour i ←1 jusqu’à n faire CoûtAA(n)= (n+1) O(1) + (n* O(n)) ~ O(n2).
2. x ←x + BB(i, n)
finpour CoûtAA(n)~ O(n2).
Fin
85
Algorithme principal •La complexité́ de chacune des actions 6 et 7 est de
Déclara*on
un, n : en*ers l’ordre O(1).
Début
6. lire(n) •La complexité de l’appel à AA (à la ligne 8) est de
7. un ←0 ;
8. AA (un, n) ; l’ordre de O(n2).
9. écrire(BB(n, n))
Fin •La complexité de l’action écrire (de ligne 9) égale
(à la complexité
•de l’opération de l’écriture + la complexité de
l’appel de fonction BB),
•donc : O(1) + O(n).
•
CoutAlg= O(1) + O(n2) +O(1) + O(n)= O(n2)
86
COMPLEXITÉ D’UNE FONCTION
RECURSIVE
Complexité
T(n)= 1 si n<=1
Fonction fact(n:entier):entier O(T(n))
Debut 1+T(n-1). sinon
Si n<=1 O(1)
T(n)=1+T(n-1)
alors Fact ← 1 O(1) = 2+ T(n-2)
= 3+T(n-3)
Sinon Fact ← n*fact (n-1) = i+ T(n-i)
=n-1+T(n-(n-1)) CoutFact= O(n)
Fsi =n-1+1 Fact est de complexité linéaire
Fin; O(1) O(Tn-1) =n
87
COMPLEXITÉ D’UNE FONCTION
RECURSIVE Complexité
T(n)= 1 si n=0
Fonction Exp(n:entier):entier O(T(n))
1+2*T(n-1). sinon
Debut
Si n=0 O(1)
T(n)=2*T(n-1)+1
alors exp ← 1 O(1) = 2 (2*T(n-2)+1)+1
= 22*T(n-2)+3
Sinon exp ← Exp(n-1)* Exp (n-1) = 22*T(n-2)+ (22 -1)
= 22 [2*T(n-3)+1]+3 = 23*T(n-3)+ 22 +3
Fsi O(1) =23*T(n-3)+ 23-1
Fin; 2*O(Tn-1) CoutExp= O(2n )
=. 2i*T(n-i)+ 2i-1 Exp est de complexité
expennentielle
= 2n*T(n-n)+ 2n-1= 2n*T(0)+ 2n -1
= 2n *1+ 2n = 2 * 2n
88
MERCI POUR VOTRE ATTENTION
89