Vous êtes sur la page 1sur 20

Département Génie Informatique

2ème Année «Années


LE LANGAGE C Préparatoires Intégrés»
2022/2023

q Pr. BAHASSINE Said


q Pr. CHERGUI Adil
q Pr. AZMI Mohamed
said.bahassine@ensam-casa.ma
Département Génie Informatique

L’ANALYSE DE LACOMPLEXITÉ DES ALGORITHMES Partie 7

Objectifs de la séance :
• Comprendre la notion de complexité pour étudier l’efficacité des
programmes

q Pr. BAHASSINE Said


q Pr. CHERGUI Adil
q Pr. AZMI Mohamed
LA COMPLEXITÉ
Préambule & introduction

“In almost every computation a great variety of arrangements for the succession of the
processes is possible, and various considerations must influence the selection amongst
them for the purposes of a Calculating Engine. One essential object is to choose that
arrangement which shall tend to reduce to a minimum the time necessary for Ada Lovelace, de son nom
complet Augusta Ada King,
completing the calculation.” comtesse de Lovelace, née
Ada Lovelace (1815-1852) - Notes on the Sketch of The Analytical Engine. le 10 décembre 1815 à
Londres et morte le 27
Lors de l’exécution d’un algorithme, l’ordinateur effectue une succession d’opérations très simples novembre 1852 dans la
comme comparer des nombres, des affectations, des opérations arithmétiques par exemple. même ville, c’est une
pionnière de la science
On mesure alors la complexité en temps d’un algorithme comme le nombre de ces opérations informatique. Elle est
élémentaires. principalement connue
Objectifs des calculs de complexité : pour avoir réalisé le
premier véritable
- pouvoir prévoir le temps d'exécution d'un algorithme. programme informatique,
- pouvoir comparer deux algorithmes réalisant le même traitement. lors de son travail sur un
ancêtre de l'ordinateur : la
machine analytique de
Charles Babbage.
PROGRAMMATION 3
EN LANGAGEC
LA COMPLEXITÉ
Types de complexité

La complexité d'un algorithme peut être évalué Méthode 2 :


en temps et en espace : // échange des valeurs de deux variables x
- complexité en temps : évaluation du temps et y
entier x, y;
d'exécution de l'algorithme.
... // initialisation de x et y
- complexité en espace : évaluation de l'espace
x <- y-x;
mémoire occupé par l'exécution de
y <- y-x;
l'algorithme. x <- y+x;
Exemple : échange de deux valeurs entières
- la première méthode utilise une variable
Méthode 1:
// échange des valeurs de deux variables x supplémentaire et réalise 3 affectations.
et y - la deuxième méthode n'utilise que les deux
entier x, y, z;
... // initialisation de x et y variables dont on veut échanger les valeurs,
z <- x; mais réalise 3 affectations et 3 opérations.
x <- y;
y <- z;

PROGRAMMATION 4
EN LANGAGEC
LA COMPLEXITÉ
Types de complexité

La conjoncture du programmeur (non officielle)


de l'espace-temps informatique :

« pour gagner du temps de calcul, on doit utiliser


davantage d'espace mémoire, et vice-versa. »

On s'intéresse actuellement essentiellement à la


complexité en temps (ce qui n'était pas
forcément le cas quand les mémoires coutaient
cher)

PROGRAMMATION 5
EN LANGAGEC
LA COMPLEXITÉ
Paramètre de la complexité Exemples

On procède alors comme suite. Exemple 1: Pour un programme qui calcul de la


• On identifie le paramètre de complexité sous factorielle de n :
forme d’une grandeur n pour quantifier les Le paramètre de complexité est la valeur de n.
données d’entrée. Exemple 2: Multiplication de deux entiers n et m.
• On calcule les performances seulement en
Paramètre de complexité?
fonction de n.
• On évalue le nombre d’opérations Exemple 3: Multiplier tous les éléments d'un
élémentaires. tableau d'entiers par un entier donné.
Définition Paramètre de complexité?
Le paramètre de la complexité est la donnée du Exemple 4: Somme de 2 matrices.
traitement qui va (le plus) faire varier le temps
Paramètre de complexité?
d'exécution de l'algorithme.
Exemple 5: Puissance 3 d’une matrice carrée.
Paramètre de complexité?
Exemple 6: Recherche dichotomique dans un
tableau.
Paramètre de complexité?
PROGRAMMATION 6
EN LANGAGEC
LA COMPLEXITÉ
Les opérations prisent en compte Le nombre d’opérations

L’analyse de complexité consiste à calculer le Une fois le paramètre de complexité n est


