G. Falquet, CUI, Université de Genève 1 de 14
Algorithmes et complexité
Combien de temps mon algorithme mettra-t-il pour résoudre un problème donné ?
Combien d’espace mémoire faut-il prévoir ?
Problème et instance
Problème général : tester si un nombre est premier
Problème particulier (instance) : tester si 494059397730 est premier
Une instance est caractérisée par sa taille
Il y a différentes manières de définir la taille
p.ex. taille(494059397730) = 494059397730 (linéaire)
ou taille(494059397730) = 12 chiffres (logarithmique)
G. Falquet, CUI, Université de Genève 2 de 14
Complexité
Pour résoudre une instance de taille n fixée.
Complexité d’un algorithme en temps
= nombre d’instructions exécutées (ordre de grandeur)
= fonction de n
en supposant que les instructions prennent un temps constant
Complexité en espace
= nombre de cellules mémoire utilisées (ordre de grandeur)
= fonction de n
G. Falquet, CUI, Université de Genève 3 de 14
Exemple: résolution d’une équation
Trouver x tels que ax + b = 0 (a différent de 0)
Avec a et b inférieurs à MAX
{x – b / a
}
Nombre d’opérations arithmétiques effectuées : 2
Complexité en temps : constante
T(n) = k
Temps effectif : dépend de la machine
G. Falquet, CUI, Université de Genève 4 de 14
Exemple pn
1. r 1;
2. s 0;
3. tant que (s n) { // nombre d’itérations = n
4. r r * p;
5. s s + 1;
}
G. Falquet, CUI, Université de Genève 5 de 14
Nombre d’opérations exécutées
1. r 1; 1 fois
2. s 0; 1 fois
3. tant que (s n) { n + 1 fois
4. r r * p; n fois
5. s s + 1; n fois
en tout : 2 + (n+1) + 2n opérations
= 3 + 3n opérations
Si n est grand 3n >> 3
T(n) = environ k * 3n
Le temps croît linéairement en fonction de n, indépendament de p.
G. Falquet, CUI, Université de Genève 6 de 14
Exemple pn bien amélioré
Observation :
p2n = (pn)2
p2n+1 = (pn)2 . p1
p26 = (p13)21 multiplication
où p13 = (p6)2 . p 2 multiplications
où p6 = (p3)21 multiplication
où p3 = (p)2 . p 2 multiplications
EN TOUT 6 multiplications (à la place de 25)
Nombre d’étapes : log2(n)
À chaque étape 1 ou 2 multiplications ==> T(n) 2 . log2(n)
G. Falquet, CUI, Université de Genève 7 de 14
Algorithme (récursif)
On définit une fonction récursive
fonction puissance(p, n) {
si ( n = 0 )
retourne 1
sinon {
y puissance(p, n/2)
y y * y
si ( n mod 2 = 1) y y * p
retourne y
}
}
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 8 de 14
Cas de complexité
À cause des instructions si et tant que
Un algorithme ne suite pas toujours le même chemin pour résoudre un problème.
=> Pour deux problèmes de taille n il peut exécuter des nombres différents
d’opérations.
=> La complexité n’est pas constante pour un problème de taille n
Exemple intuitif
Pour un "processeur" humain, il est plus facile de trier la liste
(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)
G. Falquet, CUI, Université de Genève 9 de 14
Défi
nition des cas de comple
xité
Pour un algorithme donné et un problème de taille n on distingue
Le meilleur des cas
les données qui font que la complexité est minimale
– pour certains algo de tri: liste déjà dans l’ordre
– résoudre une équation dont tous les coefficients sont nuls
Le pire des cas
nombre maximum d’opération que peut faire l’algorithme
— pour certains algo de tri: liste dans l’ordre inverse ou liste déjà triée
Le cas moyen
le nombre moyen d’opérations calculé sur tous les problèmes de taille n
difficile à définir
G. Falquet, CUI, Université de Genève 10 de 14
Impact pratique
Mesurer si les ressources dont on dispose sont suffisante pour résoudre les
problèmes auxquels on veut s’attaquer;
Calculer la taille maximum des problèmes qu’on peut attaquer étant donné les
ressources dont on dispose.
Algorithme Complexité
en temps Taille maximum du problème que l’on peut
résoudre en
1 seconde 1 minute 1 heure
A1 n 1’000’000 60’000’000 3’600’000’000
A2 n log(n) 62746 2’801’420 133’378’000
A3 n21000 7745 60’000
A4 n3100 391 1’532
A5 2n19 25 31
G. Falquet, CUI, Université de Genève 11 de 14
Impact sur l’interface utilisateur
Le temps de calcul peut changer radicalement l’usage de la machine
Ex. vérifier l’orthographe d’un mot
si T < 0.1 sec : vérification possible "en direct" pendant qu’on tape le texte
si T > 0.1 sec : la vérification devient une opération à effectuer séparément
Ex. calcul d’une image en 3D
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
de processeurs")
G. Falquet, CUI, Université de Genève 12 de 14
Ordres de grandeur
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.
Notation O( f )
g(x) O( f )
s’il existe un n0 et un c tels que
g(x) c f(x)
dès que n n0.
But : utiliser des fonctions f simples telles que
1, n, n2, n3, …, nk, 2n , log(n).
G. Falquet, CUI, Université de Genève 13 de 14
Graphiquement
n0
g(x) = 1.2x2 + cos(x4) - log(x+1) + ...
3x2
g O (x2)
G. Falquet, CUI, Université de Genève 14 de 14
Quelques ordres de grandeur
constante k O(1)
linéaire ax + b O(x)
quadratique ax2 + bx + c O(x2)
polynômial akxk + ak–1xk–1 + … + a1x + a0 O(xk)
xq O(2x) polynome < exponentielle]
p 2x O(xp) exponentielle toujours > polynôme
log(n) O(n) logarithme < linéaire
aax O(log(n)) linéaire toujours > logarithme
1 / 4 100%