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)