nombre d'instructions le plus souvent des types déterminé, et que les instructions sur lesquelles
suivants : doit se faire l’analyse sont bien choisies.
- Affectation : na Il faut calculer ensuite le nombre de ces
- Comparaison : nc opérations T(n) en fonction de n.
- Opération élémentaire: no
Chaque type d’instructions élémentaires prend Remarque:
un temps d’exécution particulier, en fonction des En général, le T(n) a une forme d’expression bien
types de données, de l’environnement particulière qui est composée exclusivement par
d’exécution. des fonctions de références.
L’étude de complexité peut agir sur tous ces 1, n, n2 ,n3 … Polynômiales
types instructions ou sur un type en particulier ln(n) Logarithmiques
lorsqu’on veut simplifier l’analyse (selon l’analyse an Exponentiels
demandée et le rôle de l’algorithme)
Certaines instructions sont négligées, telles que
le coût des déclarations et des retours.

PROGRAMMATION 7
EN LANGAGEC
LA COMPLEXITÉ
Exemples de calcul Exemple :

L’analyse de complexité peut être effectué sur un Le calcul de la somme suivante:


$
ensemble d’instructions susceptibles de faire
une tâches bien particulières, donc que cela soit ! 𝑖%
sous forme de programme principal ou de !"#
fonction, l’analyse de complexité est
particulièrement liés à une tâche; en dit par
exemple étudier la complexité de la recherche
séquentiel, la recherche dichotomique, le calcul
du pgcd…
Dans les exemples qui vont suivre, nous allons
étudié la complexité de certaines tâches sous
forme de fonction pour éviter de confondre les
instructions d’introduction ou l’affichage des
données.

PROGRAMMATION 8
EN LANGAGEC
LA COMPLEXITÉ
Exemple de calcul :1

Tâche : Paramètre de complexité :


Le calcul de la somme suivante: La valeur de n.
$
Type d’instructions :
! 𝑖%
!"#
Opérations arithmétiques
Programme :

T(n)= 3*n
+1
+2 n fois

3 x n

