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