Vous êtes sur la page 1sur 67

ALGORITHME

COMPLEXITÉ
RÉCURSIVITÉ

Chapitre 1: CALCUL DE COMPLEXITÉ

Ghislain PANDRY
Chercheur, Traitement du signal et des images

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME
COMPLEXITÉ
RÉCURSIVITÉ

DÉFINITION EN TANT QUE SCIENCE : ALGORITHME


L'algorithmique est la discipline de l'informatique traitant de la
conception (programmation) et l'analyse d'algorithmes. Un
algorithme est une suite d'instructions qui décrit comment résoudre
un problème particulier en un temps ni.

DIFFÉRENCES ENTRE ALGORITHME ET PROGRAMME


Un programme est la réalisation (l'implémentation) d'un algorithme
au moyen d'un langage donné (sur une architecture donnée). Il
s'agit de la mise en ÷uvre du principe. Par exemple, lors de la
programmation on s'occupera parfois explicitement de la gestion de
la mémoire (allocation dynamique en C) qui est un problème
d'implémentation ignoré au niveau algorithmique.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME
COMPLEXITÉ
RÉCURSIVITÉ

QUALITÉ D'UN BON ALGORITHME


Un bon algorithme doit satisfaire les qualités suivantes :
Correct : Il faut que le programme exécute correctement les
tâches pour lesquelles il a été conçu ;
Complet : Il faut que le programme considère tous les cas
possibles et donne un résultat dans chaque cas ;
Ecace : Il faut que le programme exécute sa tâche avec
ecacité c'est à dire avec un coût minimal. Le coût
pour un ordinateur se mesure en termes de temps de
calcul et d'espace mémoire nécessaire.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME
COMPLEXITÉ
RÉCURSIVITÉ

DÉFINITION ACADÉMIQUE : ALGORITHME


Un algorithme est un ensemble d'opérations de calcul
élémentaires, organisées selon des règles précises dans le but de
résoudre un problème donné. Pour chaque donnée du problème,
l'algorithme retourne une réponse après un nombre ni
d'opérations.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME
COMPLEXITÉ
RÉCURSIVITÉ

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.

REMARQUE :Savoir résoudre un problème est une chose, le


résoudre ecacement en est une autre.

Figure  L'algorithmique au sein de la chaine de conception de logiciels

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME
COMPLEXITÉ
RÉCURSIVITÉ

Architecture

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

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.

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

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)

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

Évaluation de la rapidité d'un algorithme


La théorie de la complexité étudie l'ecacité des algorithmes.
L'ecacité d'un algorithme peut être évaluée par :
On ne mesure pas la durée en heure, minute, seconde. . . cela
impliquerait d'implémenter les algorithmes qu' on veut
comparer.
Ces mesures ne seraient pas pertinentes car le même
algorithme sera plus rapide sur une machine plus puissante.
Au lieu de ça, on utilise des unités de temps abstraite
proportionnelles au nombre d'opérations eectuées.
Au besoin, on pourra alors adapter ces quantités en fonction
de la machine sur laquelle l'algorithme s'exécute.

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

Calcul du temps d'exécution


Problèmes
Unités de temps abstraites :
Dépends des données.
Dépend de la nature des données : on ne sait pas toujours
combien de fois exactement on va exécuter une boucle.
De même lors d'un branchement conditionnel, le nombre de
comparaisons eectués n'est pas toujours le même.
Temps exacte :
Dépend de la puissance de la machine.
Dépend de la nature des données (variables) : si on change les
données, le temps change.
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

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 ).

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

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).

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

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 ;

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

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 ;

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

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

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

STRUCTURE CONDITIONNELLE

CAS FAVORABLE
T (n) = Tcondition (n)

CAS DEFAVORABLE
T (n) = Tcondition (n) + TI (n) 1

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

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

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

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

BOUCLE NON BORNÉE


TANTQUE : T (n) = ki= (Tconditioni (n) + TIi ) + Tcondition (n) ;
P
1

REPETER : T (n) = ki= (Tconditioni (n) + TIi (n)) ;


P
1

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 ?

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

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.

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

Complexité au meilleur cas


Dénition : C'est le plus petit nombre d'opérations qu'aura à
exécuter l'algorithme sur un jeu de données de taille
xée, ici à n. C'est une borne inférieure de la
complexité de l'algorithme sur un jeu de données de
taille n ;
Formulation : Tmin (n) = min c(d) ;
d∈Dn

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

Complexité au pire cas


