0% ont trouvé ce document utile (0 vote)
0 vues75 pages

Complex It e

Le document traite de la complexité des algorithmes, en mettant l'accent sur l'efficacité temporelle et les ressources utilisées par les algorithmes. Il définit la complexité comme le nombre asymptotique d'opérations de base en fonction de la taille de l'entrée et introduit des notations asymptotiques comme O, Ω et Θ pour évaluer cette complexité. Le texte souligne l'importance de l'optimisation des algorithmes pour améliorer leur performance.

Transféré par

masky.chess
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues75 pages

Complex It e

Le document traite de la complexité des algorithmes, en mettant l'accent sur l'efficacité temporelle et les ressources utilisées par les algorithmes. Il définit la complexité comme le nombre asymptotique d'opérations de base en fonction de la taille de l'entrée et introduit des notations asymptotiques comme O, Ω et Θ pour évaluer cette complexité. Le texte souligne l'importance de l'optimisation des algorithmes pour améliorer leur performance.

Transféré par

masky.chess
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Complexité des algorithmes.

Mustapha JOHRI

CRMEF Marrakech-Sa
Département d'informatique
CPA Informatique
Marrakech

6 janvier 2021
Introduction

Introduction

Un algorithme utilise plusieurs ressources : le processeur pour exécuter


les instructions, la mémoire pour stocker les données et les résultats, la
bande passante pour envoyer et recevoir les données qui circulent dans un
réseau informatique, etc. Une qualité importante d'un algorithme est son
ecacité (ou sa complexité). C'est grâce à elle que l'on peut dénir ce
qu'est un  bon algorithme et comparer les diérents algorithmes
résolvant le même problème.

1/37

Complexité des algorithmes


Introduction

Introduction à la complexité des algorithmes

Les concepteurs d'algorithmes doivent consacrer beaucoup d'eorts à


l' ecacité.
Si un algorithme produit un résultat correct et s'il est simple à
implémenter et à corriger, il n'est pas toujours très utile s'il eectue un
temps non raisonnable pour se terminer ou s'il nécessite beaucoup
de mémoire qu'ore un ordinateur ou s'il entraîne des problèmes de
trac réseau, etc.

2/37

Complexité des algorithmes


Introduction

Introduction à la complexité des algorithmes

Les concepteurs d'algorithmes doivent consacrer beaucoup d'eorts à


l' ecacité.
Si un algorithme produit un résultat correct et s'il est simple à
implémenter et à corriger, il n'est pas toujours très utile s'il eectue un
temps non raisonnable pour se terminer ou s'il nécessite beaucoup
de mémoire qu'ore un ordinateur ou s'il entraîne des problèmes de
trac réseau, etc.
An d'étudier l'ecacité d'un algorithme, les informaticiens
demandent comment ses performances changent en fonction de la
taille du problème. Si l'on double le nombre de valeurs traitées par
l'algorithme, le temps d'exécution double-t-il aussi ? Est-ce qu'il
augmente par un facteur de 4 ? Augmente-t-il de façon exponentielle
de sorte qu'il faut soudainement des années, voir des cycles pour se
terminer ?

2/37

Complexité des algorithmes


Introduction

La théorie de la complexité algorithmique étudie les questions


