Académique Documents
Professionnel Documents
Culture Documents
INTRODUCTION A LA
COMPLEXITÉ ALGORITHMIQUE
1
PRÉSENTATION GÉNÉRALE :
Objectif principal: Apprendre à évaluer les algorithmes et à proposer des
algorithmes efficaces et optimisés
Plan :
▪ Notions et concepts de base
▪ Complexité d’algorithmes itératifs
▪ Complexité d’algorithmes récursifs
Exemple 1 : Introductif
● Soit à calculer l’expression suivante :
E = 1 + x + x2 + x3 + …….. xn-1 + xn
avec x un réel > 0 et n un entier > 2
3
Exemple 1: Introductif
puissance (x: réel, i:entier) : réél
Début
p := x
pour j de 2 à i faire i-1 (*)
p := p*x
fin pour
puissance :=p
Fin
Algo A1
Début
E := 1
pour i de 1 à n faire
E := E+ puissance (x,i)
fin pour
Fin
Algo A2
Debut
E := 1 , p := x
On peut se limiter à
pour i de 2 à n faire n-1 (*)
E := E + p
p := p * x
n (+)
fin pour => 2n-1 opérations
pour n=1000, on fait 1999 o.a
E := E + p
Fin
Désormais, A1 est inacceptable de la part d’un informaticien. Penser aux performances de
l’algorithme est une nécessité !
5
En conclusion,
6
Problématique de l’algorithmique
○ La complexité algorithmique est une métrique (mesure) de l’évaluation des performances des
algorithmes
● Utilisation d’une unité de temps abstraite : La durée d’exécution n’est donc pas mesurée en heure,
minute, seconde mais en unité de temps
● Il ne s’agit pas d’implémenter les algorithmes qu’on veut comparer. La comparaison se fait au préalable,
bien avant l’étape d’implémentation. Même si on implémente pour mesurer le temps, les mesures
seront impertinentes, car :
○ On aura des valeurs numériques qui ne varient pas en fonction de la taille du problème
○ On ne saura pas distinguer entre le temps de calcul et le temps du aux transferts mémoires et aux
entrées/sorties
○ Le même algorithme sera plus rapide sur une machine plus puissante
12
Calcul de la complexité temporelle
● On distingue :
○ Les opérations élémentaires faites par les processeurs :
■ Opérations arithmétiques (o.a) : + - * et /
■ Opérations logiques (o.l) : ET, OU, … et comparaisons
○ Les instructions qui consistent en un transfert de données entre processeur et
mémoire:
■ lectures, écritures et affectations
14
Notations :
Problèmes, algorithmes, complexité
● P(n) : un problème à résoudre où n est la taille du problème dit paramètre du problème.
15
Exemple 3
Soit l’algorithme calculant n! n! =1*2*…*(n-1)*n
factoriel (n : entier) : entier
Début
var i,fact : entier
fact :=1
// 1 multiplication (*)
pour i de 2 à n faire
fact := fact * i
fin pour
Complexité temporelle : C(n) = (n-1) (*)
factoriel := fact
Complexité spatiale : 3*(taille d’un entier) 16
Fin
Exemple 4
● Soient U, V et W des vecteurs de taille n de réels. Ecrire un algorithme calculant W=U+V et calculer sa complexité temporelle et spatiale.
Somme-vect (n: entier,U,V: tableau [1..n] de réel, var W:tableau [1..n] de réel)
Var i:entier
Début
pour i de 1 à n faire
W[i] := U[i] + V[i]
fin pour
Fin
● Complexité temporelle : n (+) => C(n) = n
17
Exemples d’application
18
Exemples d’application : Algo1
Algo1 : affiche les n composantes d’un vecteur x
pour i de 1 à n faire
Afficher (x[i])
fin pour
19
Exemples d’application : Algo2
20
Exemples d’application : Algo3
21
Exemples d’application : Algo4
Algo4 : affiche toutes les valeurs possibles des vecteurs de
n composantes, toutes valant 0 ou 1.
● Indication: algo récursif.
● Voici l’arbre qui explique l’affichage pour n=3 :
enum(3,1,x)
22
Exemples d’application : Algo4
●
23
Ordre de complexité
Notations de Landau
● Quand on calcule la complexité d’un algorithme, on ne calcule
généralement pas sa complexité exacte, mais son ordre de grandeur
● Car on s’intéresse à des données très grandes parce que les petites valeurs ne sont pas assez informatives (la taille du
problème tend vers l’infini)
● f(n) est en O(g(n)) s’il existe un seuil à partir duquel la fonction f(.) est toujours dominée par g(.), à une constante
multiplicative près
● Exemple
● Signification : Pour toutes les grandes tailles (i.e., n >= n0), assurance que l’algorithme ne prend pas plus de c*g(n) étapes
25
Illustration
26
Exemple
● Prouver que f(n) = 5n + 37 = O(n) i.e g(n) = n
● But : Trouver une constante c Є R et un seuil n0 Є N à partir duquel |f(n)| <= c|n|
● Remarque : on ne demande pas d’optimiser (le plus petit c ou n0 qui fonctionne) juste il faut donner des valeurs qui
fonctionnent
27
Utilisation de la notation O
Réellement, pour l’approximation de la complexité, O(.) est
utilisé pour donner une approximation de l’ordre de
complexité sans le majorer
Exemples :
28
Règle de simplification
● La règle suivante permet de simplifier les complexités en omettant des termes dominés :
29
O(.) et limites
●
30
Autres simplifications
● Les quelques règles suivantes permettent de simplifier les complexités en omettant des
termes dominés :
○ Les coefficients peuvent être omis : O(14n2) devient O(n2)
○ Les constantes additives peuvent être omises : O(4n4 + 20) devient O(4n4)
31
Exemples de simplification
32
Règles de calcul
33
Classes de complexité
Complexité polynômiale/ exponentielle
• Une complexité est dite polynômiale si elle s’écrit
sous la forme d’un polynôme en les paramètres
du problème.
Exemple : n, 7n2,n4+5n3+2n, n100
• Si le polynôme est de degré q la complexité est
dite polynômiale d’ordre q (q=1 : linéaire, q=2
quadratique…)
• O(n log n) est dite complexité est
polylogarithmique
Résultats obtenus pour une machine à 109 opérations flottantes par secondes
(flops)
36
Algorithme optimal
● Soit P(n) un problème de paramètre n
● Soient A1(n), A2(n), …….. , At(n) les t uniques algorithmes résolvant P(n)
38