V. ÉCHELLE DE COMPLEXITÉ
V Échelle de complexité
Les algorithmes se regroupent en plusieurs familles, dont nous donnons ici les principales (liste non-exhaustive).
— le temps constant, noté O(1): quelque soit l’argument en entrée, le nombre d’opérations est constant.
C’est le cas de l’échange de deux variables par exemple ;
— le temps sous-linéaire, noté O(log(n)) : le nombre d’opérations présente une dépendance logarithmique
par rapport à la taille de l’argument. C’est le cas de la recherche dichotomique ;
— le temps linéaire, noté O(n): le nombre d’opérations est proportionnel à la taille de l’argument. C’est le
cas de la recherche du minimum ou du maximum dans un tableau ;
— le temps quasi-linéaire, noté O(nlog(n)) : le log qui apparaît est en base quelconque puisque le résultat
diffère d’une constante multiplicative près. C’est le cas du crible d’Ératosthène ;
— le temps quadratique, noté O(n2): le nombre d’opérations possède une dépendance quadratique par
rapport à la taille de l’argument. C’est le cas des algorithmes de tri simples ;
— le temps polynomial, noté O(nk): le nombre d’opérations possède une dépendance polynomiale par
rapport à la taille de l’argument. Par exemple la multiplication matricielle requiert de l’ordre de n3
opérations ;
— le temps exponentiel, noté 0(cn)où cest une constante : la dépendance par rapport à la taille de
l’argument est exponentielle. Ces algorithmes sont très rapidement inutilisables.
Le tableau suivant donne une équivalence en temps, approximative car cela dépend évidemment de la machine.
n5 10 20 50 250 1 000 10 000 1 000 000
110 ns 10 ns 10 ns 10 ns 10 ns 10 ns 10 ns 10 ns
log(n)10 ns 10 ns 10 ns 20 ns 30 ns 30 ns 40 ns 60 ns
O(n)50 ns 100 ns 200 ns 500 ns 2.5 µs 10 µs 100 µs 10 ms
n log(n)50 ns 100 ns 200 ns 501 ns 2.5 µs 10 µs 100,5 µs 10 050 µs
n2250 ns 1µs 4µs 25 µs 625 µs 10 ms 1s2.8 heures
n31.25 µs 10 µs 80 ms 1.25 ms 156 ms 10 s2.7 heures 316 ans
2n320 ns 10 µs 10 ms 130 jours 1059 ans ... ... ...
n!1.2 µs 36 ms 770 ans 1048 ans ... ... ... ...
Table 1 – Ordre de grandeur du temps nécessaire à l’exécution d’un algorithme d’un type de complexité
(source : Wikipedia)
13 – Les algorithmes en temps polynomial énoncés précédemment ont tous été déjà vu. Pour chacun d’entre
eux, étudier sa complexité.
14 – Expliquer pourquoi la complexité de la recherche dichotomique est en O(log(n)).
15 – Le crible d’Ératosthène consiste à écrire les nombres entiers de 2 à n. On prend ensuite le premier nombre
non barré (au début il s’agit de 2) puis on barre tous les nombres multiples de celui-ci. On prend alors le nombre
non barré suivant et on recommence. À la fin, seuls les nombres premiers entre 2et nrestent non barrés. Écrire
un algorithme mettant en place le crible d’Ératosthène, prenant en argument un nombre entier net renvoyant
la liste des entiers premiers inférieurs à n. Donner le nombre d’opérations effectuées et évaluer sa complexité.
On notera Hn=Pn
k=1
1
kon on se rappellera que Hn∼ln(n).
On parle aussi de complexité en mémoire : il s’agit d’évaluer (toujours en ordre de grandeur), la
place occupée en mémoire par l’exécution de l’algorithme.
4 Le Bras - Lycée Montesquieu - MPSi - 2013/2014