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:NR+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:NR+une fonction positive. On d´efini l’ordre de
f(n)comme l’ensemble:
O(f) = {g:NR+|(c > 0)(n00)(nn0)[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 n2O(5n2+ 3n+ 4) on doit trouver deux
constantes c > 0 et n00 tels que n25n2+ 3n+ 4. Pour ce faire, on
1
observe que puisque 3n+ 4 >0 alors n25n2+ 3n+ 4 quelque soit la valeur
de n0. 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 n1. Donc, si on pose c= 12 et n0= 1
on obtient
(nn0)[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 d0. Alors p(n)O(nd)et
ndO(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 n1. Si on pose
c=Pd
i=0 |ai|et n0= 1 on obtient que p(n)cndpour tout nn0. Cela
d´emontre que:
(c > 0)(n00)(nn0)[p(n)cnd]
et qu’ainsi p(n)O(nd).
Il reste `a montrer que ndO(p(n)). Nous devons trouver deux constantes
c > 0 et n00 telles que pour tout nn0l’in´egalit´e ndcp(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+
d1
X
i=0
ainiadnd
d1
X
i=0 |ai|niadndnd1
d1
X
i=0 |ai|
2
La derni`ere in´egalit´e est vrai pour tout n1. Finalement, pour tout n
max {1,2
adPd1
i=0 |ai|}, on a aussi:
adndnd1
d1
X
i=0 |ai| ≥ adndad
2nd=ad
2nd
En prenant c=2
adet n0= max {1,2
adPd1
i=0 |ai|} on obtient:
(nn0)[ndc·p(n)]
Ce qui d´emontre que ndO(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 :NR+sont deux fonctions telles
que O(f) = O(g) alors on ne fera aucune distinction entre fet g.
Lemme 2 Soit f, g, h :NR+trois fonctions positives. Si fO(g)et
gO(h)alors fO(h).
Preuve. Puisque fO(g) et gO(h) alors on a:
1. (c1>0)(n10)(nn1)[f(n)c1g(n)]
2. (c2>0)(n20)(nn2)[g(n)c2h(n)]
Puisque le premier ´enonc´e est vrai pour tout nn1et que le second est
vrai pour tout nn2alors les deux ´enonc´es sont vrais pour tout n
max{n1, n2}. On obtient donc que pour tout nmax{n1, n2}:
f(n)c1g(n)c1c2h(n)
Si on pose n0= max{n1, n2}et c=c1c2, on obtient:
(c > 0)(n00)(nn0)[f(n)ch(n)]
On conclu que f(n)O(h(n)).
3
Corollaire 1 Soit f, g :NR+. Si fO(g)alors O(f)O(g).
Preuve. Supposons que fO(g). Pour montrer que O(f)O(g) il faut
montrer que pour tout hO(f) on a hO(g), ce qui est vrai par le Lemme
2.
Exemple. Poursuivant avec l’exemple pr´ec´edent, le lemme 1 nous indique
que 5n23n4O(n2) et n2O(5n23n4). Utilisant le corollaire 1
nous concluons que O(5n23n4) = O(n2).
Proposition 2 Soit p(n)et q(n)deux polynˆomes de degr´e d0. Alors
O(p(n)) = O(q(n)).
Preuve. Par le lemme 1 nous savons que p(n)O(nd) et que ndO(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 loganO(logbn). On sait que:
logan=logbn
logba
Donc, en choisissant c=1
logbaet n0= 1 on a:
(nn0)[loganclogbn]
4
Ainsi, on a bien loganO(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 2logbnO(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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !