Vous êtes sur la page 1sur 26

Complexité algorithmique

Complexité

ƒ Exécution d ’un programme Jutilisation des


ressources de l ’ordinateur
z temps de calcul pour exécuter les opérations
z occupation mémoire (programme + données)
ƒ Mesurer ces 2 grandeurs pour comparer entre eux
différents algorithmes
ƒ « Sur toute machine, quelque soit le langage de programmation,
l ’algorithme A1 est meilleur que A2 pour des données de grande
taille »

2
Temps d ’exécution d ’un programme
ƒ Mettre en évidence les opérations fondamentales: le temps
est proportionnel au nombre de ces opérations
z Recherche d ’un élément E dans une liste L:

nombre de comparaisons entre E et les éléments de L

z Recherche d ’un élément sur disque:


nombre d ’accès à la mémoire secondaire

z Multiplication de matrices:
nombre de multiplications et d ’additions
3
Temps d ’exécution d ’un programme

ƒ Soit n la taille des données soumise au programme


z taille de la liste dans laquelle on cherche E
z taille de la liste à trier
z dimensions d ’une matrice dont on calcule le carré
z …

ƒ T(n) : temps d ’exécution du programme


z T(n) fonction de N dans R

4
Décompte du nombre d ’opérations
fondamentales
ƒ P: nombre d ’instructions dans un bloc de programme
ƒ P(séquence) = ∑ P(E) ; E: élément de la séquence
ƒ P(if C then I1 else I2) P(C) + max(P(I1), P(I2))
ƒ P(boucle) = ∑ P(Ii) ; Ii = Ième itération de la
boucle
ƒ P(F(n)) s ’écrit en fonction de P(F(k)) pour une
procédure ou fonction récursive J résolution
d ’équations de récurrences
5
Temps d ’exécution d ’un programme
ƒ Pour certains problèmes, le temps ne dépend pas seulement
de la taille de la donnée mais aussi de la donnée elle-même

ƒ Complexité au mieux
Tmin(n) = min(Temps(d)| d donnée de taille n)
ƒ Complexité au pire
Tmax(n) = max(Temps(d)| d donnée de taille n)
ƒ Complexité en moyenne
Tmoy(n) = d:donnée∑dep(d)*Temps
taille n
(d)

6
Temps d ’exécution d ’un programme

ƒ Tmin(d) <= Tmoy(d) <= Tmax(d)

7
ƒUn exemple de calcul: recherche séquentielle d’un
élément X dans un tableau L
L:tableau [1..n] de Element
X: élément

Début
i←1
Tantque i ≤ n et (L[i] ≠X) faire
i ← i+1
Fintantque
Si i>n alors i ← 0
Fin
8
Ordre de grandeur asymptotique:
la notation Ο

ƒ T(n) pour n grand


ƒ Comparaison des ordres de grandeur asymptotique
ƒ Définition:
Soit f et g deux fonctions de N dans R*+,
f= Ο (g) (f est en grand O de g) ssi
∃ c ∈ R*+, ∃ n0 tq ∀ n > n0, f(n) ≤ c g(n)

ƒ Ex: f(n)=10n et g(n)=Ο(n²)


9
Equivalent: la notation Θ

ƒ Définition:
f= Θ(g) ssi f= Ο(g) et g= Ο(f)
c'est-à-dire
∃ c ∈ R*+, ∃ d ∈ R*+, ∃ n0 tq
∀ n > n0, d g(n) ≤ f(n) ≤ c g(n)

Ex: 2n = Θ(n) mais 2n n'est pas en Θ(n²)

10
Propriétés de le notation Ο

ƒ Les constantes ne sont pas importantes


ƒ Les termes d ’ordre inférieur sont négligeables
Si T(n) = aknk + … + a1n + a0 avec ak>0
alors T(n) est en (nk)
h( n)
Si ⎯⎯ ⎯
⎯→ 0 alors g(n) + h(n) = O(g)
g ( n) n→∞
ƒ Si T1(n) = Ο(f1) et T2(n) = Ο(f2)
alors T1(n) + T2(n) = Ο(f1 + f2)
et T1(n) ∗ T2(n) = Ο(f1 ∗ f2)
ƒ Si f(n) = Ο(g) et g(n) = Ο(h)
alors f(n) = Ο(h) 11
Appellation des ordres de grandeur
courant

ƒ Ο(1): constante
ƒ Ο(log(n)): logarithmique
ƒ Ο(n): linéaire
ƒ Ο(n log n): n log n
ƒ Ο(n²) : quadratique
ƒ Ο(n3) : cubique
ƒ Ο(2n): exponentielle

12
Croissance comparée des fonctions
fréquemment utilisées en complexité

