Vous êtes sur la page 1sur 26

Chapitre 1 :

Introduction à la complexité algorithmique

1ère Génie Info


B.Fayech
1
I. Introduction
 Les premières applications de l’informatique : données de taille
réduite  pas de préoccupation de l’efficacité des algorithmes
utilisés.

 Champs d’application plus élargis : les problèmes à résoudre de plus


en plus difficiles, issus du domaine de la recherche opérationnelle,
de l’économie, ou de taille importante tels que les problèmes de
l’analyse numérique (évaluation des équations numériques)

 Malgré la rapidité des ordinateurs, il y a des limites à


cerner

2
 Résoudre un problème : plusieurs algorithmes!
 Comment choisir?
 L’algorithme choisi :
 Facile à comprendre et à mettre en œuvre
 Rapide, qui utilise de manière efficace les ressources
disponibles
 Comment mesurer l’efficacité d’un algorithme?
 Comment comparer les algorithmes entre eux?
 Comment rendre un algorithme plus efficace?

3
 Théorie de la complexité : branche de l’informatique qui
permet de réfléchir sur des critères de comparaison entre
programmes (critères d’évaluation quantitatifs)
 MAIS : les langages de programmation changent et les
ordinateurs encore plus vite
 DONC : Il faut s’abstraire de la syntaxe et du matériel et
raisonner dans le cadre général
 Objectif : estimer le coût d’un algorithme résolvant un
problème donnée, comparer des algorithmes différents
résolvant un même problème et décider lesquels sont les
meilleurs

4
II. Généralités
 Ressources
 Temps : période entre début et fin d’exécution d’un algorithme
 Espace mémoire: place en mémoire centrale nécessaire à l’exécution

 Le temps d’exécution dépend de :


 Données du problème pour cette exécution,
 La qualité du code généré par le compilateur,
 La rapidité de l’ordinateur,
 L’efficacité de l’algorithme,
 La qualité de la programmation, …
 Ignorer les détails de l’implantation : on calcule le temps d’exécution
uniquement en fonction de la taille du problème, n
5
 Taille des données
 Evaluer la taille des données nécessaires à l’algorithme : les
entrées ou les instances
 Taille ou dimensions les plus significatives du problème :
 Tableaux : nombre d’éléments
 Matrices m*n : max (m,n), m*n, …

 Graphes : nombre de sommets, d’arêtes, …


 Arbres : comme graphe, hauteur de l’arbre, …
 Polynômes : degré, nombre de coefficients non nuls, …

6
 Types et coûts des opérations
 Dans un ordinateur : les opérations n’ont pas le même coût

 Pour simplifier, on suppose : coût uniforme (constant)

Problème Opérations Types


Recherche d’un élément dans Comparaisons Op. Logiques
un tableau, liste, arbre, …
Tri Comparaisons
d’un tableau, fichier, … Echanges Op. Affectation
Multiplication Additions Op. Arithmétiques
de vecteurs, matrices, … Multiplications

7
III. Théorie de la complexité algorithmique
 Définition
 Un moyen de mesurer la performance d’un algorithme
 2 types : temporelle et spatiale
 But : prévoir le comportement d’un algorithme avant de l’implanter sur
un ordinateur et mesurer la quantité des ressources informatiques qu’il
utilise en fonction de la taille du problème à résoudre
 Critères de mesure de la complexité
 Nombre d’opérations élémentaires (logiques, affectations, arithmétiques)
exécutées par un ordinateur sur un jeu de données
 La complexité est exprimées comme une fonction de la taille des
jeux de données
 Le temps d’exécution d’un algorithme est proportionnel au
nombre d’opérations élémentaires effectuées par cet algorithme
8
 Estimation Asymptotique
 La complexité est une estimation (approximation) en limite
supérieure du temps nécessaire à l’exécution
 ordre de grandeur (notation grand-O)

 Pour un calcul du temps d’exécution qui prend (5n2+n)


 On ignore les initialisations, les constantes
 On ignore n, car il est négligeable devant 5n2 pour des n de
