chap10-good
chap10-good
chap10-good
Remarque 10.1 Même si nous évoquons les complexités en moyenne dans ce chapitre,
nous n’en aurons pas besoin à aucun moment dans les chapitres qui suivent : nous
le faisons surtout pour expliquer pourquoi elles sont peu utilisées pour ces types de
problèmes.
1
2 CHAPITRE 10. BASES DE L’ANALYSE DE COMPLEXITÉ D’ALGORITHMES
Exemple 10.1 Le problème P peut par exemple être celui de déterminer si un nombre
v est parmi une liste de n nombres.
Il est clair que l’on peut bien construire un algorithme A pour résoudre ce pro-
blème : par exemple,
– on utilise une variable res que l’on met à 0 ;
– on parcourt la liste, et pour chaque élément :
– on regarde si cet élément est le nombre v :
– si c’est le cas, alors on met la variable res à 1
– à l’issue de cette boucle, on retourne res.
Cet algorithme n’est pas le plus efficace que l’on puisse envisager. D’une part, on
pourrait s’arrêter dès que l’on a mis res à 1, puisqu’on connaît la réponse. D’autre
part, on peut clairement faire tout autrement, et utiliser par exemple une recherche par
dichotomie (un algorithme récursif), si l’on sait que la liste est triée.
Pour passer d’une fonction des données vers les entiers, à une fonction des entiers
(les tailles) vers les entiers, on considère alors la complexité au pire cas : la complexité
µ(A, n) de l’algorithme A sur les entrées de taille n est définie par
Autrement dit, la complexité µ(A, n) est la complexité la pire sur les données de
taille n.
Par défaut, lorsqu’on parle de complexité d’algorithme en informatique, il s’agit de
complexité au pire cas, comme ci-dessus.
Si l’on ne sait pas plus sur les données, on ne peut guère faire plus que d’avoir cette
vision pessimiste des choses : cela revient à évaluer la complexité dans le pire des cas
(le meilleur des cas n’a pas souvent un sens profond, et dans ce contexte le pessimisme
est de loin plus significatif).
où π(d) désigne la probabilité d’avoir la donnée d parmi toutes les données de taille n.
En pratique, le pire cas est rarement atteint et l’analyse en moyenne peut sembler
plus séduisante.
Mais, d’une part, il est important de comprendre que l’on ne peut pas parler de
moyenne sans loi de probabilité (sans distribution) sur les entrées. Cela implique que
l’on connaisse d’autre part la distribution des données en entrée, ce qui est très sou-
vent délicat à estimer en pratique. Comment anticiper par exemple les listes qui seront
données à un algorithme de tri par exemple ?
On fait parfois l’hypothèse que les données sont équiprobables (lorsque cela a un
sens, comme lorsqu’on trie n nombres entre 1 et n et où l’on peut supposer que les
permutations en entrée sont équiprobables), mais cela est est parfois arbitraire, et pas
totalement justifiable.
Et enfin, comme nous allons le voir sur quelques exemples, les calculs de com-
plexité en moyenne sont plus délicats à mettre en œuvre.
4 CHAPITRE 10. BASES DE L’ANALYSE DE COMPLEXITÉ D’ALGORITHMES
Autrement dit, on ne fait plus seulement varier les entrées de taille n, mais aussi
l’algorithme. On considère le meilleur algorithme qui résout le problème. Le meilleur
étant celui avec la meilleure complexité au sens de la définition précédente, et donc au
pire cas. C’est donc la complexité du meilleur algorithme au pire cas.
L’intérêt de cette définition est le suivant : si un algorithme A possède la complexité
µ(P, n), c’est-à-dire est tel que µ(A, n) = µ(P, n) pour tout n, alors cet algorithme
est clairement optimal. Tout autre algorithme est moins performant, par définition. Cela
permet donc de prouver qu’un algorithme est optimal.
L i s t ( i n t val , L i s t next ) {
this . val = val ; this . next = next ;
}
}
Or
n
X 1 + xn (nx − n − 1)
∀x, ixi−1 =
i=1
(1 − x)2
Pn n+1
(il suffit pour établir ce résultat de dériver i=1 xi = 1−x 1−x ) et donc
n
(k − 1)n (k − 1)n
n 1
C=n + k 1 − (1 + ) = k 1 − 1 −
kn kn k k
10.4 Asymptotiques
10.4.1 Complexités asymptotiques
On le voit sur l’exemple précédent, réaliser une étude précise et complète de com-
plexité est souvent fastidieux, et parfois difficile. Aussi, on s’intéresse en informatique
plutôt à l’ordre de grandeur (l’asymptotique) des complexités quand la taille n des
entrées devient très grande.
f (n) ≤ cg(n).
Exercice 10.4. Supposons que l’on a des algorithmes avec les temps listés plus bas
(en supposant que ce sont des temps exacts). De combien est ralentit ces algorithmes
lorque l’on (a) double la taille de l’entrée, (b) augmente la taille de l’entrée de 1.
1. n2
2. n3
3. 100n2
4. n log n
5. 2n
Bibliographie Le texte de ce chapitre est repris du texte que nous avions écrit dans le
polycopié INF421. Il est inspiré de l’introduction de l’ouvrage [Kleinberg and Tardos, 2005].
L’analyse du problème du calcul du maximum, et de ses variations est basée sur [Froidevaux et al., 1993].
Index
9
10 INDEX
langage
accepté par une machine de Turing
notation, voir L(M )
longueur d’un mot
notation, voir |w|
mémoire, 1
mesure élémentaire, 2
notation, voir µ(A, d)
mot
vide
notation, voir
Bibliographie
[Froidevaux et al., 1993] Froidevaux, C., Gaudel, M., and Soria, M. (1993). Types de
donnees et algorithmes. Ediscience International.
[Kleinberg and Tardos, 2005] Kleinberg, J. and Tardos, E. (2005). Algorithm design.
Addison-Wesley Longman Publishing Co., Inc. Boston, MA, USA.
[Sedgewick and Flajolet, 1996] Sedgewick, R. and Flajolet, P. (1996). Introduction à
l’analyse d’algorithmes. International Thomson Publishing, FRANCE.
11