Sie sind auf Seite 1von 4

Algorithmes et complexité Complexité

Combien de temps mon algorithme mettra-t-il pour résoudre un problème donné ? Pour résoudre une instance de taille n fixée.
Combien d’espace mémoire faut-il prévoir ? Complexité d’un algorithme en temps
= nombre d’instructions exécutées (ordre de grandeur)

Problème et instance = fonction de n

Problème général : tester si un nombre est premier en supposant que les instructions prennent un temps constant

Problème particulier (instance) : tester si 494059397730 est premier


Complexité en espace

Une instance est caractérisée par sa taille = nombre de cellules mémoire utilisées (ordre de grandeur)

Il y a différentes manières de définir la taille = fonction de n

p.ex. taille(494059397730) = 494059397730 (linéaire)


ou taille(494059397730) = 12 chiffres (logarithmique)

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


1 de 14 2 de 14

Exemple: résolution d’une équation Exemple pn


Trouver x tels que ax + b = 0 (a différent de 0)
Avec a et b inférieurs à MAX
{
1. r ← 1;
x←–b/a
2. s ← 0;
}
3. tant que (s ≠ n) { // nombre d’itérations = n
4. r ← r * p;
Nombre d’opérations arithmétiques effectuées : 2
5. s ← s + 1;
Complexité en temps : constante }

T(n) = k

Temps effectif : dépend de la machine

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


3 de 14 4 de 14
Nombre d’opérations exécutées Exemple pn bien amélioré
1. r ← 1; 1 fois Observation :
2. s ← 0; 1 fois
3. tant que (s ≠ n) { n + 1 fois p2n = (pn)2
4. r ← r * p; n fois
p2n+1 = (pn)2 . p1
5. s ← s + 1; n fois

en tout : 2 + (n+1) + 2n opérations p26 = (p 13)2 1 multiplication


= 3 + 3n opérations où p13 = (p6)2 . p 2 multiplications
6 3 2
où p = (p ) 1 multiplication
Si n est grand 3n >> 3
où p3 = (p)2 . p 2 multiplications
T(n) = environ k * 3n
EN TOUT 6 multiplications (à la place de 25)

Le temps croît linéairement en fonction de n, indépendament de p.


Nombre d’étapes : log 2(n)

À chaque étape 1 ou 2 multiplications ==> T(n) ≤ 2 . log 2(n)

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


5 de 14 6 de 14

Algorithme (récursif) Cas de complexité


On définit une fonction récursive À cause des instructions si et tant que
Un algorithme ne suite pas toujours le même chemin pour résoudre un problème.
fonction puissance(p, n) {
=> Pour deux problèmes de taille n il peut exécuter des nombres différents
si ( n = 0 ) d’opérations.
retourne 1
=> La complexité n’est pas constante pour un problème de taille n
sinon {
y ← puissance(p, n/2) Exemple intuitif
y←y*y
Pour un "processeur" humain, il est plus facile de trier la liste
si ( n mod 2 = 1) y ← y * p
retourne y (2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
} que la liste
}
(34, 1, 101, 3, 8, 221, 14, 71, 6, 106, 93, 2, 88)
Complexité : T(n) proportionnel à 2log2(n)

Amélioration pour n = 1024


3x1024 / 2log2(1024) = 3072 / 20 = 153.6 fois plus rapide

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


7 de 14 8 de 14
Définition des cas de complexité Impact pratique
Pour un algorithme donné et un problème de taille n on distingue Mesurer si les ressources dont on dispose sont suffisante pour résoudre les
problèmes auxquels on veut s’attaquer;
Le meilleur des cas
Calculer la taille maximum des problèmes qu’on peut attaquer étant donné les
les données qui font que la complexité est minimale ressources dont on dispose.
– pour certains algo de tri: liste déjà dans l’ordre
– résoudre une équation dont tous les coefficients sont nuls
Complexité Taille maximum du problème que l’on peut
Le pire des cas Algorithme en temps résoudre en
1 seconde 1 minute 1 heure
nombre maximum d’opération que peut faire l’algorithme
A1 n 1’000’000 60’000’000 3’600’000’000
— pour certains algo de tri: liste dans l’ordre inverse ou liste déjà triée
A2 n log(n) 62746 2’801’420 133’378’000
Le cas moyen
A3 n2 1000 7745 60’000
le nombre moyen d’opérations calculé sur tous les problèmes de taille n A4 100 391 1’532
n3
difficile à définir
A5 2n 19 25 31

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


9 de 14 10 de 14

Impact sur l’interface utilisateur Ordres de grandeur


Le temps de calcul peut changer radicalement l’usage de la machine Difficile de calculer exactement le nombre d’instructions qui seront exécutées
On s’intéresse à l’ordre de grandeur de ce nombre en fonction de n.
Ex. vérifier l’orthographe d’un mot Notation O( f )
si T < 0.1 sec : vér ification possible "en direct" pendant qu’on tape le texte g(x) ∈ O( f )
si T > 0.1 sec : la vérification devient une opération à effectuer séparément
s’il existe un n 0 et un c tels que

g (x) ≤ c f(x)
Ex. calcul d’une image en 3D
dès que n ≥ n 0.
si T < 0.1 sec : animation (jeu vidéo)
si T < 1 sec : travail interactif sur une image (création d’images 3D, dessin)
si T plus grand : calcul différé (films d’animation réalistes calculés avec des "fermes But : utiliser des fonctions f simples telles que
de processeurs")
1, n , n2, n 3, …, nk, 2n , log( n).

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


11 de 14 12 de 14
Graphiquement Quelques ordres de grandeur

constante k ∈ O(1)
2
3x linéaire ax + b ∈ O( x)
2
g ∈ O (x ) 2 4
quadratique ax 2 + bx + c ∈ O( x2)
g(x) = 1.2x + cos(x ) - log(x+1) + ...

polynômial a kxk + ak–1xk–1 + … + a 1x + a0 ∈ O( xk)

xq ∈ O(2x) polynome < exponentielle]

∀p 2x ∉ O(xp) exponentielle toujours > polynôme


n0 log(n ) ∈ O(n ) logarithme < linéaire

∀a ax ∉ O(log(n)) linéaire toujours > logarithme

G. Falquet, CUI, Université de Genève G. Falquet, CUI, Université de Genève


13 de 14 14 de 14

Das könnte Ihnen auch gefallen