grandes valeurs

 La complexité est une mesure asymptotique, un temps


d’exécution lorsque la taille de l’entrée tend vers l’infini.

9
 Notation grand-O
 Soit un problème P de taille n. On note P(n) une instance de P. On
veut calculer la complexité temporelle T (n) de l’algorithme A qui
résout P.
 On dit que T (n) est en O(f(n)) si seulement s’il existe un entier n0
et une constante c > 0 tel que
n ≥ n0, on a : T (n) ≤ cf(n)
O(f(n)) est l’ensemble des fonctions T (n) qui peuvent être bornées
supérieurement par cf(n) pour n suffisamment grand.

Exemple :
T(n)= 60n²+5n+1 O(n²)
T(n) ≤ 66n²

10
 Exercice 1 :
 Déterminer un majorant à chaque fonction liée à un temps
d’exécution (grand-O):
 T(n)=3n²+60n+18

 T(n)= n4 + 4n3 +13n


 T(n)=26

 T(n)=3logn + 15
 T(n)=5n²+ 10nlogn

11
 Notation grand- Ω
 Cette notation permet de trouver un minorant pourT(n).
 On dit que T(n) est en Ω(f(n)) si seulement s’il existe un entier n0
et une constante c > 0 tel que
n ≥ n0, on a : T(n) ≥ cf(n)
Ω(f(n)) est l’ensemble des fonction T(n) qui peuvent être bornées
inférieurement par cf(n) pour n suffisamment grand.

12
 Notation grand- 
 Si une fonction peut être majorée et minorée par une même
fonction en notation asymptotique, alors on parle d’ordre exacte
(notation « Théta »).
 On dit que T(n) est en (f(n)) si et seulement si:
T(n)O(f(n)) et T(n)  Ω(f(n))
çad, il existe un entier n0 et 2 constantes c1>0 et c2>0 tel que
n ≥ n0, on a : c1 f(n) ≤ T(n) ≤ c2 f(n)
(f(n)) =Ω(f(n))  O(f(n))

Exemple :
T(n)= 60n²+5n+1  (n²)
60n² ≤ T(n) ≤ 66n²

13
 Calcul de la complexité

x: entier
y: entier max(O(1), O(1))=O(1)
x 0; //instruction 1 en O(1)
y x2 //instruction 2 en O(1)

Si condition alors
<Traitement 1>
sinon  O(Tcondition)+max(O(TTrait1), O(TTrait 2))
<Traitement 2>
FinSi

14
Tant que <condition> faire
<Traitement>  Nbr_it × (O(Tcondition)+O(TTraitement))
Fintantque

pour i=ind1 à ind2 faire ind 2

<Traitement>   O(T
i ind 1
Traitement )
Finpour

15
 Exercice 2 :
 Déterminer la complexité des séquences d’instructions suivantes :

Début
S0
Pour i de 1 à n faire
S  S+a*A[i]
Fin pour
Fin

Début
Pour i de1 à n faire
Pour j de1 à i faire
C[i,j]  A[i,j]+B[i,j]
Fin pour
Fin pour
16
Fin
 Complexité minimale, moyenne et maximale

 Un même algorithme peut être plus performant avec certains ensembles de


données qu’avec d’autres.
 Exemple : Problème de recherche séquentielle d’un élément dans un tableau
de n éléments
 Meilleur des cas ou Complexité minimale: quand l’élément cherché
se trouve au début du tableau  1 comparaison Tmin(n)=O(1)
 Pire des cas ou Complexité maximale: quand l’élément cherché se
trouve à la fin du tableau  n comparaisons Tmax(n)=O(n)
 Complexité moyenne: quand l’élément cherché se trouve au milieu du
tableau  n/2 comparaisons Tmoy(n)=O(n)

 Remarque : La complexité moyenne est plus compliquée à calculer car il


faut faire des hypothèses sur les données
17
 Exercice 3 : Déterminer les complexités minimales et
maximales des séquences d’instructions suivantes :