concernant l'ecacité des algorithmes. Dans ce cours, on s'intéressera
uniquement à l'ecacité temporelle des algorithmes. La mesure
usuelle pour l'ecacité temporelle est la rapidité d'un algorithme,
c'est-`a-dire le temps que va prendre un algorithme pour produire son
résultat. Il s'agit de mesurer le temps d'exécution intrinsèque d'un
algorithme (qui ne dépend que de l'algorithme et pas de son
environnement : la conguration matérielle de l'ordinateur, le compilateur
utilisé, le système d'exploitation, etc).

3/37

Complexité des algorithmes


Introduction

La théorie de la complexité algorithmique étudie les questions


concernant l'ecacité des algorithmes. Dans ce cours, on s'intéressera
uniquement à l'ecacité temporelle des algorithmes. La mesure
usuelle pour l'ecacité temporelle est la rapidité d'un algorithme,
c'est-`a-dire le temps que va prendre un algorithme pour produire son
résultat. Il s'agit de mesurer le temps d'exécution intrinsèque d'un
algorithme (qui ne dépend que de l'algorithme et pas de son
environnement : la conguration matérielle de l'ordinateur, le compilateur
utilisé, le système d'exploitation, etc).

Dénition

On appelle complexité d'un algorithme le nombre asymptotique


d'opérations de base qu'il doit eectuer en fonction de la taille de l'entrée.
Cette complexité est indépendante de l'environnement où s'exécute
l'algorithme.

3/37

Complexité des algorithmes


Introduction

Introduction

Une optimisation qui fait diminuer le nombre asymptotique d'opérations de


base (et donc la complexité) doit être vue comme une amélioration de la
performance d'algorithme. La dénition précédente met en jeu deux notions
très importantes :

4/37

Complexité des algorithmes


Introduction

Introduction

Une optimisation qui fait diminuer le nombre asymptotique d'opérations de


base (et donc la complexité) doit être vue comme une amélioration de la
performance d'algorithme. La dénition précédente met en jeu deux notions
très importantes :

La taille de l'entrée : comment l'identier ?


Les opérations de base d'un algorithme : comment les identier et
comment les compter ?

4/37

Complexité des algorithmes


Introduction

Introduction

Une optimisation qui fait diminuer le nombre asymptotique d'opérations de


base (et donc la complexité) doit être vue comme une amélioration de la
performance d'algorithme. La dénition précédente met en jeu deux notions
très importantes :

La taille de l'entrée : comment l'identier ?


Les opérations de base d'un algorithme : comment les identier et
comment les compter ?

Remarque

Dans ce cours, on s'intéressera le plus souvent à la recherche d'une


estimation par excès (à une constante positive multiplicative près) du
cas le plus défavorable sur le sous-ensemble des instances de taille xée
n → complexité dans le pire des cas).

4/37

Complexité des algorithmes


Introduction

Notations asymptotiques

Par la suite, on ne considère que des fonctions dénies de N vers


R.

5/37

Complexité des algorithmes


Introduction

Notations asymptotiques

Par la suite, on ne considère que des fonctions dénies de N vers


[Link] de Big O (notation de Landau)
Dénition (Borne supérieure asymptotique)

Une fonction g(n) est une borne supérieure asymptotique pour une fonction
f (n), si et seulement si :

(∃C > 0)(∃n0 ≥ 0) : f (n) ≤ C.g(n); (∀n ≥ n0 )

On note : f (n) = O(g(n)).


Exemple (n + 1)2 = O(n2 ).

5/37

Complexité des algorithmes


Introduction

Notations asymptotiques

Dénition (Borne inférieure asymptotique)

Une fonction g(n) est une borne inférieure asymptotique pour une fonction
f (n), si et seulement si :

(∃C > 0)(∃n0 ≥ 0) : f (n) ≥ C.g(n); (∀n ≥ n0 )

On note : f (n) = Ω(g(n)).


Exemple (n + 1)2 = Ω(n2 ).

6/37

Complexité des algorithmes


Introduction

Notations asymptotiques

Dénition (Borne asymptotique)

Une fonction g(n) est une borne asymptotique pour une fonction f (n), si et
seulement si :

(∃C1 > 0)(∃C2 > 0)(∃n0 ≥ 0) : C1 .g(n) ≤ f (n) ≤ C2 .g(n); (∀n ≥ n0 )

On note : f (n) = Θ(g(n)).


Exemple (n + 1)2 = Θ(n2 ).

7/37

Complexité des algorithmes


Introduction

Notations asymptotique

Propositions

f (n) = Θ(g(n)) ⇐⇒ f (n) = O(g(n)) et f (n) = Ω(g(n)).


Si f (n) = O(g(n)) alors g(n) = Ω(f (n))

8/37

Complexité des algorithmes


Introduction

Notations asymptotique

Propositions

f (n) = Θ(g(n)) ⇐⇒ f (n) = O(g(n)) et f (n) = Ω(g(n)).


Si f (n) = O(g(n)) alors g(n) = Ω(f (n))

Remarque

Les écritures f (n) = O(g(n)), f (n) = Ω(g(n)) ou f (n) = Θ(g(n)) ne sont


pas des égalités au sens mathématique. Il s'agit d'abréviations d'écritures.

8/37

Complexité des algorithmes


Introduction

Notations asymptotique

Propositions

f (n) = Θ(g(n)) ⇐⇒ f (n) = O(g(n)) et f (n) = Ω(g(n)).


Si f (n) = O(g(n)) alors g(n) = Ω(f (n))

Remarque

Les écritures f (n) = O(g(n)), f (n) = Ω(g(n)) ou f (n) = Θ(g(n)) ne sont


pas des égalités au sens mathématique. Il s'agit d'abréviations d'écritures.

Par exemple, l'écriture f (n) = O(g(n)) signie que la fonction f (n)


appartienne à l'ensemble des fonctions qui sont asymptotiquement majorées
par la fonction g(n)), à une constante positive près.
On écrit f (n) = O(g(n)) pour dire que f (n) ∈ O(g(n)), sachant que :

