MPSI2 Complexit´e d’un algorithme Informatique
2.4 Diff´erentes nuances de complexit´e
•Pour deux donn´ees de mˆeme taille un algorithme n’effectue pas n´ecessairement le mˆeme nombre d’op´erations ´el´ementaires.
Consid´erons le test de primalit´e suivant :
premier = True
for iin range (2 , i n t ( s q r t ( n ) ) + 1 ) :
i f n % i == 0 :
premier = F a ls e
break #permet d ’ i n te r ro mpr e l a b o u c l e
•Si nest un nombre premier sup´erieur `a 3, il faudra effectuer E(√n)−1 divisions euclidiennes. Si on lance le programme
avec n+ 1, il va s’arrˆeter d`es la premi`ere it´eration puisque n+ 1 est divisible par 2. Ainsi pour des donn´ees de taille similaire
le nombre d’op´erations effectu´ees par l’algorithme est tr`es diff´erent.
•Le plus souvent, on cherche un majorant du temps d’ex´ecution, c’est donc la complexit´e dans le pire des cas qui
nous int´eresse. La complexit´e dans le meilleur des cas est anecdotique mais elle peut donner un minorant du temps
d’ex´ecution d’un algorithme.
Remarque : Il est possible de formaliser ces notions. On note Dl’ensemble des donn´ees sur lesquelles op`ere un algorithme.
Pour n∈N, on note Dnl’ensemble des donn´ees de taille n. On note c(d)le nombre d’op´erations ´el´ementaires effectu´ees par
l’algorithme lorsqu’il est appel´e avec la donn´ee d.
La complexit´e dans le pire des cas est max{c(d), d ∈ Dn}.
La complexit´e dans le meilleur des cas est min{c(d), d ∈ Dn}.
La complexit´e en moyenne est : X
d∈Dn
Pn(d)c(d)o`u Pn(d)d´esigne la probabilit´e que dsoit envoy´e comme param`etre. Si
les appels sont ´equiprobables, on a : Pn(d) = 1
Card(Dn).
2.5 Quelques complexit´es
Afin d’avoir quelques points de rep`ere, voici quelques complexit´es usuelles.
•Les meilleurs tests de primalit´e d´eterministes ont une complexit´e en O(log(n)6) o`u nd´esigne l’entier dont on veut tester
la primalit´e.
•La multiplication de deux matrices carr´ees de taille navec la m´ethode na¨ıve a une complexit´e en O(n3) (si l’on compte
les multiplications). L’algorithme de Coppersmith-Winograd permet de multiplier deux matrices en O(n2,376).
•Il existe des algorithmes permettant de trier une liste d’entiers `a n´el´ements en O(nln(n)), comme l’algorithme du tri
fusion. On sait d´emontrer que cette complexit´e est la meilleure possible.
3 Exemples de calculs de complexit´e
•Dans ce paragraphe nd´esigne la taille de l’argument en entr´ee de l’algorithme et C(n) d´esigne le nombre d’op´erations
´el´ementaires effectu´ees.
3.1 Complexit´e lin´eaire
On consid`ere le programme suivant :
def f a c t o r i e l l e (n ) :
P = 1
for iin r an ge ( 2 , n + 1 ) :
P=P ∗i
return(P)
•On s’int´eresse au nombre de multiplications en fonction de la donn´ee n. On a clairement C(n) = n−1. Ainsi C(n) = O(n),
on dit que la complexit´e est lin´eaire.
4 Chapitre 6