Début Début
S0 Pour i de1 à n faire
Pour i de1 à n faire Y[i]  0
si A[i]>0 alors Pour j de1 à i faire
S  S+A[i] Si X[j]<>0 alors
Fin Si Y[i]Y[i]+A[i,j]/X[j]
Fin pour Fin Si
Fin Fin pour
Fin pour
Fin

18
 Utilisation de la limite pour déterminer l’ordre

19
 Propriétés

 Réflexivité : f(n) =O(f(n))

 Transitivité : Si f(n) =O(g(n)) et g(n) =O(h(n)) alors f(n) =O(h(n))


(de même pour Ω et )
 Produit par un scalaire : a>0, aO(f(n))=O(f(n))

 Somme : O(f(n) +g(n))= O(max(f(n),g(n)))

 Produit : O(f(n))*O(g(n))= O(f(n)*g(n))

 Symétrie : elle n’est vraie qu’avec : f(n)= (g(n)) g(n)=


(f(n))
 f(n) = Ω(g(n))  g(n) =O(f(n))

20
 Comparaison d’algorithmes
 Si deux algorithmes permettant de résoudre le même problème ont
des complexités différentes, alors celui qui possède la complexité la
plus petite sera dit plus efficace asymptotiquement.
 MAIS, il est possible que pour de petites tailles d’entrées l’autre soit
plus rapide à l’exécution.

 Exemple : 2 algorithmes A et B pour un même problème avec


TA(n)=50n² et TB(n)=n3
 TA(n)=O(n²) et TB(n)=O(n3)  A est meilleur asymptotiquement
 Sur une instance de taille 10 :TA(n)=5000 et TB(n)=1000
 Si n= 50, TA(n)=TB(n)  les deux algorithmes ont les mêmes
temps d’exécution
 Remarque : Attention aux facteurs constants très grands !
 T(n)=1000000n= O(n) est moins efficace qu’un T(n)=2n²=0(n²)
21
même pour une taille importante (n<500000, 100000n>2n²)
 Grandes Classes de Complexité

22
 Comparaison des fonctions

23
 Exemple de calcul du temps d’exécution
 Sur une machine qui fait une op. élémentaire par microseconde :

f(n) n=10 n=20 n=30 n=40 n=50


n 0.00001 0.00002 0.00003 0.00004 0.00005
seconde seconde seconde seconde seconde
n2 0.0001 0.0004 0.0009 0.0016 0.0025
seconde seconde seconde seconde seconde
n3 0.001 0.008 0.027 0.064 0.125
seconde seconde seconde seconde seconde
2n 0.001 1 seconde 17.9 12.7 jours 35.7
seconde minutes années
3n 0.059 58 6.5 3855 2x108
seconde minutes années siècles siècles

24
IV. Complexité des problèmes
 Définition
La complexité d’un problème est le nombre minimal d’opérations
élémentaires à effectuer pour résoudre ce problème : c’est une borne
inférieure pour la complexité des algorithmes
 Optimalité d’un algorithme
 Un algorithme résolvant un problème P est dit optimal si on sait que
c’est impossible de trouver un autre résolvant P avec une meilleure
complexité.
Comment voir si un algorithme est optimal ?
 Il faut trouver une borne inférieure sur le nombre d’opérations
nécessaires pour résoudre P : T (n) ≥ K pour tous les algorithmes
résolvant P. Si un algorithme est en O(K), alors il est optimal.
 Exemple : multiplication de matrices: borne inf=n²
25
 Classification des problèmes

 Problèmes « faciles » : pour lesquels il existe un algorithme dont le


temps d’exécution est borné par une fonction polynômiale.

 Problèmes « difficiles » : pour lesquels il n’existe pas un algorithme


dont le temps d’exécution est borné par une fonction polynômiale.

 Nous notons la classe des problèmes faciles la classe P et la classe des


problèmes difficiles la classe NP.

(… A suivre dans le cours d’algorithmique avancée


3ème semestre)
26

Vous aimerez peut-être aussi