1-Chapitre 1 Complexité
1-Chapitre 1 Complexité
1-Chapitre 1 Complexité
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
6
Types et coûts des opérations
Dans un ordinateur : les opérations n’ont pas le même coût
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)
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)=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
<Traitement> O(T
i ind 1
Traitement )
Finpour
15
Exercice 2 :
Déterminer la complexité des séquences d’instructions suivantes :
Début
S0
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
Début Début
S0 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
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.
22
Comparaison des fonctions
23
Exemple de calcul du temps d’exécution
Sur une machine qui fait une op. élémentaire par microseconde :
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