O(g(n)) = {h(n)|(∃C > 0), (∃n0 ≥ 0) : h(n) ≤ C.g(n), (∀n ≥ n0 )}


8/37

Complexité des algorithmes


Introduction

Proposition

(Réexivité).
1 f (n) = O(f (n)).
2 f (n) = Ω(f (n)).
3 f (n) = Θ(f (n)).

9/37

Complexité des algorithmes


Introduction

Proposition

(Réexivité).
1 f (n) = O(f (n)).
2 f (n) = Ω(f (n)).
3 f (n) = Θ(f (n)).
(Transitivité).
1 f (n) = O(g(n)) et g(n) = O(h(n)) → f (n) = O(h(n)).
2 f (n) = Ω(g(n)) et g(n) = Ω(h(n)) → f (n) = Ω(h(n)).
3 f (n) = Θ(g(n)) et g(n) = Θ(h(n)) → f (n) = Θ(h(n)).

9/37

Complexité des algorithmes


Introduction

Proposition

(Réexivité).
1 f (n) = O(f (n)).
2 f (n) = Ω(f (n)).
3 f (n) = Θ(f (n)).
(Transitivité).
1 f (n) = O(g(n)) et g(n) = O(h(n)) → f (n) = O(h(n)).
2 f (n) = Ω(g(n)) et g(n) = Ω(h(n)) → f (n) = Ω(h(n)).
3 f (n) = Θ(g(n)) et g(n) = Θ(h(n)) → f (n) = Θ(h(n)).
(Symétrie)
1 f (n) = Θ(g(n)) ⇐⇒ g(n) = Θ(f (n))

9/37

Complexité des algorithmes


Introduction

Proposition

(Réexivité).
1 f (n) = O(f (n)).
2 f (n) = Ω(f (n)).
3 f (n) = Θ(f (n)).
(Transitivité).
1 f (n) = O(g(n)) et g(n) = O(h(n)) → f (n) = O(h(n)).
2 f (n) = Ω(g(n)) et g(n) = Ω(h(n)) → f (n) = Ω(h(n)).
3 f (n) = Θ(g(n)) et g(n) = Θ(h(n)) → f (n) = Θ(h(n)).
(Symétrie)
1 f (n) = Θ(g(n)) ⇐⇒ g(n) = Θ(f (n))
(Symétrie transposée)
1 f (n) = O(g(n)) ⇐⇒ g(n) = Ω(f (n))

9/37

Complexité des algorithmes


Introduction

Notations asymptotiques

(Fonctions classiques).

Parties entières : bnc = Θ(n) et dne = Θ(n).


Polynômes (asymptotiquement positifs) :
d
X
P (n) = ai ni = ad nd + . . . + a0 = Θ(nd )
i=0

Exponentielles : limn→∞ ( annb ) = 0 ⇐⇒ Toute fonction exponentielle


dont la base est strictement plus grande que 1 croit plus vite que toute
fonction polynomiale.

10/37

Complexité des algorithmes


Introduction

Notations asymptotiques

(Fonctions classiques).

Parties entières : bnc = Θ(n) et dne = Θ(n).


Polynômes (asymptotiquement positifs) :
d
X
P (n) = ai ni = ad nd + . . . + a0 = Θ(nd )
i=0

Exponentielles : limn→∞ ( annb ) = 0 ⇐⇒ Toute fonction exponentielle


dont la base est strictement plus grande que 1 croit plus vite que toute
fonction polynomiale.

Logarithmes : limn→∞ ( lognba(n) ) = 0 ⇐⇒ Toute fonction polynomiale


croit plus vite que toute fonction poly-logarithmique.

Factorielles : n! = 2πn( ne )n (1 + Θ(1/n)) (Formule de Stirling).

10/37

Complexité des algorithmes


Introduction

Théorème maître

(Récurrences de partition)