100000 2n n3
n2

10000

nlog2(n)
1000
n
100

Log2(n)
10

1
2 4 8 16 32 64 128 256

13
Comparaisons des fonctions usuelles

ƒ log(n) = Ο (n)
ƒ n½= Ο (n)
ƒ nk = Ο (nk+1) pour tout k ≥ 0
ƒ P(n) = Ο (nk) pour tout polynôme P de degré ≤ k
ƒ nk = Ο (2n) pour tout k ≥ 0
ƒ 2n = Ο (nn)

14
( ouvrons une parenthèse
Rappels d’analyse pour classer les fonctions
Etudier de la limite de f /g pour comparer f et g

⎧0 f(n) ∈ O(g(n)) mais g(n) ∉ O(f(n))


f ( n) ⎪
lim = ⎨c implique f(n) ∈ O(g(n)) et g(n) ∈ O(f(n))
n →∞ g ( n ) ⎪
⎩∞ f(n) ∉ O(g(n)) mais g(n) ∈ O(f(n))

Règle de L’Hôpital:
Si f et g sont dérivables et si lim f ( x) = lim g ( x)
x →∞ x →∞

f ( x) f ' ( x)
Alors lim = lim si cette limite existe
x →∞ g ( x ) x →∞ g ' ( x )

15
Et aussi la formule de Stirling
fin de la parenthèse )

ƒ à propos de n!

n −n
n!~ 2πn n e

16
Rapport Temps / Taille des données

Complexités 1 log2(n) n nlog2(n n2 n3 2n


)

Evolution du temps t quand t t+3,32 10 t (10+ε)t 100 t 1000 t t10


la taille des données est
multipliée par 10

Evolution de la taille quand ∞ n10 10 n (10-ε)t 3,16 n 2,15 n n+3,32


le temps alloué est multiplié
par 10

17
Calcul de la complexité

ƒ Toute lecture, écriture, affectation (sans appel de


fonction) a un temps en Ο(1)
ƒ Complexité d ’une séquence=complexité de
l ’instruction de plus forte complexité
ƒ Si C alors A1 sinon A2
Ο(c(n)) Ο(f1(n)) Ο(f2(n))

T(n) = Ο( c(n) + max(f1(n), f2(n)) )


18
Calcul de la complexité

ƒ Pour i de A à B faire
Iteri
Finpour
ƒ Si T(Iteri) indépendant de i en 2(f(n)),
alors T(n) = Ο((B-A+1) f(n))
ƒ Si T(Iteri) dépendant de i: Titer(n,i)
alors
B
T (n) = O( ∑ T (n,i))
i= A iter
19
Calcul de la complexité

ƒ Tant que C faire Iter Fintantque

ƒ La difficulté est de déterminer une borne sup pour


le nombre d ’itérations:NB
ƒ Si T(Iter)= Ο (f(n))
T(n) = Ο (NB*(C(n) + f(n)))
ƒ Si T(Iter) dépend de l ’itération i
T(n) = Ο (NB*C(n) + ∑ Titer(n,i)
20
Calcul de la complexité

ƒ Procédures et fonctions récursives


ƒ T(n) calculé grâce à des relations de récurrence

21
Exemple
ƒ T(n) temps d ’exécution en
fonction de l ’argument n
ƒ base
ƒ function fact(n:integer) :integer; T(1) = a
ƒ begin ƒ récurrence
T(n) = b + T(n-1), pour n>1
ƒ if n<=1 then fact := 1
else fact := n* fact(n-1) ƒ On démontre par récurrence que
end; T(n) = a + (n-1) b pour n ≥ 1
ƒ Donc T(n) = Ο (n)

22
Un exemple: Recherche dichotomique

23
Un exemple: Recherche dichotomique

ƒ On cherche dans un tableau TRIE dans l’ordre


croissant L[1..n] l’indice d’un élement X
ƒ Version récursive: recherche entre les indices g et d
z Comparer X avec l’élément du milieu: L[m]
z Si X= L[m] , fin de le recherche
z Si X> L[m] , rechercher X entre les places m+1 et d
z Si X< L[m] , rechercher X entre g et m-1

24
Un exemple: Recherche dichotomique
Procedure dicho(X, L, g, d, resultat res: 0..n)
var m: 1..n
Début
Si g<= d alors
m := (g+d) div 2
Si X = L[m] alors res := m
sinon si X < L[m] alors dicho(X,L,g,m-1,res)
sinon dicho(X,L,m+1,d,res)
sinon res :=0
Fin

25
Un exemple: Recherche dichotomique

ƒ On étudie le cas le pire

ƒ Tmax(n) = O(log2n)

26