Dénition : c'est le plus grand nombre d'opérations qu'aura à
exécuter l'algorithme sur un jeu de données de taille
xée, ici à n ;
Formulation : Tmax (n) = max c(d) ;
d∈Dn
Avantage : il s'agit d'un maximum, et l'algorithme nira donc
toujours avant d'avoir eectué Tmax (n)) opérations ;
Inconvénient : cette complexité peut ne pas reéter le
comportement  usuel  de l'algorithme. Le pire cas
ne peut se produire que très rarement, mais il n'est
pas rare que le cas moyen soit aussi mauvais que le
cas pire.

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

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.

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

Borne supérieure asymptotique


O(g (n)) = {f : N → N|∃n0 ≥ 0 et ∃c > 0 tels que
∀n ⩾ n0 , 0 ≤ f (n) ≤ c × g (n)
Si une fonction f ∈ O(g (n)) , on dit que g (n) est une borne
supérieure asymptotique pour f (n).
f = O(g ) : par abus de langage.
Ce qui signie que f ne croît pas plus vite que g ;
f est dominée asymptotiquement par g ;
g est un majorant presque partout de f .

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

Figure  Comportement asymptotique borne supérieure

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

Borne inférieure asymptotique


Ω(g (n)) = {f : N → N|∃n0 ≥ 0 et ∃c > 0 tels que
∀n ⩾ n0 , 0 ≤ c × g (n) ≤ f (n)
Si une fonction f ∈ Ω(g (n)) , on dit que g (n) est une borne
inférieure asymptotique pour f (n) ;
f = Ω(g ) : par abus de langage ;
Ce qui signie que f croît plus vite que g ;
f = Ω(g ) ⇔ g = O(f ) ;
g est majorée par f .

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

Borne asymptotique
Θ(g (n)) = {f : N → N| ∃n 0 ≥ 0 et ∃c, d > 0 /

∀n ⩾ n0 , d × g (n) ⩽ f (n) ⩽ c × g (n)}


Ce qui veut dire que chaque fonction est un majorant de
l'autre ou encore que les deux fonctions sont de même ordre
de grandeur asymptotique ;
f ∈ Θ(g ) = f ∈ O(g ) ∩ f ∈ Ω(g ) ⇔ f ∈ O(g ) ∩ g ∈ O(f ).

Figure  Comportement asymptotique borne exacte


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

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 ;

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

Classe de complexité
Quadratique (O(n )) : Parcourir un ensemble de données en
2

utilisant deux boucles imbriquées ;


Polynomiale (O(nk ), k ≥ 3) : Parcourir un ensemble de
données en utilisant k boucles imbriquées ;
Exponentielle (O(an )) : Générer tous les sous-ensembles
possibles d'un ensemble de données.

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

Classe de complexité

Figure  Courbe de comparaison de quelques classes

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

Classes de complexité

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

Optimalité
Un algorithme est dit  optimal  si sa complexité est la
complexité minimale parmi les algorithmes de sa classe.

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

EXERCICE 1 D'APPLICATION
Démontrer que :
1 n ∈ O(10− n )
2 5 3

2 25n − 19n + 13n ∈ O(n


4 3 2 4
)
3 2n+ ∈ O(2n )
100

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 :EXERCICE 1 D'APPLICATION


Pour la première relation, il sut donc de trouver deux entiers
strictement positifs c et n tels que n ≤ k 10− n , ∀n ≥ n .
0
2 5 3
0

Si l'on prend k = 10 et n = 1, il est évident que n ≤ 10


5
0
2 5

×10− n = n , ∀n ≥ n = 1, donc n ∈ O(10− n )


5 3 3
0
2 5 3

Pour la seconde relation, remarquons tout d'abord que


25n − 19n + 13n ≤ 25n + 19n + 13n ≤ (25 + 19 + 13)n ,
4 3 2 4 3 2 4

∀n ≥ 1. On en déduit que 25n − 19n + 13n ∈ O(n ).


4 3 2 4

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

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)

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

On a généralement deux types :


1 les algorithmes de tri internes (données en mémoire) ;
2 les algorithmes de tri externes (données dans un chier)
Les algorithmes de tri simples sont faciles à mettre en ÷uvre, mais
ont des performances médiocres. On peut citer : le Tri par
sélection, le Tri par insertion et le Tri à bulle.
Les algorithmes de tri sophistiqués sont plus délicats à mettre en
÷uvre, meilleures performances. On peut citer : Tri rapide, Tri par
tas , Tri fusion,...

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

TRI PAR INSERTION


Données : une séquence de n nombres, a , ..., an ;
1

Résultats : une permutation ai de la séquence d'entrée, /


ai ⩽ ai+ ∀i ;
′ ′
1

Principe : de manière répétée, on retire un nombre de la


séquence d'entrée et on l'insère à la bonne place dans
la séquence des nombres déjà triés.

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

Application tri par insertion

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

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

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

j= (tj − 1) + c j= (tj − 1) + (n − 1)c


n
c4 j= tj + c
2 5 2 6 2 7

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
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

Au meilleur cas : l'algorithme TRI-INSERTION est quand le


tableau est déjà trié. Dans ce cas tj = 1∀j
T (n) = nc + (n − 1)c + (n − 1)c + (n − 1)c + (n − 1)c =(c +
1 2 3 4 7 1

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).

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
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

Au pire cas : l'algorithme TRI-INSERTION est quand le tableau


est déjà trié dans l'ordre inverse. Dans ce cas tj = j∀j
Rappel : nj= j = n(n+ ) donc nj= j = n(n+ ) − 1 et
1 1
P P
1 2 2 2

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

T (n) peut ici être écrit sous la forme T (n) = an2 + bn + c , a, b et


c étant des constantes indépendantes des entrées, et T (n) est donc
une fonction quadratique de n donc en T ∈ O(n2 ).
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
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

j= (tj − 1) + c j= (tj − 1) + (n − 1)c


n
c4 j= tj + c
2 5 2 6 2 7

Au cas moyen : En moyenne, la moitié des éléments de A[1..j − 1]


sont inférieurs à A[j], et l'autre moitié sont supérieurs. Donc
tj = j/2. Si l'on reporte cette valeur dans l'équation dénissant
T (n), on obtient, comme dans le cas pire, une fonction quadratique
de n donc en T ∈ O(n ). 2

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

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.

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

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Récursivité simple ;
Récursivité multiple ;
Récursivité mutuelle ;
Récursivité imbriquée.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Équations de récurrences linéaires


C'est une équation dont chaque terme s'exprime comme
combinaison linéaire des k termes qui le précèdent plus une certaine
fonction de n. Son ordre est d'ordre k . Il faut bien sûr connaître les
k premiers termes.
un = β1 un−1 + β2 un−2 + ... + βk un−k + f (n)
Si k = 1, un = βun− P
+ f (n). Par itération et sommation on
1

trouve :un = β (u + ni= fβ(i)i )


n
0 1

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Équation de récurrence linéaire sans second membre


Une équation de récurrence est dite sans second membre si
f (n) = 0. un − β un− − β un− − ... − βk un−k = 0
1 1 2 2

A une telle équation, on peut associer un polynôme caractéristique :


P(x) = x k − β x k− − β x k− − ... − βk .
1
1
2
2

La résolution de ce polynôme nous donne m racines ri avec


(m ⩽ k ). La solution de l'équation de récurrence est ainsi donnée
par : un = φ (n)r n + φ (n)r n + ... + φm (n)rmn
1 1 2 2

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Diviser pour régner


Le principe algorithmique dit diviser pour régner consiste à :
diviser l'instance d'un problème en sous-instances,
traiter indépendamment ces sous-instances,
combiner les diérents résultats obtenus pour construire une
solution au problème initial.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Complexité

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

Ce principe algorithmique s'est avéré très ecace pour obtenir de


meilleures fonctions de complexité qu'avec une approche globale,
d'où sa popularité. On retrouve dans d'autres algorithmes
fondamentaux comme l'algorithme du TriFusion et du TriRapide
mais également dans l'algorithme de recherche par Dichotomie ou
encore la multiplication rapide avec l'algorithme de Karatsuba ou la
transformée de Fourier discrète.

Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ


ALGORITHME Types de récursivité
COMPLEXITÉ Détermination de la complexité
RÉCURSIVITÉ Diviser pour régner

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

Comment fonctionne la récursivité ?


Le principe est d'utiliser une pile, dite pile d'appel, sur laquelle on
empile les calculs en attente.
Tout appel à une fonction crée d'abord 2 mémoires :
une mémoire pour stocker l'argument, noté ici x ;
une mémoire pour stocker le résultat, noté ici y.
Si le calcul de y n'est pas encore possible, ce qui est le cas s'il
y a un appel récursif, le couple (x,y) est empilé. La pile
augmente tant qu'il y a des calculs en attente.
Dès qu'un calcul de y est possible, (x,y) est dépilé ; on
récupère ainsi y, et on utilise généralement sa valeur pour faire
le calcul qui est en attente au sommet de la pile.
Quand la pile est vide, le dernier y qui a été dépilé fournit le
résultat.
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

Q1 : Donnez son algo récursif ;


Q2 : Donnez sa complexité.
Ghislain PANDRY Chapitre 1: CALCUL DE COMPLEXITÉ

Vous aimerez peut-être aussi