Analyse d’une fonction
!  Analyse détaillée d’un algorithme:
"  Avantage : Très précise
"  Désavantage : Long à calculer
Analyse asymptotique
et Calcul de coût
Solution
Algorithmique avancée
Hervé Blanchon
!  Analyse asymptotique du comportement de l’algorithme lorsque le(s)
paramètre(s) de l’algorithme tendent vers l’infini :
"  Avantage : Facile à calculer
"  Désavantage : Moins précis, mais donne une idée précise de la classe
de l’algorithme
IUT 2 – Département Informatique
Université Pierre Mendès France
Sources : Mario Marchand, Alexandre Meyer, Maxime Crochemore,
1
Éric Fimbel, Chrisitine Froidevaux & Al., Thomas Cormen & Al.
2
Rappel mathématique : limite d’une fonction à +∞"
Rappel mathématique : limite d’une fonction à +∞
!  On se contente ici d’une définition « intuitive » (on ne présente pas ici la
notion mathématique de limite)
!  Limite finie
"  Dire que la fonction f admet la limite finie l en +∞ revient à dire que
f(n) se rapproche de l à mesure que n grandit (ou « tend vers plus
l'infini »)
!  Dit simplement, on s’intéresse à la valeur l de de la fonction f(n) lorsque n
devient arbitrairement grand – soit lorsque n tend vers l’infini ; ce que l’on
note n→+∞.
!  Exemples
!  Cela se note :
$1'
lim & ) = 0
%n(
$ 3 + 6 n + 4 n2 ' $ 3 + 0 + 0'
$ 3n 2 + 6n + 4 '
lim &
=
lim
)=3
&
)=&
)
n →+∞%
n 2 + 3 ( n →+∞% 1+ 3 n 2 ( % 1+ 0 (
$ 3 n + 6 n2 + 4 n3 ' $0 + 0 + 0'
$ 3n 2 + 6n + 4 '
lim &
=
lim
)=0
&
)=&
)
n →+∞%
n 3 + 3 ( n →+∞%
1+ 3 n 3
( % 1+ 0 (
lim f (n) = l
n →+∞
n →+∞
qui se lit : l est la limite de f(n) lorsque n tend vers +∞
€
3
4
€
Rappel mathématique : limite d’une fonction à +∞
Notation-Ο (grand oh)
!  Limite infinie
"  L'idée intuitive d'une limite infinie est que pour n suffisamment grand,
f(n) peut devenir aussi grand que l'on veut
!  Détermine une borne supérieure
!  Définition formelle : f(n) = Ο(g(n)) s’il existe deux constantes positives n0 et
c telles que
"  f(n) ≤ cg(n) pour tout n>n0
!  En d’autres termes
"  cg(n) majore f(n)
!  Exemples
lim ( n ) = +∞
n →+∞
$ 3n + 6 + 4 n '
$ 3n 2 + 6n + 4 '
$ 3n + 6 + 0 '
lim &
= lim &
= lim &
) = +∞
)
)
n →+∞%
n+3
( n →+∞% 1+ 3 n ( n →+∞% 1+ 0 (
$ 3n + 6 n + 4 n 2 '
$ 3n 3 + 6n + 4 '
$ 3n + 0 + 0 '
lim &
=
lim
&
) = +∞
&
) = nlim
)
2
2
n →+∞%
n
→+∞
→+∞
% 1+ 0 (
n +3 (
1+ 3 n
%
(
5
€
6
Notation-Ο (Calcul analytique)
Notation-Ο (Analyse d’un algorithme)
!  Étant données deux fonctions f(n) et g(n), f(n) = Ο(g(n)) ssi:
!  On utilise la notation Ο pour décrire le pire des cas et on cherche une
fonction simple qui décrit le comportement de l’algorithme dans le pire cas.
"  Exemples : Ο(n), Ο(n2), Ο(log n)
"  ∃ c≥0,
∀∞
n, f(n) / g(n) ≤ c
$ f (n) '
+
lim &
)∈ℜ
n →+∞% g(n) (
!  L’analyse est simplifiée selon les règles suivantes :
"  Seul le monôme avec le degré le plus élevé est conservé
"  Les constantes multiplicatives sont éliminées
{ℜ + = [0,+∞[}
!  Exemple :
"  si dans le pire des cas f(n) = 3n2+5n+4
f(n) = Ο(n2)
"  en effet
!  Exemple
"  f(n) = 3n2+6n+4 et g(n) = n3+3
€
∴ donc
3n2+6n+4
limn→+∞ f(n) / g(n) = 0
est
Ο(n3+3)
$ 3n 2 + 5n + 4 '
$
5 4'
lim &
&3 + + 2 ) = 3 + 0 + 0 = 3
) = nlim
2
n →+∞
→+∞
%
n
n n (
%
(
!  On dit « f(g) est en grand oh de g(n) » (cg(n) majore f(n))
7
€
8
Notation-Ο (Analyse d’un algorithme)
Rappel mathématique : sommes
!  Exemples
"  3n2 − 100n + 6 = Ο(n2)
!  Sommes arithmétiques
n
n(n + 1)
∑i = 2
i=1
!  car 3n2 > 3n2 − 100n + 6
" 
3n2
− 100n + 6 =
Ο(n3)
!  0,01n3 > 3n2 − 100n + 6
sup
∑i =
i= inf
(sup − inf + 1)(sup + inf )
2
"  3n2 − 100n + 6 ≠ Ο(n)
!  c × n < 3n2 lorsque n > c
€
À vérifier vous-même en calculant la limite de la
division de f(n) par g(n) !
€
9
10
Rappel mathématique : sommes
Rappel mathématique : sommes
!  Sommes arithmétiques avec changement de variable
!  Sommes géométriques
n
n
n
n
∑ (i −1) =∑ i − ∑1
i= 2
i= 2
i= 2
ou avec changement de variable (i −1) → k
n
n
r n +1 −1
∑ r = r −1
i= 0
∑2
i
i
= 2 n +1 −1
i= 0
Démonstration :
n
n−1
(n −1−1+ 1)(n −1+ 1) (n −1)n
=
∑ (i −1) =∑ k =
2
2
i= 2
k=1
Eq1: Sn = ∑ r i =1+ r + r 2 + … + r n
i= 0
€
€
On multiplie les deux côtés de Eq1 par r :
2
n +1
Eq2 : rSn = r + r + … + r
On soustrait Eq1 de Eq2 :
Eq3 : (r −1)Sn = (r + r 2 + … + r n +1 ) − (1+ r + r 2 + … + r n )
Eq3': (r −1)Sn = r n +1 −1
€
Donc : Sn =
11
r n +1 −1
r −1
12
€
Notation-Ο (Analyse d’un algorithme)
Notation-Ω (grand oméga)"
Nombre exact d’exécutions
(pire des cas)
!  Détermine une borne inférieure
Analyse
asymptotique
!  Définition formelle : f(n) = Ω(g(n)) s’il existe deux constantes positives n0 et
c telles que
"  cg(n) < f(n) pour tout n>n0
InsertionSort( T[ 1.. N ] )
pour i
2àN
key
j
T[i]
€
i!1!
N
Ο(N)
N −1
Ο(N)
N −1
!  En d’autres termes
"  cg(n) minore f(n)
Ο(N)
N
tant que j > 0 et T[j]>key!
(N −1)(N + 2)
∑i =
2
i= 2
N
T[j+1]
T[j]!
∑ (i −1) =
€
i= 2
N
j
∑ (i −1) =
j!1!
€
T[j+1]
key !
i= 2
Ο(N2)
(N −1)N
2
Ο(N2)
(N −1)N
2
Ο(N2)
N −1
Ο(N)
€
T(N) = Ο(3N2+4N) = Ο(N2)
13
14
Notation-Ω (Calcul analytique)
Notation-Ω (Analyse d’un algorithme)
!  Étant données deux fonctions f(n) et g(n), f(n) = Ω(g(n)) ssi:
!  On utilise la notation Ω pour décrire le meilleur des cas et on cherche
une fonction simple qui décrit le comportement de l’algorithme dans le
meilleur des cas.
"  Exemples : Ω(n), Ω(n2), Ω(log n)
"  ∃ b≥0,
∀∞
n, f(n) / g(n) ≥ b
$ f (n) '
+
lim &
) ∈ ℜ ∪ {+∞}
n →+∞% g(n) (
!  L’analyse est simplifiée selon les règles suivantes:
"  Seul le monôme avec le degré le plus élevé est conservé
"  Les constantes multiplicatives sont éliminées
!  Exemple :
"  si dans le meilleur des cas f(n) = 3n2+5n+4
f(n) = Ω(n)
"  en effet
!  Exemple
"  f(n) = 3n2+6n+4 et g(n) = n+3
€
limn→+∞ f(n) / g(n) = +∞
∴ donc 3n2+6n+4 est Ω(n+3)
$ 3n 2 + 5n + 4 '
$
4'
lim &
& 3n + 5 + ) = lim (3n + 5 + 0) = +∞
) = nlim
n →+∞
→+∞
%
n
n ( n →+∞
%
(
!  On dit « f(g) est en grand oméga de g(n) » (bg(n) minore f(n))
15
€
16
Notation-Ω (Analyse d’un algorithme)
Notation-Ω (Analyse d’un algorithme)
!  Exemples
"  3n2 − 100n + 6 = Ω(n2)
Nombre exact d’exécutions
(meilleur des cas)
!  car 2,99n2 < 3n2 − 100n + 6
Analyse
asymptotique
InsertionSort( T[ 1.. N ] )
"  3n2 − 100n + 6 ≠ Ω(n3)
pour i
!  n3 > 3n2 − 100n + 6
2àN
N
Ω(N)
T[i]
N −1
Ω(N)
N −1
Ω(N)
key
"  3n2 − 100n + 6 = Ω(n)
10
!  1010 n < 3n2 − 100n + 6
j
i!1!
N
tant que j > 0 et T[j]>key!
À vérifier vous-même en calculant la limite de la
division de f(n) par g(n) !
T[j+1]
j
T[j+1]
T[j]!
∑1 = N −1
Ω(N)
i= 2
0
Ω(1)
0
Ω(1)
N −1
Ω(N)
€
j!1!
key !
T(N) = Ω(5N+2) = Ω(N)
17
18
Notation-Θ (grand théta)"
Notation-Θ (Calcul analytique)
!  Relation d’équivalence
!  Étant données deux fonctions f(n) et g(n), f(n) = Θ(g(n)) ssi:
"  ∃ a,b≥0, ∀∞ n, a ≤ f(n) / g(n) ≤ b
!  Définition formelle : f(n) = Θ(g(n)) s’il existe trois constantes positives n0,c1
et c2 telles que
"  c1g(n) ≤ f(n) ≤ c2g(n) pour tout n>n0
$ f (n) '
∗+
lim &
)∈ℜ
n →+∞% g(n) (
!  En d’autres termes
"  c1g(n) majore f(n)
et
"  c2g(n) minore f(n)
{ℜ∗+ = ]0,+∞[}
!  Exemple
"  f(n) = 3n2+6n+4 et g(n) = n2+3
€
∴ donc
3n2+6n+4
limn→+∞ f(n) / g(n) = 3
est
Θ(n3+3)
!  On dit « f(g) est en grand thêta de g(n) » (g(n) majore et minore f(n))
!  f(n) = Θ(g(n)) ssi f(n) = Ο(g(n)) et f(n) = Ω(g(n))
19
20
Notation-Θ (Analyse d’un algorithme)
Notation-Θ (Analyse d’un algorithme)
!  Exemples
"  3n2 − 100n + 6 = Θ(n2)
!  Encadrement de 106x2−1000x+122396
"  106x2 (majorant – Ο) et 100x2 (minorant – Ω)
!  car Ο et Ω
"  3n2 − 100n + 6 ≠ Θ(n3)
!  car Ο seulement
"  3n2 − 100n + 6 ≠ Θ(n)
!  car Ω seulement
À vérifier vous-même en calculant la limite de la
division de f(n) par g(n) !
21
Notation-Θ (Analyse d’un algorithme)"
Analyse pire des cas
SelectionSort( T[ 1.. N ] )
pour i
1 à N-1!
min
T[i]
indexMin
pour j
i!
Exacte
Ο(N)
N −1
Ο(N)
(N + 1)(N − 2)
∑ (N − i + 1) =
2
i= 2
i+1 à N!
N −1
si T[j] < min!
∑N − i =
i= 2
€
min
∑N − i =
T[j]!
i= 2
€
indexMin
T[indexMin]
T[i]
min!
N −1
j!
€
T[i]!
€
(N −1)(N − 2)
2
(N −1)(N − 2)
2
N −1
N −1
Exacte
Ο(N2)
€
Ω(N)
N −1
Ω(N)
N −1
Ω(N)
N −1
(N + 1)(N − 2)
∑ (N − i + 1) =
2
i= 2
N −1
Ο(N2)
Ο(N2)
Asympt.
N
€
€
∑N − i =
i= 2
(N −1)(N − 2)
2
!  Le temps total d’exécution C(n) sera alors donné par:
"  C(n) = C1(n)+C2(n) = Ο(max{g1(n), g2(n)})
Ω(N2)
Ω(N2)
€
0
Ω(1)
Ο(N2) €
0
Ω(1)
Ο(N)
N −1
Ω(N)
N −1
Ω(N)
!  C(n) est donc déterminé par la partie de l’algorithme ayant l’ordre de
croissance le plus élevé
€
N −1
(N −1)(N − 2)
∑N − i =
2
i= 2
!  Supposons qu’un algorithme possède deux parties exécutées
consécutivement (l’une après l’autre)
"  La première partie prend un temps C1(n) = Ο(g1(n))
"  La deuxième partie prend un temps C2(n) = Ο(g2(n))
Analyse meilleur des cas
Ο(N)
N −1
N −1
Règle du maximum
Asympt.
N
Ο(N)
T(N) = O(N2) et T(N) = Ω(Ν2) ⇒
22
€
Τ(N) = Θ(N2)"
23
24
Règle du maximum – valeurs identiques dans un tableau
Règle du maximum – insertion dans un vecteur trié
!  On veut déterminer si un tableau V de n éléments possède des éléments
identiques
!  InsertTrié(V[0..n-1], val)!
"posit:=Position(V[0..n-1], val);!
"InsertPlace(V[0..n-1], val, posit);!
"  ValsIdentiques(V[0..n-1])!
"
"Tri(V[0..n-1]);!
"
"RechSuccId(V[0..n-1]);
!  Coût de Position en nombre de comparaisons dans le pire des cas
"  recherche séquentielle Ο(n)
"  recherche dichotomique Ο(log2n)
!  Coût de Tri dans le pire des cas
"  C1(n) = Ο(n2)
!  Coût de InsertPlace en nombre d’affectation dans le pire des cas
"  insertion à la première place, il faut décaler tous les éléments
!  Coût de RechSuccId (recherche séquentielle pour déterminer s’il existe i tel
que V[i]=V[i+1]) dans le pire des cas
"  C2(n) = Ο(n)
"pour i
n à 1!
"V[i]
V[i-1];!
"  Ο(n)
!  Coût de ValsIdentiques
!  Coût de InsertTrié!
"  ValsIdentiques(n) = Tri(n) + Recherche(n) = Ο(max{n2,n})
" 
"  InsertTrié(n) = Position(n) + InsertPlace(n) = Ο(max{log2n,n})"
Ο(n2)
"  Ο(n)
25
26
Bilan
Exercices
!  Pour comparer la croissance de deux fonctions f(n) et g(n), il est
généralement plus pratique d’utiliser le théorème suivant (que d’utiliser les
définitions de Ω, Ο ou Θ):
!  Exercices de calcul asymptotique
$= c (fini) alors f (n) = Θ(g(n))
f (n) &
si lim
alors f (n) = Ο(g(n)) et f (n) ≠ Θ(g(n))
%= 0
n →+∞ g(n)
& = +∞
alors f (n) = Ω(g(n)) et f (n) ≠ Θ(g(n))
'
€
!  Lorsque f(n) = Θ(g(n)) nous disons que f(n) et g(n) ont le même ordre de
croissance.
!  Lorsque f(n) = Ο(g(n)) et f(n) ≠ Θ(g(n)) nous disons que l’ordre de
croissance de f(n) est strictement plus petit que celui de g(n)
!  Lorsque f(n) = Ω(g(n)) et f(n) ≠ Θ(g(n)) nous disons que l’ordre de
croissance de f(n) est strictement plus grand que celui de g(n)
27
28
Baromètres (ou instructions utiles)
Baromètres — Sélection des instructions
!  Qu’est-ce qu’un baromètre ?
"  C’est une instruction qui s’exécute au moins autant de fois que chacune
des autres.
!  Mettre dans B les instructions suivantes :
"  itérations : tant que, pour
"  conditionnelles : si
"  une instruction au moins dans chaque bloc.
!  Comment ça fonctionne ?
"  On sélectionne un ensemble d’instructions significatives B={b1…bk}
"  On détermine le nombre d’exécution de chacun des baromètres de B
"  Temps total est la somme du nombre d’exécutions de chaque baromètre
!  bloc = ensemble d’instructions de même indentation qui s’exécutent le
même nombre de fois.
!  Comment choisir l’ensemble B ?
"  Mettre systématiquement certains types d’instructions (boucles,
conditions, etc.)
"  Estimer leur nombre d’exécution maximal et minimal selon que l’on
calcule le meilleur ou le pire cas
"  Simplifier B en gardant seulement l’instruction qui s’exécute le plus
souvent
29
Baromètres — Estimer le nombre d’exécutions
30
Baromètres — Exemple
a)  Itération : chaque fois qu’on passe dessus, le test est évalué le nombre de
fois que la condition est vraie + 1 fois (quand la condition est fausse).
b)  Bloc interne d’une itération : on passe sur ses instructions autant de fois
que la condition est vraie.
Analyse asymptotique
(Ω meilleur des cas)
Analyse asymptotique
(Ο pire des cas)
Ω(N)
Ο(N)
Ω(N)
Ο(N2)
Ω(1)
Ο(N2)
InsertionSort( T[ 1.. N ] )
pour i
c)  Bloc interne d’un si : chaque fois qu’on passe sur le si et que la condition
est vraie, on passe sur ses instructions
2àN
key
j
d)  Autres instructions: chaque fois qu’on passe dessus, elles s’exécutent une
fois.
T[i]
i!1!
tant que j > 0 et T[j]>key!
T[j+1]
j
T[j+1]
T[j]!
j!1!
key !
T(N) = Ω(N) et T(N) = Ο(N2)
31
32
Baromètres — Exemple"
Analyse algorithmique
Analyse asymptotique
(Ω meilleur des cas)
Analyse asymptotique
(Ο pire des cas)
Trois algorithmes de tri
SelectionSort( T[ 1.. N ] )
pour i
1 à N-1!
min
Ω(N)
T[i]
indexMin
pour j
i!
i+1 à N!
si T[j] < min!
min
T[j]!
indexMin
T[indexMin]
T[i]
Ο(N)
Ω(N2)
Ο(N2)
Ω(N2)
Ο(N2)
Ω(1)
Ο(N2)
Meilleur cas
Pire cas
Tri à bulle
Ω(N2)
Ο(N2)
Tri par sélection
Ω(N2)
Ο(N2)
Tri par insertion
Ω(N)
Ο(N2)
!  Dans le pire cas et avec le même nombre de données à trier, est-ce que le
temps d’exécution sera identique ?
j!
T[i]!
min!
T(N) = Ο(N2) et T(N) = Ω(N2) ⇒ T(N) = Θ(N2)
33
Exercices
!  Analyse asymptotique des algorithmes
suite !"
35
34