Académique Documents
Professionnel Documents
Culture Documents
CHAP 1: COMPLEXITÉ
ET
OPTIMALITÉ
1
Complexité
Exemple :
problème : calculer xn
données : x : réel , n: entier
Méthode 1 : x0 = 1; xi = x* xi-1 i >0 T=n
Méthode 2 : x0 = 1;
xi = xi/2 * xi/2 , si i est pair; T = log n
xi = x*xi/2 * xi/2 si i est impair
...
résultats : y = xn
Laquelle choisir? et pourquoi?
Plutôt la deuxième.
=>Analyse de la complexité des algorithmes
2
Objectif de la complexité
L'objectif premier d'un calcul de complexité algorithmique est de
pouvoir comparer l’efficacité d’algorithmes résolvant le même
problème. Dans une situation donnée, cela permet donc d'établir
lequel des algorithmes disponibles est le plus optimal.
3
Types de complexité
On distinguera deux sortes de complexité, selon que l'on s'intéresse au temps d'exécution ou
à l'espace mémoire occupé.
Complexité en temps
-Réaliser un calcul de complexité en temps revient à décompter le nombre
d’opérations élémentaires (affectation, calcul arithmétique ou logique,
comparaison…) effectuées par l’algorithme.
-Pour rendre ce calcul réalisable, on émettra l'hypothèse que toutes les opérations
élémentaires sont à égalité de coût. En pratique ce n'est pas tout à fait exact mais
cette approximation est cependant raisonnable.
-On pourra donc estimer que le temps d'exécution de l'algorithme est
proportionnel au nombre d’opérations élémentaires.
Complexité en espace
-La complexité en espace est quand à elle la taille de la mémoire nécessaire pour
stocker les différentes structures de données utilisées lors de l'exécution de
l'algorithme.
4
Analyse de la complexité :
Complexité
Définition : La complexité d’un algorithme est la mesure du nombre
d’opérations fondamentales qu’il effectue sur un jeu de données.
6
Analyse de la complexité :
Complexité en moyenne : Tmoy(n) = dDn C(d) / |Dn|
C’est la moyenne des complexités de l’algorithme sur des jeux de données
de taille n (en toute rigueur, il faut bien évidemment tenir compte de la
probabilité d’apparition de chacun des jeux de données).
9
Calcul de la complexité: algorithmes récursifs
Algorithmes de type diviser pour régner:
Un problème de taille n est ainsi divisé en a sous-problèmes de taille n/b, avec un coût f(n) pour
combiner les résultats de ces sous-problèmes.
10
Analyse de la complexité :
Notation de Landau:
On ne s ’intéresse pas en général à la complexité
exacte, mais à son ordre de grandeur.
=> besoin de notations asymptotiques.
11
Analyse de la complexité :
Exemples :
0 : n=O(n), (prendre n0 =1, c=1)
2n = O(3n) (prendre n0 =1 c = 2/3)
n2 - n-1 = O(n2) (prendre n0 = 1, c =1)
résultats : une permutation <a ’1, a ’2, . . . , a ’n> des données t.q.
a ’1 a ’2 , . . . , a ’n
exemple :
13
Analyse de la complexité : algorithme de tri
Complexité
attribution d ’un coût en temps ci à chaque instruction, et
compter le nombre d’exécutions de chacune des instructions.
Pour chaque valeur de j [2..n], nous notons t j le nombre
d’exécutions de la boucle tant que pour cette valeur de j.
Il est à noter que la valeur de t j dépend des données…
14
Analyse de la complexité : algorithme de tri
Complexité au meilleur : le cas le plus favorable
pour l’algorithme TRI-INSERTION est quand le
tableau est déjà trié. Dans ce cas t j = 1 pour tout j.
Rappel : donc et
T(n) peut ici être écrit sous la forme T(n)=ax2 +bx +c, a, b
et c étant des constantes, et T(n) est donc une fonction
16
quadratique.
Analyse de la complexité : algorithme de tri
Complexité en moyenne : supposons que l’on applique
l’algorithme de tri par insertion à n nombres choisis au
hasard. Quelle sera la valeur de t j ? C’est-à-dire, où devra-
t-on insérer A[ j] dans le sous-tableau A[1.. j-1]? En
moyenne tj = j/2.
Si l ’on reporte cette valeur dans l ’équation on obtient
également une fonction quadratique.
meilleur cas : Q(n).
pire cas : Q(n2).
en moyenne : Q(n2).
En général, on considère qu’un algorithme est plus efficace
qu’un autre si sa complexité dans le pire cas a un ordre de
grandeur inférieur.
17
Classes de complexité
Les algorithmes usuels peuvent être classés en un certain nombre de grandes
classes de complexité :
– Les algorithmes sub-linéaires dont la complexité est en général en O(logn).
– Les algorithmes polynomiaux en O(nk) pour k > 3 sont considérés comme lents,
18
Classes de complexité
O Type de complexité
O(1) constant
O(log(n)) logarithmique
O(n) linéaire
O(n×log(n)) quasi-linéaire
O(𝑛2 ) quadratique
O(𝑛3 ) cubique
O(2𝑛 ) exponentiel
O(n!) factoriel
19