Algorithmes et complexité Complexité Exemple

publicité
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
1 de 14
G. Falquet, CUI, Université de Genève
Exemple: résolution d’une équation
2 de 14
Exemple pn
Trouver x tels que ax + b = 0 (a différent de 0)
Avec a et b inférieurs à MAX
{
1.
2.
3.
4.
5.
x←–b/a
}
Nombre d’opérations arithmétiques effectuées : 2
Complexité en temps : constante
r ← 1;
s ← 0;
tant que (s ≠ n) {
r ← r * p;
s ← s + 1;
}
// nombre d’itérations = n
T(n) = k
Temps effectif : dépend de la machine
G. Falquet, CUI, Université de Genève
3 de 14
G. Falquet, CUI, Université de Genève
4 de 14
Nombre d’opérations exécutées
1.
2.
3.
4.
5.
r ← 1;
s ← 0;
tant que (s ≠ n) {
r ← r * p;
s ← s + 1;
Exemple pn bien amélioré
1 fois
1 fois
n + 1 fois
n fois
n fois
Observation :
p2n = (pn)2
p2n+1 = (pn)2 . p1
en tout : 2 + (n+1) + 2n opérations
= 3 + 3n opérations
p26 = (p 13)2
1 multiplication
où p13 = (p6)2 . p
2 multiplications
6
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.
3 2
où p = (p )
1 multiplication
où p3 = (p)2 . p
2 multiplications
EN TOUT
6 multiplications (à la place de 25)
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
5 de 14
G. Falquet, CUI, Université de Genève
Algorithme (récursif)
6 de 14
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) {
si ( n = 0 )
retourne 1
sinon {
y ← puissance(p, n/2)
y←y*y
si ( n mod 2 = 1) y ← y * p
retourne y
}
}
=> 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)
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
7 de 14
G. Falquet, CUI, Université de Genève
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
ressources dont on dispose.
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
Algorithme
Complexité
en temps
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
9 de 14
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
n2
1000
7745
60’000
A4
n3
100
391
1’532
A5
2n
19
25
31
G. Falquet, CUI, Université de Genève
Impact sur l’interface utilisateur
10 de 14
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
si T < 0.1 sec : animation (jeu vidéo)
n ≥ n 0.
si T < 1 sec : travail interactif sur une image (création d’images 3D, dessin)
But : utiliser des fonctions f simples telles que
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
1, n , n2, n 3, …, nk, 2n , log( n).
11 de 14
G. Falquet, CUI, Université de Genève
12 de 14
Graphiquement
3x
2
g ∈ O (x )
Quelques ordres de grandeur
2
2
4
g(x) = 1.2x + cos(x ) - log(x+1) + ...
constante
k ∈ O(1)
linéaire
ax + b ∈ O( x)
quadratique
ax 2 + bx + c ∈ O( x2)
…
polynômial
∀p
n0
∀a
G. Falquet, CUI, Université de Genève
13 de 14
G. Falquet, CUI, Université de Genève
a kxk + ak–1xk–1 + … + a 1x + a0 ∈ O( xk)
xq ∈ O(2x)
polynome < exponentielle]
2x ∉ O(xp)
exponentielle toujours > polynôme
log(n ) ∈ O(n )
logarithme < linéaire
ax ∉ O(log(n))
linéaire toujours > logarithme
14 de 14
Téléchargement