PROGRAMMATION 9
EN LANGAGEC
Exemple de calcul : 2
Tâche : Paramètre de complexité :
Le calcul de la somme suivante: La valeur de n.
$ ! !
Type d’instructions :
!(2× !(4 + ! 𝑖 + 𝑗 − 𝑘 ))
!"& '"& ("'
Opérations arithmétiques
Programme :
∑/,-.( ∑,0-. 1 + 3 × 𝑖 − 𝑗 + 1 + 3 + 3)=∑/,-1(3∑,0-.(4× 𝑖 − 𝑗 +
3)4 + 3)
∑/,-1 ∑,0-. 4× 𝑖 − 𝑗 + 3 + 3 =∑/,-1 4×𝑖×𝑖 + 3×𝑖 − 4× ∑,0-. 𝑗 + 3
= ∑/,-1 4×𝑖×𝑖 + 3×𝑖 − 2×𝑖× 𝑖 + 1 +3
+1 =∑/,-1 4×𝑖 2 + 3×𝑖 − 2×𝑖 2 − 2×𝑖 + 3 = ∑/,-1 2×𝑖 2 + 2×𝑖 + 3 =
2/ /31 2/31
2× ∑/,-1 𝑖 2 + 2× ∑/,-1 𝑖 + ∑/,-1 3 = + 𝑛 𝑛 + 1 + 3𝑛 =
+1 9 : 9 9
4
(2/ 32/)(2/31) (5/ 32/ 35/ 32/) 2/:
+ 𝑛2 + 𝑛 + 3𝑛 = + 𝑛2 + 4𝑛 = + 𝑛2 +
4 4 6
i+1 fois
n fois

/
+1 + 𝑛2 + 4𝑛
i - j fois

6
+3 𝟐𝒏𝟑 𝟏𝟑𝒏
= + 𝟐𝒏𝟐 +
+2 𝟑 𝟑

+2

PROGRAMMATION 10
EN LANGAGEC
Exemple de calcul : 2
Tâche : Paramètre de complexité :
Le calcul de la somme suivante: La valeur de n.
$ ! !
Type d’instructions :
!(2× !(4 + ! 𝑖 + 𝑗 − 𝑘 ))
!"& '"& ("'
Opérations arithmétiques
Programme :

+1
𝟐𝒏𝟑 𝟏𝟑𝒏
𝑻(𝒏) = + 𝟐𝒏𝟐 +
+1 𝟑 𝟑
i+1 fois
n fois

+1
i - j fois

+3
+2
+2

PROGRAMMATION 11
EN LANGAGEC
Exemple de calcul : 3
Tâche : Paramètre de complexité :
Le calcul du nombre de chiffres d’un entier n: La valeur de n.
Type d’instructions :
Programme :
Opérations arithmétiques

𝑻 𝒏 = 𝑳𝒐𝒈 𝒏 − 𝟏 ∗ 𝟐
+1 𝒍𝒏(𝒏) 𝟐
= 𝟐× − 𝟐=FG 𝟏𝟎 𝒍𝒏(𝒏) − 𝟐
𝒍𝒏(𝟏𝟎)
+1

PROGRAMMATION 12
EN LANGAGEC
Exemple de calcul : 4
Tâche : Paramètre de complexité :
Recherche d’un élément dans un tableau de La taille du tableau n.
taille n:
Type d’instructions :
Programme : Opérations logiques et comparaisons

Mais la position de x varie dans le tableau !!


è On ne sait pas exactement combien de fois
+3 cette boucle vas se répéter !!
è On ne peut pas calculer exactement le
nombre d’opérations !!!

PROGRAMMATION 13
EN LANGAGEC
LA COMPLEXITÉ
Le complexité au pire, complexité au mieux, complexité moyenne

Lorsque, pour une valeur donnée du paramètre


le plus souvent, on utilise la complexité
au pire,
de complexité, le temps d'exécution varie selon
les données d'entrée, on peut distinguer : Dans l’exemple précédant :
La complexité au pire : temps d'exécution Complexité au pire (x n'est pas dans le tableau)
maximum, dans le cas le plus défavorable. Donc :
La complexité au mieux : temps d'exécution 𝑇HI J!KL n = 3×(𝑛 + 1).
minimum, dans le cas le plus favorable (en
Complexité au mieux (x est dans la première case
pratique, cette complexité n'est pas très utile).
du tableau) Donc :
La complexité moyenne : temps d'exécution
dans un cas médian, ou moyenne des temps 𝑇HI M!LIN n = 3.
d'exécution. Complexité moyenne(si x peut se trouver
Remarque : équiprobablement dans tous les cases du tableau
Normalement La complexité moyenne est la le calcul sera facile) Donc :
mieux adapté pour l’analyse des performances 𝑇MOPL$$L n = (𝑇HI J!KL n + 𝑇HI M!LIN n )/2
d’un programme, Mais La complexité moyenne 3×(𝑛 + 2)
n’est pas toujours facile à calculer, et l’objectif =
2
principale est de donner des approximation pour Mais Ce n’est pas toujours le cas
borner le temps d'exécution..
PROGRAMMATION 14
EN LANGAGEC
.
LA COMPLEXITÉ
Comportement asymptotique des fonctions de référence

Le but de cette partie va être de comparer les complexités calculées avec des fonctions de
référence (puissance, logarithme, exponentielle, etc.). Il faudra préalablement introduire quelques
notations classiques des études de fonctions.

Les définitions qui vont suivre permettent de comparer le comportement à l'infini de deux
fonctions définies sur N. Plus précisément, il s'agit de critères pour affirmer qu'une fonction en
domine une autre, ou si elles sont du même ordre de grandeur, voir même équivalente.
Tous cela pour permettre de lier le T(n) avec l’une des fonctions de références.

PROGRAMMATION 15
EN LANGAGEC
LA COMPLEXITÉ
La notion du grand O (the big oh)

cela signifie qu'à partir d'un certain rang la fonction f est majorée par une constante fois la
fonction g. Il s'agit donc d'une situation de domination de la fonction f par la fonction g.

PROGRAMMATION 16
EN LANGAGEC
LA COMPLEXITÉ
Notion de grand Ω (the big omega)

Cette fois-ci, à partir d'un certain rang la fonction f est minorée par une constante fois la fonction
g. Il s'agit donc d'une situation de domination de la fonction g par la fonction f.

PROGRAMMATION 17
EN LANGAGEC
LA COMPLEXITÉ
Notion de grand Θ (the big theta)

Cette situation combine les deux précédentes, à partir d'un certain rang la fonction f est encadrée
par des multiples de la fonction g. Cela signifie que les fonctions f et g sont du même ordre de
grandeur.

PROGRAMMATION 18
EN LANGAGEC
LA COMPLEXITÉ
Classes de complexité Tableau

Les complexités algorithmiques que nous allons


calculer vont dorénavant être exprimées comme
des grand Thêta Θ de fonctions de références.
Cela va nous permettre de les classer.
𝟏 < 𝒍𝒏 𝒏 < 𝒏 < 𝒍𝒏 𝒏 𝒏 < 𝒏𝟐 < 𝒍𝒏 𝒏 𝒏𝟐 < 𝒏𝟑 < ⋯ < 𝒂𝒏
< 𝒏𝒏
Des algorithmes appartenant à une même classe
seront alors considérés comme de complexité
équivalente. Cela signifiera que l'on considèrera
qu'ils ont la même efficacité.
Le tableau suivant récapitule quelque
complexités de référence :

PROGRAMMATION 19
EN LANGAGEC
LA COMPLEXITÉ
Revenant au exemples
Exemple 1: Pour un programme qui calcul de la
factorielle de n :
La complexité est linéaire
Exemple 2: Multiplication de deux entiers n et m.
La complexité est constante
Exemple 3: Multiplier tous les éléments d'un
tableau d'entiers par un entier donné.
La complexité est linéaire
Exemple 4: Somme de 2 matrices.
La complexité est quadratique
Exemple 5: Puissance 3 d’une matrice carrée.
La complexité est cubique
Exemple 6: Recherche dichotomique dans un
tableau.
La complexité est logarithmique
PROGRAMMATION 20
EN LANGAGEC

Vous aimerez peut-être aussi