Algorithmes et complexité Complexité Exemple - (CUI)

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 13
G. Falquet, CUI, Université de Genève
2 de 13
Exemple: résolution d’une équation
Exemple pn
Trouver x tels que ax + b = 0 (a différent de 0)
r ← 1;
s ← 0;
tant que (s ≠ n) {
// nombre d’itérations = n
r ← r * p;
s ← s + 1;
}
Opérations exécutées : (1.), (2.), (n+1) fois (3.), n fois ((4.) , (5.))
1.
2.
3.
4.
5.
Avec a et b inférieurs à MAX
{
x ← –b / a
}
Nombre d’opérations arithmétiques effectuées : 2
= 2 + (n+1) + 2n opérations
Complexité en temps : constante
= 3 + 3n opérations
Ordre de grandeur de la complexité
T(n) = k
dès que n > 3 on a
3 + 3n < 4 n
Temps effectif : dépend de la machine
T(n) = k * 4n
linéaire en n, indépendant de p.
G. Falquet, CUI, Université de Genève
3 de 13
G. Falquet, CUI, Université de Genève
4 de 13
Algorithme (récursif)
Exemple pn bien amélioré
On définit une fonction récursive
Observation :
p2n = (pn)2
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
}
}
p2n+1 = (p n)2 . p 1
Exemple :
p26 = (p13)2
1 multiplication
où p13 = (p6)2 . p
2 multiplications
6
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 : log2(n)
À chaque étape 1 ou 2 multiplications ==> T(n) ≤ 2 . log 2(n)
G. Falquet, CUI, Université de Genève
5 de 13
G. Falquet, CUI, Université de Genève
Cas de complexité
6 de 13
Définition des cas de complexité
À cause des instructions si et tant que
Pour un algorithme donné et un problème de taille n on distingue
Un algorithme ne suite pas toujours le même chemin pour résoudre un problème.
Le meilleur des cas
=> Pour deux problèmes de taille n il peut exécuter des nombres différents
d’opérations.
les données qui font que la complexité est minimale
– pour certains algo de tri: liste déjà dans l’ordre
=> La complexité n’est pas constante pour un problème de taille n
– résoudre une équation dont tous les coefficients sont nuls
Exemple intuitif
Le pire des cas
Pour un "processeur" humain, il est plus facile de trier la liste
nombre maximum d’opération que peut faire l’algorithme
(2, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
— pour certains algo de tri: liste dans l’ordre inverse ou liste déjà triée
que la liste
Le cas moyen
(34, 1, 101, 3, 8, 221, 14, 71, 6, 106, 93, 2, 88)
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
7 de 13
G. Falquet, CUI, Université de Genève
8 de 13
Impact pratique
Impact sur l’interface utilisateur
Mesurer si les ressources dont on dispose sont suffisante pour résoudre les
problèmes auxquels on veut s’attaquer;
Le temps de calcul peut changer radicalement l’usage de la machine
Calculer la taille maximum des problèmes qu’on peut attaquer étant donné les
ressources dont on dispose.
Ex. vérifier l’orthographe d’un mot
si T < 0.1 sec : vérification possible "en direct" pendant qu’on tape le texte
Complexité
en temps
Algorithme
si T > 0.1 sec : la vérification devient une opération à effectuer séparément
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
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 "fer mes
de processeurs")
9 de 13
G. Falquet, CUI, Université de Genève
Ordre de grandeur de la complexité
10 de 13
Graphiquement
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 )
3x
g(n ) ∈ O( f )
s’il existe un
2
2
g ∈ O (x )
g
n0 et un c tels que
g (n ) ≤ c f(n )
dès que n ≥
n0.
But : utiliser des fonctions f simples telles que
n0
1, n, n 2, n3, …, n k, 2n , log(n ).
G. Falquet, CUI, Université de Genève
11 de 13
G. Falquet, CUI, Université de Genève
12 de 13
Quelques ordres de grandeur
g(n ) = constante ∈ O(1)
g(n ) = an + b ∈ O( n) ( a, b des constantes)
g(n ) = an2 + bn + c ∈ O( n2)
…
g(n ) = akn k + a k–1n k–1 + … + a 1n + a 0 ∈ O(nk)
g(n ) = nq ∈ O(2n)
[polynome < exponentielle]
g(n ) = log(n) ∈ O( n)
[logarithme < linéaire]
G. Falquet, CUI, Université de Genève
13 de 13
Téléchargement