Académique Documents
Professionnel Documents
Culture Documents
COMPLEXITÉ
RÉCURSIVITÉ
Ghislain PANDRY
Chercheur, Traitement du signal et des images
PROBLÉMATIQUE DE L'ALGORITHME
1 Trouver une méthode M de résolution (exacte ou approchée)
du problème P ;
2 Trouver une méthode ecace i.e choisir parmi les méthodes
Mi la plus ecace.
Architecture
Théorie de la complexité
La théorie de la complexité est une branche de l'informatique
théorique, elle cherche à calculer, formellement, la complexité
algorithmique nécessaire pour résoudre un problème P au moyen de
l'exécution d'un algorithme A. La théorie de la complexité vise à
répondre aux besoins d'ecacité des algorithmes :
Classication les problèmes selon leur diculté ;
Classication les algorithmes selon leur ecacité ;
Comparaison les algorithmes résolvant un même problème an
de faire un choix sans devoir les implémenter.
Objectif
La théorie de la complexité étudie l'ecacité des algorithmes.
L'ecacité d'un algorithme peut être évaluée par :
Rapidité (en terme de temps d'exécution)
Consommation de ressources (espace de stockage, mémoire
utilisée)
DÉFINITION 1 : COMPLEXITÉ
La complexité d'un algorithme est la mesure du nombre
d'opérations fondamentales qu'il eectue sur un jeu de données. La
complexité est exprimée comme une fonction de la taille du jeu de
données.
DÉFINITION 2 : COMPLEXITÉ
La complexité algorithmique vise à quantier deux grandeurs
physiques que sont : le temps d'exécution (T ) et l'espace
mémoire (M ), dans le but de comparer entre eux diérents
algorithmes qui résolvent le même problème (P ).
Temps d'exécution (T )
Calcul de T : c'est évaluer le nombre d'opérations élémentaires
que l'algorithme doit eectuer pour mener à bien un
calcul en fonction de la taille des données d'entrée ;
Hypothèses : les opérations élémentaires sont à égalité de
coût (c ) ;
on a une donnée, dont la taille est
nécessairement un entier naturel (n).
Opération élémentaire
Opération élémentaire = aectations, comparaisons, opérations
arithmétiques.
Quelques exemples :
Recherche dans un tableau : accès, comparaison ;
Tri dans un tableau, une liste et un chier : comparaison,
déplacements ;
Produit scalaire : multiplication ;
Multiplication des matrices réelles : multiplication et addition ;
Calcul PGCD : division, modulo ;
Taille de donnée
Quelques exemples :
Recherche dans un tableau : taille du tableau ;
Tri dans un tableau : taille du tableau ;
Produit scalaire : dimension ;
Multiplication des matrices réelles : dimension des matrices ;
Calcul PGCD : taille des nombres ;
T : N → R+
m
X
n 7→ TIi (n)
Ghislain PANDRY i= 1
Chapitre 1: CALCUL DE COMPLEXITÉ
Temps d'exécution
ALGORITHME Structures de contrôle
COMPLEXITÉ Éléments de complexité
RÉCURSIVITÉ Notation de landau
Algorithme de tri
Exercice 1
Écrire un algorithme qui demande un nombre de départ,
P et qui
calcule la somme des entiers jusqu'à ce nombre. S = j=n
j= j 1
RÉSOLUTION
T (n) = TI (n) + TI (n) + TI (n) = 2 + TI (n)
1 2 3 2
STRUCTURE CONDITIONNELLE
CAS FAVORABLE
T (n) = Tcondition (n)
CAS DEFAVORABLE
T (n) = Tcondition (n) + TI (n) 1
STRUCTURE CONDITIONNELLE
CAS FAVORABLE
T (n) = Tcondition (n) + min(TI (n), TI (n))
1 2
CAS DÉFAVORABLE
T (n) = Tcondition (n) + max(TI (n), TI (n))
1 2
STRUCTURE ITÉRATIVE
BOUCLE BORNÉE
une initialisation ;
boucle : incrémentation, critère d'arrêt et I 2
k
T (n) = 1 + (2 + TI (n)) ≃ kTI (n)
X
2 2
i=j
Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ
Temps d'exécution
ALGORITHME Structures de contrôle
COMPLEXITÉ Éléments de complexité
RÉCURSIVITÉ Notation de landau
Algorithme de tri
TRAVAUX DIRIGES 1
Exercice 1 : Soit A, B, C ∈ Mn,n .
1-Donner le pseudo-code de l'addition de deux matrices.
ci,j = ai,j + bi,j ∀i, ∀j .
2-Donner
P le pseudo-code de la multiplication de deux matrices.
ci,j = nk=i ai,k + bk,j ∀i, ∀j .
3-Donner leurs complexités.
Exercice 2 : Soient a et b deux entiers positifs. Écrire un
algorithme itératif permettant de calculer a × b en utilisant
l'addition. Combien coûte votre algorithme en termes d'additions ?
Types de complexité
Complexité au meilleur cas ;
Complexité au pire cas ;
Complexité moyenne.
On notera :
Dn :ensemble des données de taille n ;
c(d) : coût de l'algorithme sur la donnée d.
Complexité moyenne
Dénition : c'est la moyenne des complexités de l'algorithme sur
des jeux de données de taille n ;
Formulation : Tmoy = p(d)c(d) avec : p(d) = |Dn | 1
P
d∈Dn P
c(d)
équiprobabilité Tmoy = d∈D|Dn n |
Avantage : reète le comportement "général" de l'algorithme si
les cas extrêmes sont rares ou si la complexité varie
peu en fonction des données ;
Inconvénient : en pratique, la complexité sur un jeu de données
particulier peut être nettement plus importante que la
complexité en moyenne, dans ce cas la complexité en
moyenne ne donnera pas une bonne indication du
comportement de l'algorithme.
Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ
Temps d'exécution
ALGORITHME Structures de contrôle
COMPLEXITÉ Éléments de complexité
RÉCURSIVITÉ Notation de landau
Algorithme de tri
REMARQUE
Valeur exacte de T (n) n'est pas l'objectif nal ;
Connaissance d'un ordre de grandeur de l'algo et son évolution
en fonction de n.
Borne asymptotique
Θ(g (n)) = {f : N → N| ∃n 0 ≥ 0 et ∃c, d > 0 /
Classe de complexité
Constante (O(1)) : Accéder au 1er élément d'un ensemble de
données ;
Logarithmique (O(log (n)) : Couper un ensemble de données
en 2 parties égales, puis couper ces moitiés en 2 parties égales ;
Linéaire (O(n)) : Parcourir un ensemble de données ;
Quasi-linéaire (O(nlog (n)) : Couper répétitivement un
ensemble de données en deux et combiner les solutions
partielles pour calculer la solution générale ;
Classe de complexité
Quadratique (O(n )) : Parcourir un ensemble de données en
2
Classe de complexité
Classes de complexité
Optimalité
Un algorithme est dit optimal si sa complexité est la
complexité minimale parmi les algorithmes de sa classe.
EXERCICE 1 D'APPLICATION
Démontrer que :
1 n ∈ O(10− n )
2 5 3
EXERCICE 2 D'APPLICATION
Donner les relations d'inclusion entre les ensembles
suivants :O(nlogn), O(2n), O(logn), O(1), O(n ), O(n 2 3
)etO(n)
ai ⩽ ai+ ∀i ;
′ ′
1
Simulation :
http://lwh.free.fr/pages/algo/tri/tri_insertion.html.
EXERCICE 2 : Donnez la complexité au meilleur cas, au pire cas
et en moyenne.
Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ
Temps d'exécution
ALGORITHME Structures de contrôle
COMPLEXITÉ Éléments de complexité
RÉCURSIVITÉ Notation de landau
Algorithme de tri
CORRECTION
I1 c1 n
I2 c2 n−1
I3 c3 n−1
Pn
I4 c4 t
Pn j=2 j
I5 c5 (tj − 1)
Pj= 2
j=2 (tj − 1)
n
I6 c6
I7 c7 n−1
CORRECTION
Le temps d'exécution total de l'algorithme est alors la somme des
coûts
Pnélémentaires
Pn: T (n) = nc +P 1 (n − 1)c + (n − 1)c +
2 3
c4 j=2
tj + c5 j=2
(tj − 1) + c j= (tj − 1) + (n − 1)c
n
6 2 7
c2 + c3 + c4 + c7 )n − (c2 + c3 + c4 + c7 )
T (n) peut ici être écrit sous la forme T (n) = an + b , a et b étant
des constantes indépendantes des entrées, et T (n) est donc une
fonction linéaire de n donc en T ∈ O(n).
CORRECTION
Le temps d'exécution total de l'algorithme est alors la somme des
coûts
PnélémentairesPn: T (n) = nc +P (n − 1)c + (n − 1)c +
1 2 3
c4 j= t
2j + c 5 j= (tj2
− 1) + c j= (tj − 1) + (n − 1)c
n
6 2 7
j= (j − 1) =
Pn n(n− ) 1
2 2
T (n) =
nc1 +(n− 1)c2 +(n− 1)c3 +( n(n+ 2
1)
− 1)c4 +c5 ( n(n−
2
1)
)+c6 ( n(n−
2
1)
)+
(n − 1)c7 = 2 (c4 + c5 + c6 )+ 2 (2c1 + 2c2 + 2c3 + c4 − c5 − c6 − c7 )
2
n n
CORRECTION
Le temps d'exécution total de l'algorithme est alors la somme des
coûts
PnélémentairesPn: T (n) = nc +P1 (n − 1)c + (n − 1)c +
2 3
TRI A BULLE
Principe : Le tri à bulle consiste à parcourir le tableau, par
exemple de gauche à droite, en comparant les éléments côte à côte
et en les permutant s'ils ne sont pas dans le bon ordre. Au cours
d'une passe du tableau, les plus grands éléments remontent de
proche en proche vers la droite comme des bulles vers la surface.
DÉFINITION
Un algorithme est dit récursif lorsqu'il s'appelle lui-même dans sa
propre dénition i.e le nom de la fonction (ou procédure) apparait
dans son propre algorithme.
Critère : Respecter la contrainte de terminaison. Il existe deux
contrainte de terminaison :
1 existence d'un ou plusieurs cas de base où
l'algorithme est directement eectif ;
2 assurance qu'il n'y aura qu'un nombre ni
d'appels récursifs avant de déboucher sur un cas
de base.
Récursivité simple ;
Récursivité multiple ;
Récursivité mutuelle ;
Récursivité imbriquée.
Récursivité simple
Exercice : Écrire un algo qui permet de calculer la puissance d'un
nombre. Soit x ∈ R et n ∈ N.
1 si n = 0
n
x =
x.x n−1 si n ≥ 1
Récursivité multiple
On a une récursivité multiple lorsqu'on un algo dans sa dénition
faire à plus d'un appel récursif.
Exercice : Écrire un algo qui permet de calculer les coecients du
triangle de Pascal.
1 si p = 0 ou p = n
Cnp = p
Cn− 1
p−1
+ Cn− 1
sinon
Récursivité mutuelle
Elle est dite mutuelle ou croisée quand un algo A appelle un autre
algo B qui déclenche un appel récursif à A. Donc A et B dépendent
l'un de l'autre.
si n = 0
vrai
pair (n) =
impair (n − 1) sinon
si n = 0
faux
impair (n) =
pair (n − 1) sinon
Récursivité imbriquée
Lorsqu'un sous-programme récursif dont l'appel à lui même contient
un autre appel à lui même, on parle de récursivité imbriquée.
n − 10 si n > 100
f (n) =
f (f (n + 11)) sinon
Principes
Les algorithmes qui s'appuient sur ce principe sont souvent récursifs
et opèrent sur des instances de plus en plus petites jusqu'à ce que
la taille de l'instance à traiter rende la résolution du problème
simple voire triviale.
Complexité
Exemples
La recherche dichotomique fait partie des premiers algorithmes
étudiés de ce type. Notons que l'algorithme d'addition étudié en
classe primaire peut également être classé dans cette catégorie bien
qu'il soit itératif. Les nombres sont segmentés en chires sur
lesquels l'opération d'addition est élémentaire puisqu'elle consiste à
eectuer une simple recherche en table, la propagation de la
retenue éventuelle combine les additions des sous-instances pour
obtenir le résultat.
Avantages
L'avantage principal de la récursivité est la simplicité de
programmation. Pour écrire un programme récursif, il sut de :
trouver comment réduire le problème de taille n à un ou
plusieurs problèmes de taille plus petite ;
traduire simplement la relation trouvée ;
vérier la terminaison de l'algorithme.
Limites
la multiplication des mémoires allouées au stockage des
résultats en attente, qui peut devenir rédhibitoire ;
le nombre de calculs eectués, souvent bien plus grand qu'en
programmation itérative.
Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ
ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner
TRAVAUX DIRIGES
Exercice 1 :
1 si n = 0
n! =
n × (n − 1)! sinon
Q1 : Donnez son algo récursif ;
Q2 : Donnez sa complexité.
Exercice 2 :
1 si n = 0
FIB(n) = 1 si n = 1
FIB(n − 1) + FIB(n − 2) sinon