Académique Documents
Professionnel Documents
Culture Documents
Chapitre 1: introduction au
complexité algorithmique
Outline
1 Algorithmique
2 Temps d’exécution
3 Complexité algorithmique
Algorithmique
Methodologie
5
Cours Complexité Algorithmique 5 / 36
Algorithmique introduction
5
Cours Complexité Algorithmique 2016 5 / 36
Algorithmique introduction
5
Cours Complexité Algorithmique 2016 5 / 36
Algorithmique objectifs
Objectifs
Efficacité
7
Cours Complexité Algorithmique 2016 7 / 36
Algorithmique objectifs
Efficacité
7
Cours Complexité Algorithmique 2016 7 / 36
Algorithmique objectifs
Théorie de la complexité
8
Cours Complexité Algorithmique 2016 8 / 36
Algorithmique objectifs
Théorie de la complexité
8
Cours Complexité Algorithmique 2016 8 / 36
Temps d’exécution
9
Cours Complexité Algorithmique 2016 9 / 36
Temps d’exécution
9
Cours Complexité Algorithmique 2016 9 / 36
Temps d’exécution
9
Cours Complexité Algorithmique 2016 9 / 36
Temps d’exécution
Règles:
Chaque instruction basique consomme une unité de temps
(affectation d’une variable, comparaison,...)
10
Cours Complexité Algorithmique 10 / 36
Temps d’exécution
Règles:
Chaque instruction basique consomme une unité de temps
(affectation d’une variable, comparaison,...)
Chaque itération d’une boucle rajoute le nombre d’unités
de temps consommées dans le corps de cette boucle
10
Cours Complexité Algorithmique 10 / 36
Temps d’exécution
Règles:
Chaque instruction basique consomme une unité de temps
(affectation d’une variable, comparaison,...)
Chaque itération d’une boucle rajoute le nombre d’unités
de temps consommées dans le corps de cette boucle
Chaque appel de fonction rajoute le nombre d’unités de
temps consommées dans cette fonction
10
Cours Complexité Algorithmique 10 / 36
Temps d’exécution
Règles:
Chaque instruction basique consomme une unité de temps
(affectation d’une variable, comparaison,...)
Chaque itération d’une boucle rajoute le nombre d’unités
de temps consommées dans le corps de cette boucle
Chaque appel de fonction rajoute le nombre d’unités de temps
consommées dans cette fonction
Pour avoir le nombre d’opérations effectuées par l’algorithme, on
additionne le tout
10
Cours Complexité Algorithmique 10 / 36
Temps d’exécution
while (i <= n)
fact = fact * i;
i = i + 1;
return fact
12
Cours Complexité Algorithmique 12 / 36
Temps d’exécution
12
Cours Complexité Algorithmique 12 / 36
Temps d’exécution
int factorielle(n)
long deb=System.nanoTime();
fact = 1;
i = 2;
while (i <= n)
fact = fact * i;
i = i + 1;
long fin=System.nanoTime();
long temps=fin-deb;
System.out.println(temps);
return fact
13
Cours Complexité Algorithmique 13 / 36
Temps d’exécution
Problèmes
Temps exacte
depend de la puissance de la machine
depend de la nature des données(variables): si on change les données, le
temps change
Complexité algorithmique
16
Cours Complexité Algorithmique 16 / 36
Complexité algorithmique
16
Cours Complexité Algorithmique 16 / 36
Complexité algorithmique
Notations asymptotiques
Soit n la taille des données à traiter, on dit qu’une fonction f (n) est en O(g(n)) si :
f (n) est en O(g(n)) s’il existe un seuil à partir duquel la fonction f (.) est
toujours dominée par la fonction g(.), à une constante multiplicative fixée près ;
18
Cours Complexité Algorithmique 18 / 36
Complexité algorithmique
Notations asymptotiques
Soit n la taille des données à traiter, on dit qu’une fonction f (n) est en O(g(n)) si :
f (n) est en O(g(n)) s’il existe un seuil à partir duquel la fonction f (.) est
toujours dominée par la fonction g(.), à une constante multiplicative fixée près ;
Exemples: quelques cas où f (n) = O(g(n))
18
Cours Complexité Algorithmique 18 / 36
Complexité algorithmique
19
Cours Complexité Algorithmique 19 / 36
Complexité algorithmique
19
Cours Complexité Algorithmique 19 / 36
Complexité algorithmique
19
Cours Complexité Algorithmique 19 / 36
Complexité algorithmique
20
Cours Complexité Algorithmique 20 / 36
Complexité algorithmique
20
Cours Complexité Algorithmique 20 / 36
Complexité algorithmique
Règles de calcul
22
Cours Complexité Algorithmique 22 / 36
Complexité algorithmique
22
Cours Complexité Algorithmique 22 / 36
Complexité algorithmique
22
Cours Complexité Algorithmique 22 / 36
Complexité algorithmique
combinaison de complexité
combinaison de complexité
int factorielle(n)
fact = 1; O(1)
i = 2; O(1)
while (i <= n) O(n)
fact = fact * i; O(1)
i = i + 1; O(1)
return fact O(1)
26
Cours Complexité Algorithmique 26 / 36
Complexité algorithmique
int factorielle(n)
fact = 1; O(1)
i = 2; O(1)
while (i <= n) O(n)
fact = fact * i; O(1)
i = i + 1; O(1)
return fact O(1)
26
Cours Complexité Algorithmique 26 / 36
Complexité algorithmique
Classes de Complexité
Complexité Classe
O(1) constant
O(logn) logarithmique
O(n) linéaire
O(nlogn) sous-quadratique
O(n 2 ) quadratique
O(n 3 ) cubique
O(2 n ) exponentiel
O(n!) factorielle
Pour comparer deux algorithmes, il faut être capable de situer leur complexité
Une première distinction doit être faite entre les deux classes suivantes :
les algorithmes dits polynomiaux, dont la complexité est en O(n k )
pour un certain k
les algorithmes dits exponentiels, dont la complexité ne peut pas
être majorée par une fonction polynomiale
30
Cours Complexité Algorithmique 30 / 36
Complexité algorithmique
Exemple
si on peut résoudre le problème P 1 en résolvant le problème P 2, alors on a
directement un algorithme pour P 1 grâce à P 2
on a donc complexité(P 1) <= complexité(P 2)
on ne peut donc pas résoudre P 2 plus vite que P 1
30
Cours Complexité Algorithmique 30 / 36
Complexité algorithmique
31
Cours Complexité Algorithmique 31 / 36
Complexité algorithmique
31
Cours Complexité Algorithmique 31 / 36
Complexité algorithmique
Exemple de Problèmes
32
Cours Complexité Algorithmique 32 / 36
Complexité algorithmique
Exemple de Problèmes
32
Cours Complexité Algorithmique 32 / 36
Complexité algorithmique
Exemple de Problèmes
33
Cours Complexité Algorithmique 33 / 36
Complexité algorithmique
Exemple de Problèmes
Problème: partition
Donnèes : un ensemble S de nombres (répétitions autorisées) ;
QΣuestion : Σpeut-on séparer S en deux sous-ensembles A et B tels que
a∈A a = b∈B b
33
Cours Complexité Algorithmique 33 / 36
Complexité algorithmique
Exemple de Problèmes
Problème: partition
Donnèes : un ensemble S de nombres (répétitions autorisées) ;
QΣuestion : Σpeut-on séparer S en deux sous-ensembles A et B tels que
a∈A a = b∈B b
33
Cours Complexité Algorithmique 33 / 36
Complexité algorithmique
Exemple de Problèmes
Exemple de Problèmes
Exemple de Problèmes
36
Cours Complexité Algorithmique 36 / 36
Complexité algorithmique
Exemple de Problèmes