La notation asymptotique
Fran¸cois Lemieux
Hiver 2007
Nous avons vu que le temps d’ex´ecution d’un algorithme Apouvait ˆetre
exprim´e comme une fonction T:N→R+telle que T(n) repr´esente le temps
maximal que prend Asur une entr´ee de longueur n. Si nous voulons pou-
voir comparer les temps d’ex´ecution de plusieurs algorithmes, il est d’abord
n´ecessaire de savoir comparer les fonctions entre elles. Afin d’atteindre cet
objectif, nous allons d´efinir une notation qui sera d’une tr`es grande utilis´e
par la suite.
1 La notation “grand O”
La notation grand Osert `a exprimer le fait que l’ordre de grandeur d’une
fonction est inf´erieur ou ´egal `a une autre.
D´efinition 1 Soit f:N→R+une fonction positive. On d´efini l’ordre de
f(n)comme l’ensemble:
O(f) = {g:N→R+|(∃c > 0)(∃n0≥0)(∀n≥n0)[g(n)≤cf(n)]}
Pour montrer qu’une fonction f(n) est dans l’ordre d’une autre fonction
g(n), on doit donc trouver deux constantes cet n0telles que f(n)≤cg(n)
est vrai sauf, possiblement, pour des petites valeurs inf´erieures `a n0.
Exemple. Pour montrer que n2∈O(5n2+ 3n+ 4) on doit trouver deux
constantes c > 0 et n0≥0 tels que n2≤5n2+ 3n+ 4. Pour ce faire, on
1
observe que puisque 3n+ 4 >0 alors n2≤5n2+ 3n+ 4 quelque soit la valeur
de n≥0. Il suffit donc de prendre n0= 0 et c= 1.
Exemple. Montrons qu’on a aussi 5n2+ 3n+ 4 ∈O(n2). On a
5n2+ 3n+ 4 ≤5n2+ 3n2+ 4n2= 12n2
L’in´egalit´e se v´erifiant pour tout n≥1. Donc, si on pose c= 12 et n0= 1
on obtient
(∀n≥n0)[5n2+ 3n+ 4 ≤cn2]
Ce qui prouve que 5n2+ 3n+ 4 ∈O(n2).
Les deux exemples pr´ec´edent peuvent facilement ˆetre g´en´eralis´es:
Lemme 1 Soit p(n)un polynˆome de degr´e d≥0. Alors p(n)∈O(nd)et
nd∈O(p(n)).
Preuve. Montrons d’abord que p(n)∈O(nd). On a p(n) = Pd
i=0 ainio`u
a0, a1,...adsont des constantes. On peut donc ´ecrire:
p(n) =
d
X
i=0
aini≤
d
X
i=0 |ai|ni≤
d
X
i=0 |ai|nd
La derni`ere in´egalit´e ´etant vrai pour tous les entiers n≥1. Si on pose
c=Pd
i=0 |ai|et n0= 1 on obtient que p(n)≤cndpour tout n≥n0. Cela
d´emontre que:
(∃c > 0)(∃n0≥0)(∀n≥n0)[p(n)≤cnd]
et qu’ainsi p(n)∈O(nd).
Il reste `a montrer que nd∈O(p(n)). Nous devons trouver deux constantes
c > 0 et n0≥0 telles que pour tout n≥n0l’in´egalit´e nd≤cp(n) est v´erifi´ee.
En fait, il est plus simple de montrer que p(n)≥nd/c. On a:
p(n) =
d
X
i=0
aini=adnd+
d−1
X
i=0
aini≥adnd−
d−1
X
i=0 |ai|ni≥adnd−nd−1
d−1
X
i=0 |ai|
2
La derni`ere in´egalit´e est vrai pour tout n≥1. Finalement, pour tout n≥
max {1,2
adPd−1
i=0 |ai|}, on a aussi:
adnd−nd−1
d−1
X
i=0 |ai| ≥ adnd−ad
2nd=ad
2nd
En prenant c=2
adet n0= max {1,2
adPd−1
i=0 |ai|} on obtient:
(∀n≥n0)[nd≤c·p(n)]
Ce qui d´emontre que nd∈O(p(n)).
Le lemme suivant est tr`es utile et nous permettra, entre autres, de d´emontrer
que si p(n) et q(n) sont deux polynˆomes de mˆeme degr´e alors O(p(n)) =
O(q(n)). Pour cette raison on ne fera aucune diff´erence entre deux polynˆomes
de mˆeme degr´e. Plus g´en´eralement, si f, g :N→R+sont deux fonctions telles
que O(f) = O(g) alors on ne fera aucune distinction entre fet g.
Lemme 2 Soit f, g, h :N→R+trois fonctions positives. Si f∈O(g)et
g∈O(h)alors f∈O(h).
Preuve. Puisque f∈O(g) et g∈O(h) alors on a:
1. (∃c1>0)(∃n1≥0)(∀n≥n1)[f(n)≤c1g(n)]
2. (∃c2>0)(∃n2≥0)(∀n≥n2)[g(n)≤c2h(n)]
Puisque le premier ´enonc´e est vrai pour tout n≥n1et que le second est
vrai pour tout n≥n2alors les deux ´enonc´es sont vrais pour tout n≥
max{n1, n2}. On obtient donc que pour tout n≥max{n1, n2}:
f(n)≤c1g(n)≤c1c2h(n)
Si on pose n0= max{n1, n2}et c=c1c2, on obtient:
(∃c > 0)(∃n0≥0)(∀n≥n0)[f(n)≤ch(n)]
On conclu que f(n)∈O(h(n)).
3
Corollaire 1 Soit f, g :N→R+. Si f∈O(g)alors O(f)⊆O(g).
Preuve. Supposons que f∈O(g). Pour montrer que O(f)⊆O(g) il faut
montrer que pour tout h∈O(f) on a h∈O(g), ce qui est vrai par le Lemme
2.
Exemple. Poursuivant avec l’exemple pr´ec´edent, le lemme 1 nous indique
que 5n2−3n−4∈O(n2) et n2∈O(5n2−3n−4). Utilisant le corollaire 1
nous concluons que O(5n2−3n−4) = O(n2).
Proposition 2 Soit p(n)et q(n)deux polynˆomes de degr´e d≥0. Alors
O(p(n)) = O(q(n)).
Preuve. Par le lemme 1 nous savons que p(n)∈O(nd) et que nd∈O(q(n)).
Par le lemme 2, on a p(n)∈O(q(n)). Finalement, par le corollaire 1, on a
O(p(n)) ⊆O(q(n)). Similairement, on d´emontre que O(q(n)) ⊆O(p(n)) ce
qui prouve la proposition.
Tout comme on ne fera aucune diff´erence entre deux polynˆomes de mˆeme
degr´e, on ne fera aucune distinction entre deux fonctions logarithmiques util-
isant des bases diff´erentes.
Proposition 3 Pour toutes valeurs a, b > 0on a O(logan) = O(logbn).
Preuve. Nous devons montrer que:
1. O(logan)⊆O(logbn)
2. O(logbn)⊆O(logan)
Seule la d´emonstration de la premi`ere inclusion est n´ecessaire: la preuve de
la seconde ´etant identique. En fait, par le corollaire 1, il suffit de montrer
que logan∈O(logbn). On sait que:
logan=logbn
logba
Donc, en choisissant c=1
logbaet n0= 1 on a:
(∀n≥n0)[logan≤clogbn]
4
Ainsi, on a bien logan∈O(logbn).
Remarque: Il faut faire attention de ne pas tirer de fausses conclusions de
la proposition pr´ec´edentente. Par exemple si a<bon a 2logbn⊆O(2logan)
mais O(2logan)6=O(2logbn).
2 Analyse asymptotique
Exemple. Consid´erez le segment de code C suivant:
x=0;
for (i=1; i<=n; i++)
x++;
for (j=1; j<=n; j=j*2)
x++;
Le tableau suivant analyse le temps d’ex´ecution de chacune de ces cinq
lignes de code.
ligne temps/ex´ecution nb ex´ecutions ordre
1c11O(1)
2c2n+ 1 O(n)
3c3n O(n)
4c4blg nc+ 1 O(lg n)
5c5blg ncO(lg n)
On suppose qu’une seule ex´ecution de la ligne in´ecessite un temps con-
stant inconnu que nous d´enotons ci(i= 1,2,3,4,5). Le nombre de fois que
chacune des lignes est ex´ecut´ee est indiqu´e dans la troisi`eme colonne. La
derni`ere colonne donne l’ordre du temps total d’ex´ecution pour chacune des
lignes. Le temps total d’ex´ecution du segment est:
T(n) = c1+c2(n+ 1) + c3n+c4(blg nc+ 1) + c5blg nc
= (c1+c2+c4)+(c2+c3)n+ (c4+c5)blg nc
=d1+d2n+d3blg nc
∈O(n)
5
1 / 12 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!