Soeint a>0 et b≥2 (souvent des entiers). Une récurrence de partition est
une équation récurrente ayant la forme suivante :
(
Θ(1), si n = 1
T (n) =
aT (n/b) + f (n) si n > 1

11/37

Complexité des algorithmes


Introduction

Théorème maître

(Récurrences de partition)

Soeint a>0 et b≥2 (souvent des entiers). Une récurrence de partition est
une équation récurrente ayant la forme suivante :
(
Θ(1), si n = 1
T (n) =
aT (n/b) + f (n) si n > 1

(Théorème fondamental, ou Master theorem).

Soit (
Θ(1), si n = 1
T (n) =
aT (n/b) + Θ(nd ) si n>1

1 Si d > logb (a), alors T (n) = Θ(nd ).


2 Si d = logb (a), alors T (n) = Θ(nd logb (n))
3 Si d logb (a), alors T (n) = Θ(nlogb (a) ).
11/37
Preuve : Devoir libre
Complexité des algorithmes
Introduction

Exemples

T (n) = 8T (n/2) + 5n2 ⇐⇒ T (n) = Θ(n3 ).


Car a = 8, b = 2, d = 2 et logb (a) = 3 > d.

12/37

Complexité des algorithmes


Introduction

Exemples

T (n) = 8T (n/2) + 5n2 ⇐⇒ T (n) = Θ(n3 ).


Car a = 8, b = 2, d = 2 et logb (a) = 3 > d.

T (n) = 4T (n/2) + n2 ⇐⇒ T (n) = Θ(n2 log2 (n)).

12/37

Complexité des algorithmes


Introduction

Exemples

T (n) = 8T (n/2) + 5n2 ⇐⇒ T (n) = Θ(n3 ).


Car a = 8, b = 2, d = 2 et logb (a) = 3 > d.

T (n) = 4T (n/2) + n2 ⇐⇒ T (n) = Θ(n2 log2 (n)).


T (n) = T (n/2) + 3n2 ⇐⇒ T (n) = Θ(n2 ).

12/37

Complexité des algorithmes


Introduction

Analyse de la complexité des algorithmes

Analyse de la complexité des algorithmes


Soit un problème P pour lequel on connaît un algorithme A (qui se termine
et est correct) pour le résoudre. Il prend en entrée une donnée valide d, et
produit un résultat en sortie A(d) en utilisant certaines ressources. Une
façon naturelle pour mesurer la complexité d'un algorithme est de la
considérer pour les entrées d d'une certaine taille xe, disons n. Nous
notons cet ensemble par :

Dn = {I ∈ P | size(d) = n, ∀ d ∈ I}

13/37

Complexité des algorithmes


Introduction

Analyse de la complexité des algorithmes

Analyse de la complexité des algorithmes


Soit un problème P pour lequel on connaît un algorithme A (qui se termine
et est correct) pour le résoudre. Il prend en entrée une donnée valide d, et
produit un résultat en sortie A(d) en utilisant certaines ressources. Une
façon naturelle pour mesurer la complexité d'un algorithme est de la
considérer pour les entrées d d'une certaine taille xe, disons n. Nous
notons cet ensemble par :

Dn = {I ∈ P | size(d) = n, ∀ d ∈ I}

Il faut alors dénir une mesure de taille sur les données. Cette mesure
doit reéter la quantité d'information contenue dans une donnée d. Il
sera très commode de comparer des algorithmes traitant ce problème selon
cette mesure de taille.

13/37

Complexité des algorithmes


Introduction

Exemples

Pour l'addition de deux nombres, la taille peut être le nombre de


chires des nombres.
Pour le cas de la recherche ou de tri, la taille peut être le nombre
des éléments du tableau.
Pour le cas du produit de matrices, la taille peut être la dimension
des matrices.

parcours d'un graphe, la taille peut être le nombre de


Pour le
sommets ou nombre d'arcs dans le graphe.

14/37

Complexité des algorithmes


Introduction

Opérations fondamentales

Pour tout algorithme traitant un problème donné, on peut toujours mettre


opérations dites de base (ou fondamentales)
en évidence une ou plusieurs
proportionelle au
au sens où l'ecacité (temporelle) de l'algorithme soit
nombre de ces opérations. Il est donc naturel de mesurer la complexité
d'un algorithme en considérant le nombre de ces opérations de base.

15/37

Complexité des algorithmes


Introduction

Opérations fondamentales

Pour tout algorithme traitant un problème donné, on peut toujours mettre


opérations dites de base (ou fondamentales)
en évidence une ou plusieurs
proportionelle au
au sens où l'ecacité (temporelle) de l'algorithme soit
nombre de ces opérations. Il est donc naturel de mesurer la complexité
d'un algorithme en considérant le nombre de ces opérations de base.

Il faut donc qu'étant donnée une entrée d, on sache clairement associer à


l'algorithme A sur l'entrée d, la valeur de cette mesure, notée µ(A, d). La
fonction µ(A, d) dépend de A, mais aussi de l'entrée d. La qualité d'un
algorithme A n'est donc pas un critère absolu, mais une fonction
quantitative µ(A, d) dénie de Dn vers N.

15/37

Complexité des algorithmes


Introduction

Exemples

Pour la recherche d'un élément dans un tableau : µ(A, d) = nombre


de comparaisons entre cet élément et les éléments du tableau.
Pour la recherche d'un élément sur un disque : µ(A, d) = nombre
d'accès à la mémoire de masse.
Pour le tri interne d'un tableau : µ(A, d)= nombre de comparaisons
entre les éléments du tableau.

µ(A, d) = nombre d'additions et de


Pour multiplier deux matrices :
multiplications entre les coecients des matrices.

16/37

Complexité des algorithmes


Introduction

Quelques règles de mesure de coût

Quelques règles de mesure de coût


Après avoir déterminé les opérations fondamentales (OF ) d'un algorithme,
il faut de compter le nombre des OF de chaque type. Notons par N OF (X),
le nombre des OF d'une construction algorithmique X. Voici quelques
règles pour compter le N OF d'un algorithme :

17/37

Complexité des algorithmes


Introduction

Quelques règles de mesure de coût

Quelques règles de mesure de coût


Après avoir déterminé les opérations fondamentales (OF ) d'un algorithme,
il faut de compter le nombre des OF de chaque type. Notons par N OF (X),
le nombre des OF d'une construction algorithmique X. Voici quelques
règles pour compter le N OF d'un algorithme :

Lorsque les OF de base se trouvent dans une séquence d'instructions,


leurs nombres s'ajoutent.

Pour une conditionnelle :


NOF(IF (Cond) THEN I1 ELSE I2) ≤ NOF(Cond) +
max(NOF(I1),NOF(I2)).
P
Pour une boucle, le N OF dans une boucle est j N OF (Ij ), où j est
l'incrément de la boucle et N OF (Ij ) est le N OF dans la j − eme
itération.

Pour les appels de procédures récursives, le calcul des N OF donne en


général lieu à la résolution de relations de récurrence.
17/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

18/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

L'algorithme 1 échange deux entiers. L'OF est l'aectation et le NOF de


l'algorithme est 3 → l'algorithme est de complexité O(1).

18/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

19/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

L'algorithme 2 calcule la somme des n premiers entiers. L'OF est l'addition


et le NOF de l'algorithme est n ⇐⇒ la complexité de l'algorithme est alors
O(n).
19/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

20/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

L'algorithme 4 calcule le nombre de chires d'un entier n. L'OF est l'ajout


de 1. La complexité T (n) de l'algorithme vérie :
(
0, si n < 10
T (n) = n
T ( 10 ) + 1, sinon

D'après le théorème maître, on a

T (n) = Θ(log10 (n)) 20/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

21/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

L'algorithme 5 teste si le nombre entier n est premier. L'OF est le test de la


divisibilité de n par d. Soit T (n) le NOF de l'algorithme.

Si n < 2, alors T (n) = 0.


Lorsque n ≥ 2, il y a deux cas : 21/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité

1 Si n est premier, l'algorithme testera pour la divisibilité les nombres de


2 jusqu'`a n/2. Donc T (n) = O((n/2 − 2) + 1) = O(n/2 − 1).
2 Si n n'est pas premier, l'algorithme testera pour la divisibilité les
nombres de 2 jusqu'à d, où d est le plus petit diviseur de n. Donc,
T (n) = O((d − 2) + 1) = O((d − 1)).
Par conséquent, T (n) ≤ O(n/2 − 1) ≤ O(n), ∀ n ≥ 0.
La complexité de l'algorithme est alors O(n).

22/37

Complexité des algorithmes


Introduction

Exemples de calcul de complexité


La complexité de l'algorithme est alors O( n).

23/37

Complexité des algorithmes


Introduction

Exercice

Donner la complexité de l'algorithme suivant :

24/37

Complexité des algorithmes


Introduction

Exercice

Donner la complexité de l'algorithme suivant :

Pour l'algorithme 7, les OF sont les additions et les multiplications. On


s'intéresse à leur nombre. Il est clair que :

N OF (algo) = N OF (boucle1) + N OF (boucle2) 24/37

Complexité des algorithmes


Introduction

Exercice

La 1-ère boucle s'eectue n fois, et chaque itération exécute une seule


addition. Donc, N OF (boucle1) = n.
La 2-ème boucle contient une boucle (sur j) imbriquée dans une autre
boucle (sur i). La boucle interne sur j s'eectue i fois, et chacune de ses
itérations exécute une seule addition et une seule multiplication. Donc,
N OF (boucle sur j) = [Link] boucle externe
Pn sur i s'eectue n2fois. Par
n
suite, N OF (boucle2) = i=1 (2i) = 2 i=1 i = n(n + 1) = n + n.
Finalement, N OF (algo) = n + (n2 + n) = n2 + 2n.
La complexité de l'algorithme machin1 est alors O(n2 ).

25/37

Complexité des algorithmes


Introduction

Exercice

Donner la complexité de l'algorithme suivant :

26/37

Complexité des algorithmes


Introduction

Exercice

Donner la complexité de l'algorithme suivant :

Pour l'algorithme machin2, les OF sont les additions et les multiplications.


Remarquons qu'il s'agit d'un algorithme récursif. Soit T (n) le NOF de
l'algorithme.
26/37

Complexité des algorithmes


Introduction

Exercice

Si n = 0, l'algorithme s'arrête et retourne une valeur simple. C'est une


tâche en O(1).
Si n ≥ 1, l'algorithme exécute une boucle, suivie d'un appel récursif
avec l'argument n/2 et d'une addition.

Nous avons : T (n) = N OF (boucle) + T (n/2) + 1.


La boucle s'eectue n fois, et chaque itération exécute une addition et
une multiplication. Par suite, N OF (boucle) = 2n.
Finalement, T (n) = T (n/2) + (2n + 1) = T (n/2) + O(n).
Il s'agit d'une récurrence de partition, avec a = 1, b = 2 et d = 1.
Comme, logb ((a) = 0 < d, alors d'après le théorème fondamentale :

T (n) = O(nd ) = O(n).

27/37

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

Pour certains algorithmes, la complexité ne dépend que de la taille des


données. Mais la plupart du temps la complexité varie aussi, pour une
taille xée des données, en fonction de la conguration de la donnée.

28/37

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

Pour certains algorithmes, la complexité ne dépend que de la taille des


données. Mais la plupart du temps la complexité varie aussi, pour une
taille xée des données, en fonction de la conguration de la donnée.

Soit A un algorithme qui résout un problème P. L'ensemble des données d


valides (les instances) pour A et de taille n sera noté par Dn . On notera
µ(A, d) le coût en temps de calcul de l'algorithme A lorsqu'il traite la
donnée d. Soit p(d) la probabilité que l'on ait la donnée d en entrée de
l'algorithme. Il y a trois types de complexités :

28/37

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

Pour certains algorithmes, la complexité ne dépend que de la taille des


données. Mais la plupart du temps la complexité varie aussi, pour une
taille xée des données, en fonction de la conguration de la donnée.

Soit A un algorithme qui résout un problème P. L'ensemble des données d


valides (les instances) pour A et de taille n sera noté par Dn . On notera
µ(A, d) le coût en temps de calcul de l'algorithme A lorsqu'il traite la
donnée d. Soit p(d) la probabilité que l'on ait la donnée d en entrée de
l'algorithme. Il y a trois types de complexités :
1 La complexité dans le meilleur des cas :
M INA (n) = min{µ(A, d)| d ∈ Dn }

28/37

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

Pour certains algorithmes, la complexité ne dépend que de la taille des


données. Mais la plupart du temps la complexité varie aussi, pour une
taille xée des données, en fonction de la conguration de la donnée.

Soit A un algorithme qui résout un problème P. L'ensemble des données d


valides (les instances) pour A et de taille n sera noté par Dn . On notera
µ(A, d) le coût en temps de calcul de l'algorithme A lorsqu'il traite la
donnée d. Soit p(d) la probabilité que l'on ait la donnée d en entrée de
l'algorithme. Il y a trois types de complexités :
1 La complexité dans le meilleur des cas :
M INA (n) = min{µ(A, d)| d ∈ Dn }

2 La complexité dans le pire des cas :


M AXA (n) = max{µ(A, d)| d ∈ Dn }

28/37

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

Pour certains algorithmes, la complexité ne dépend que de la taille des


données. Mais la plupart du temps la complexité varie aussi, pour une
taille xée des données, en fonction de la conguration de la donnée.

Soit A un algorithme qui résout un problème P. L'ensemble des données d


valides (les instances) pour A et de taille n sera noté par Dn . On notera
µ(A, d) le coût en temps de calcul de l'algorithme A lorsqu'il traite la
donnée d. Soit p(d) la probabilité que l'on ait la donnée d en entrée de
l'algorithme. Il y a trois types de complexités :
1 La complexité dans le meilleur des cas :
M INA (n) = min{µ(A, d)| d ∈ Dn }

2 La complexité dans le pire des cas :


M AXA (n) = max{µ(A, d)| d ∈ Dn }

3 La complexité en moyenne :
X
M OYA (n) = p(d) × µ(A, d)
28/37
d∈Dn

Complexité des algorithmes


Introduction

Types de complexités d'un algorithmes

1 La complexité dans le meilleur des cas donne une borne inférieure du


temps d'exécution. Elle se formule en terme de Ω(f (n)).
2 La complexité dans le pire des cas donne une borne supérieure du
temps d'exécution. C'est la complexité la plus utilisée. Elle se formule
en terme de O(f (n)).
3 La complexité en moyenne permet de savoir quel comportement
attendu en général de l'algorithme. Elle est souvent plus dicile à
calculer. Elle se formule en terme de Θ(f (n)).

29/37

Complexité des algorithmes


Introduction

Classe des complexités

Les classes de complexités usuelles :


Algorithmes constants : O(1).
Algorithmes logarithmiques : O(log(n)).
Algorithmes linéaires : O(n).
Algorithmes quasi-linéaires : O(n log(n)).
2
Algorithmes quadratiques : O(n ).
d
Algorithmes polynomiaux : O(n ).
n
Algorithmes exponentiels : O(a ), avec a > 1.
Algorithmes factoriels : O(n!).

30/37

Complexité des algorithmes


Introduction

Classe des complexités

Les classes de complexités usuelles :


Algorithmes constants : O(1).
Algorithmes logarithmiques : O(log(n)).
Algorithmes linéaires : O(n).
Algorithmes quasi-linéaires : O(n log(n)).
2
Algorithmes quadratiques : O(n ).
d
Algorithmes polynomiaux : O(n ).
n
Algorithmes exponentiels : O(a ), avec a > 1.
Algorithmes factoriels : O(n!).

Remarque

O(1) ⊆ O(log(n)) ⊆ O(n) ⊆ O(n log(n)) ⊆ O(n2 ) ⊆ O(nd ) ⊆ O(an ) ⊆ O(n!)

Pour certains problèmes, il n'existe pas d'algorithmes polynomiaux pour les


résoudre → problèmes NP-Complets.
Les algorithmes exponentiels ou factoriels sont de très mauvais algorithmes.
Ils sont inecaces en pratique. 30/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Résolution d'équations homogènes à coecients constants


Rappelons qu'une équation linéaire à coecients constants et homogène est
de la forme suivante :

ck T (n + k) + ck−1 T (n + k − 1) + . . . + c0 T (n) = 0 (∗∗)

T (n0 ) = d0 , . . . T (n0 + k − 1) = dk−1 .

31/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Résolution d'équations homogènes à coecients constants


Rappelons qu'une équation linéaire à coecients constants et homogène est
de la forme suivante :

ck T (n + k) + ck−1 T (n + k − 1) + . . . + c0 T (n) = 0 (∗∗)

T (n0 ) = d0 , . . . T (n0 + k − 1) = dk−1 .

Dénition

L'équation caractéristique de la relation (**) correspond à l'équation


polynomiale suivante :

ck rk + ck−1 rk−1 + . . . + c0 = 0

31/37

Complexité des algorithmes


Introduction

Récurrence linéaire

Théorème

La solution générale de l'équation (**) est de la forme suivante :

l mi −1
X X
rin aij nj

T (n) =
i=1 j=0

32/37

Complexité des algorithmes


Introduction

Récurrence linéaire

Théorème

La solution générale de l'équation (**) est de la forme suivante :

l mi −1
X X
rin aij nj

T (n) =
i=1 j=0

le paramètre l≤k désigne le nombre de racines distinctes de l'équation


caractéristique correspondante.

le paramètre ri désigne une racine de l'équation caractéristique.

le paramètre mi désigne la multiplicité de la racine ri .


les coecients aij sont des constantes qui sont déterminées à partir des
conditions initiales.

32/37

Complexité des algorithmes


Introduction

Exemple

Résoudre l'équation suivante :

T (n + 3) − 7T (n + 2) + 16T (n + 1) − 12T (n) = 0, ∀n ≥ 3


T (0) = 0, T (1) = 1, T (2) = 2.

33/37

Complexité des algorithmes


Introduction

Exemple

Résoudre l'équation suivante :

T (n + 3) − 7T (n + 2) + 16T (n + 1) − 12T (n) = 0, ∀n ≥ 3


T (0) = 0, T (1) = 1, T (2) = 2.

L'équation caractéristique de cette relation est :

r3 − 7r2 + 16r − 12 = 0
Les racines de cette équation sont

r1 = 3 ; racine simple,

r2 = 2 ; racine double.

Par conséquent, la solution générale

T (n) = a1 r1n + (a2 + a3 n)r2n


Autrement dit T (n) = a1 3n + (a2 + a3 n)2n
La solution nale est alors

T (n) = −2.3n + 2n+1 + 3n2n−1 33/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Résolution d'équations non homogènes à coecients constants

34/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Résolution d'équations non homogènes à coecients constants


Rappelons qu'une équation linéaire à coecients constants et homogène est
de la forme suivante :

ck T (n + k) + ck−1 T (n + k − 1) + . . . + c0 T (n) = g(n) (∗∗)

T (n0 ) = d0 , . . . T (n0 + k − 1) = dk−1 .

34/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Résolution d'équations non homogènes à coecients constants


Rappelons qu'une équation linéaire à coecients constants et homogène est
de la forme suivante :

ck T (n + k) + ck−1 T (n + k − 1) + . . . + c0 T (n) = g(n) (∗∗)

T (n0 ) = d0 , . . . T (n0 + k − 1) = dk−1 .


Le principe de résolution, adopté dans cette section, consiste à éliminer
d'abord la fonction g(n), et ensuite résoudre l'équation homogène ainsi
trouvée à l'aide de la méthode discutée précédemment.

34/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Une technique permettant d'éliminer plusieurs types de fonctions g(n),


d'une manière systématique, est l'utilisation de l'opérateur E (Opérateur
d'avancement).

Dénition

35/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Une technique permettant d'éliminer plusieurs types de fonctions g(n),


d'une manière systématique, est l'utilisation de l'opérateur E (Opérateur
d'avancement).

Dénition

Étant donnée une suite de nombres entiers, f (n), l'opérateur d'avancement


E est déni comme suit :

f (n) = c (une constante) → E(f (n)) = c

f (n) 6= constante → E(f (n)) = f (n + 1).

35/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Une technique permettant d'éliminer plusieurs types de fonctions g(n),


d'une manière systématique, est l'utilisation de l'opérateur E (Opérateur
d'avancement).

Dénition

Étant donnée une suite de nombres entiers, f (n), l'opérateur d'avancement


E est déni comme suit :

f (n) = c (une constante) → E(f (n)) = c

f (n) 6= constante → E(f (n)) = f (n + 1).

La multiplication et l'addition d'opérateurs sont dénies comme suit :

(E1E2)f (n) = E1(E2(f (n))

(E1 + E2)f (n) = E1(f (n)) + E2(f (n))


Exemple : (E − 2)2n = E(2n ) − 2(2n ) = 2n+1 − 2n+1 = 0
35/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Proposition

Si X annule f alors X annule E(f )

Si X annule f et g alors X annule f (+/−) g


Si X annule f alors X annule αf, ∀α ∈ C∗
Si X annule f et Y annule g alors XY annule f (+/−) g

36/37

Complexité des algorithmes


Introduction

Résolution des équations récurrentes

Proposition

Si X annule f alors X annule E(f )

Si X annule f et g alors X annule f (+/−) g


Si X annule f alors X annule αf, ∀α ∈ C∗
Si X annule f et Y annule g alors XY annule f (+/−) g

Fonction Annulateur
α E−1
αan E−a
αan + βbn (a 6= b) (E − a)(E − b)
Pk n
i=1 αi ai Πki=1 (E − ai )
αn + β (E − 1)2
(αn + β)an (E − a)2
( di=0 αi ni )an (E − a)d+1
P

36/37

Complexité des algorithmes


Introduction

Exercices

Exercice

Résoudre les récurrences suivantes :

T (n) = 2T (n − 1) + 1, avec T (0) = 0


T (n) = T (n − 1) + T (n − 2) + 1,
T (n) = T (n − 1) + 2T (n − 2) + 2n + n2

37/37

Complexité des algorithmes


Introduction

Exercices

Exercice

Résoudre les récurrences suivantes :

T (n) = 2T (n − 1) + 1, avec T (0) = 0


T (n) = T (n − 1) + T (n − 2) + 1,
T (n) = T (n − 1) + 2T (n − 2) + 2n + n2

Corrigé

T (n) = 2n − 1, en eet
T (n) = 2T (n − 1) + 1 → (E − 2)T (n) = 1 → (E − 2)(E − 1)T (n) = 0,
n n
donc T (n) = a.2 + b.1 or T (0) = 0, → a = −b

T (n) = O(φn ), avec φ= 1+ 5
2
T (n) = O(n2n )

37/37

Complexité des algorithmes

Vous aimerez peut-être aussi