INTRODUCTION À L’ALGORITHMIQUE
Chargée de cours: Lélia Blin
Transparents:http://www-npa.lip6.fr/~blin/Enseignements.html
Email: lelia.blin@lip6.fr
EQUATION DE BASE
Programme = Structures de données + algorithmes
Niklaus Wirth (concepteur du langage Pascal) Le problème est de concevoir les structures de données de manière à ce que :
La mémoire utilisée soit minimale
STRUCTURE DE DONNÉES
Ordinateur = Système de Traitement de l’Information Unité de base = le bit (0/1)
1 octet = 8 bits Problème
l’information n’est pas manipulable au même niveau par l’homme et
par la machine
Une hiérarchie
réel entier
booléen caractère … Types primitifs
tableau
enregistrement, objet
listes, arbres Structures de
données abstraites
Types
structurés
Un ensemble structuré de données est construite par agrégation et hiérarchisation
de données ou structures de données plus primitives Définition récursive
Structure de données
Abu Ja Far Mohamed Ibn Al-rhowâ-rismî
Mathématicien, géographe, astrologue et astronome perse né vers 783 mort vers 850
Il est à l’origine des mots:
Algorithmique (latinisé)
Algèbre (dont il est considéré comme le père)
Notion d’Algorithme
Un algorithme est
la composition d’un ensemble fini d’étapes dont chacune est:
Définie de façon rigoureuse et non ambiguë
Effective (pouvant être réalisée en un temps fini)
Définition d’Algorithme
Calcul du PGCD de 2 entiers n et m
fonction pgcd(m : entier, n : entier) : entier var r : entier
début
r reçoit n
tant que r non nul faire
soit r, le reste de la division de n par m si r est non nul alors
n reçoit m m reçoit r fsi
ftq
Exemple d’Algorithme
SIMPLICITÉ & EFFICACITÉ
Notion d’algorithme plus générale que celle de programme 2 besoins (potentiellement) contradictoires:
Simplicité de l’algorithme
A comprendre
A mettre en œuvre
A mettre au point
Efficacité de l’algorithme
Somme des entiers de 1 à n
fonction somme(n : entier) : entier var som : entier
début
som = 0
pour i = 1 jusqu’à i = n faire som = som + i
fait
retourne som fin
Algorithme naïf (simple):
Somme des entiers de 1 à n
1 + 2 + … + (n-1) + n n + (n-1) + … + 2 + 1
(n+1) + (n+1) + … + (n+1) + (n+1) = n(n+1)
n(n+1) 2
Critères mathématiques
ITÉRATIF OU
RÉCURSIF
Définition récursivité
Un algorithme récursif est un algorithme qui s’appelle lui même
Exemple 1: Suite de Fibonacci
Fibonacci:
U
0= U
1= 1
Un = U
n-1+ U
n-2Solution intuitive (récursive) :
fonction fibo(n : entier) : entier début
si (n = 0) ou (n = 1) alors retourne 1
sinon retourne fibo(n-1) + fibo(n-2)
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
2 U1
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3
2 1
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3 U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3
2 1
U2
U1
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3 U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3
2 1
U2
1 U0
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3 U2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
3
2 1
2
1 1
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
5
3 2
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
U8
U7
U6
U5
U4
U3
U2 U1
U2
U3
U5
U1 U0
U2 U1
U1 U0
U4
U3
U2
U1 U0 U1
U2
U3
U1 U0
U2 U1
U1 U0 U4
U3
U2
U1 U0 U1
U2
U1 U0
U4
U3
U2
U1 U0 U1
U2
U1 U0 U6
U5
U4
U3
U2
U1 U0 U1
U2
U3
U1 U0
U2 U1
U1 U0
Exemple 1: Suite de Fibonacci
U0 = U1 = 1 Un = Un-1 + Un-2
34
21
13
8
5
3 2
3
8
2 1
5
3
2 1
2
3
1 1
2 1
1 1
5
3
2 1
2
1 1
5
3
2
1 1
1
2
1 1
13
8
5
3
2 1
2
3
1 1
2 1
1 1
Exemple 1: Suite de Fibonacci
Approche récursive: Simple
L’approche récursive est-elle efficace?
nombre d’appels récursifs 2 n
Méthode très redondante
Coûteux voire rédhibitoire
Exemple 1: Suite de Fibonacci
Solution itérative préférable
fonction fibo(n : entier) : entier var un, un_1, un_2, i : entier
début
un_1 = un_2 = 1
pour i = 2 jusqu’à i = n faire un = un_2 + un_1
un_2 = un_1 un_1 = un fait
retourne un
fin
Exemple 1: Suite de Fibonacci
Solution itérative préférable
fonction fibo(n : entier) : entier var un, un_1, un_2, i : entier
début
un_1 = un_2 = 1
pour i = 2 jusqu’à i = n faire un = un_2 + un_1
un_2 = un_1 un_1 = un fait
retourne un fin
i=2: u
n=2 u
2=1 u
1=2
i=3: u
n=3 u
2=2 u
1=1
i=3: u
n=5 u
2=3 u
1=2
i=4: u
n=8 u
2=5 u
1=3
i=5: u
n=13 u
2=8 u
1=5
i=6: u
n=21 u
2=13 u
1=8
i=7: u
n=34 u
2=21 u
1=13
Exemple 2: Les tours de Hanoï
Situation initiale
Situation finale
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A)
Next=6-D+A if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
n: Nombre d’anneaux D: Tour de Départ A: Tour d’Arrivée
Solution récursive
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
procédure Hanoi (n,D,A) { Affiche Hanoi(n,D,A) Next=6-D+A
if(n > 0) {
Hanoi(n-1,D,Next);
Affiche "Deplacement disque tour ",D," vers tour ",A;
Hanoi(n-1,Next,A);
} }
Exemple 2: Les tours de Hanoï
Approche récursive: Simple
L’approche récursive est-elle efficace?
nombre d’appels récursifs 2 n -1
où n est le nombre d’anneaux
Exemple 2: Les tours de Hanoï
Légende:
il s’agissait de moines dans un temple qui devaient déplacer 64 tours en or, à raison d’un mouvement par jour.
Quand ils auraient fini, ce serait la fin du monde.
Quand est prévu la fin du monde?
Cela demanderait donc 2
64– 1 jours,
soit en gros un milliard de milliard d’années !
EXPLOSION
COMBINATOIRE
Les petits ruisseaux font les grandes rivières
HISTOIRE DE L’EMPEREUR
8 2
42
5…
Nb de grains de riz
HISTOIRE DE L’EMPEREUR
8 2
42
5…
Σ i 2 i = 2 n+1 -1 = 2 64 –1
≈ 16.10 18 grains 1000 grains de riz
30kg
480.10 15 kg 480.10 12 T
Production mondiale 2009
Nb de grains de riz
LE VOYAGEUR DE COMMERCE
Le problème :
Soit un ensemble de n villes
Trouver le circuit le plus court
passant une fois et une seule par
LE VOYAGEUR DE COMMERCE
Solution naïve :
Tester toutes les combinaisons
Calculer le coût de chaque combinaison Conserver la meilleure
Coût ?
LE VOYAGEUR DE COMMERCE
Coût de la solution
Nombre de circuits : (n-1)!
Nombre d’additions pour chaque circuit : n-1
Nombre total d’additions : (n-1)*(n-1)!
LE VOYAGEUR DE COMMERCE
Nombre total d’additions : (n-1)*(n-1)!
2010 villes française de plus de 30.000 Habitants: 256 Supposons qu’il y en ait que 30 villes
265.10
34opérations
juin 2011 processeur le plus rapide 8,162 PétaFLOPS
soit 10
15opérations/seconde
3,24.10
18s = 102.739.726.027 années
ETUDE DE LA COMPLEXITÉ
LE VOYAGEUR DE COMMERCE - 2
Nombre total d’additions : (n-1)*(n-1)!
2010 villes française de plus de 30.000 Habitants:256 Supposons qu’il y en ait que 30 villes
6,8 l’âge de l’univers En conclusion
Exemple d’algorithme correct mais inutilisable
ETUDE DE LA
COMPLEXITÉ
ETUDE DE LA COMPLEXITÉ
OBJECTIF
Se donner des éléments théoriques d’appréciation, a priori, des performances des algorithmes
avoir un ordre de grandeur du temps d’exécution et
de l’espace mémoire utilisé par un algo
ETUDE DE LA COMPLEXITÉ
COMPLEXITÉS
On parlera de la
Complexité temporelle
et de la complexité spatiale
ETUDE DE LA COMPLEXITÉ
OBJECTIF
Se donner des éléments théoriques d’appréciation, a priori, des performances des algorithmes
s’assurer
que les performances de l’algorithme sont compatibles
avec les performances des machines comparer
2 algorithmes entre eux
OBJECTIF
Formuler des énoncés de la forme :
« Sur toute machine, et quel que soit le langage utilisé, l’algorithme A est meilleur que l’algorithme B pour des
données de grande taille. »
ETUDE DE LA COMPLEXITÉ
DÉFINITION
Etudier la complexité d’un algorithme, c’est
rechercher une fonction de n dont on est certain
qu’elle majore la durée d’exécution, lorsque n devient grand
meilleurs des cas d’exécution
pire des cas d’exécution
ETUDE DE LA COMPLEXITÉ
TEMPS D’EXÉCUTION
Temps d’accès aux variables (cases mémoires) en lecture/écriture : t a
Temps de calcul
opérations arithmétiques : t op comparaisons : t c
Exemple : c = a + b
accès à a et b en lecture, à c en écriture
ETUDE DE LA COMPLEXITÉ
MÉTHODE GÉNÉRALE
1. Choix des opérations à comptabiliser
2. Comptage du nombre d’opérations exécutées
ETUDE DE LA COMPLEXITÉ
OPÉRATION FONDAMENTALE
L’opération fondamentale est celle telle que pour tout
algorithme résolvant le problème, la complexité en sera une grandeur proportionnelle
Exemples
Recherche d’un élément dans un tableau -> comparaison
Recherche d’un élément sur un disque -> accès disque
ETUDE DE LA COMPLEXITÉ
OPÉRATION FONDAMENTALE
Une opération fondamentale peut être complexe
mais doit avoir une durée d’exécution indépendante des données
i, fact10 : entier fact10 = 1
pour i=0 jusqu’à 10 faire fact10 = fact10 * i
fait
Si plusieurs opérations fondamentales :
Décompte séparé
ETUDE DE LA COMPLEXITÉ
CALCUL DE COMPLEXITÉ
Pour calculer la complexité temporelle il faut évaluer le nombre de fois
où l’opération fondamentale est exécutée par l’algorithme
Examen du code
Varie en fonction des données sur lesquelles travaille
ETUDE DE LA COMPLEXITÉ
SÉQUENCES ET ALTERNATIVES
Soit X un morceau de programme
Soit P(X) le nb d’opérations correspondant à l’exécution de X Séquence : X
1; X
2P(X
1; X
2) = P(X
1) + P(X
2)
Alternative : si C alors X
1sinon X
2On ne sait pas a priori quel bloc d’instructions va être exécuté
P(si C alors X
1sinon X
2) ≤ P(C) + max(P(X
1), P(X
2))
ETUDE DE LA COMPLEXITÉ
BOUCLES
P(X) = Σ
iP(i)
i : incrément de la boucle
P(i) : nb d’opérations à la i
èmeitération
Pb = on ne connaît pas forcément le nb total d’itérations Boucles for : on connaît n
Boucles tant que ou répéter jusqu’à
Calculer une borne supérieure à partir de l’incrément
ETUDE DE LA COMPLEXITÉ
BOUCLES FOR
T(n) = C0 + C1 + n * (C2 + C3) = αn + β ≈ αn Complexité en O(n)
C0 i, r : entier C1 r = 1
C2 pour i = 1 jusqu’à n faire C3 r = r * i
C0 i, j, r : entier C1 r = 0
C2 pour i = 1 jusqu’à n faire
C3 pour j = 1 jusqu’à p faire
C4 r = r + tab[i, j]
ETUDE DE LA COMPLEXITÉ
ORDRE DE GRANDEUR
Pourquoi garder O(n
2) comme ordre de grandeur pour T(n) = an
2+ bn + g
Exemple:
Prenons n
2+ n + 1
si n=10 quelle est la contribution de n
2dans le résultat final?
si n=100
n 2
n 2 + n + 1 = 10 2
10 2 + 10 + 1 = 0, 90%
ETUDE DE LA COMPLEXITÉ
BOUCLES TANT QUE OU RÉPÉTER
Soit tab, un tableau de n entiers ordonnés par valeurs croissantes
Pb = recherche de la place d’un entier x à insérer
fonction indice(x : entier) : entier début
i : entier i = 0
tant que (i < n) et (tab[i] < x) faire
ETUDE DE LA COMPLEXITÉ
… EN FONCTION DES CAS
La complexité dépend des jeux d’essai Calcul de la complexité
Dans le meilleur des cas : Min A (n) Dans le pire des cas : Max A (n) En moyenne : Moy A (n)
On a toujours
Min A (n) ≤ Moy A (n) ≤ Max A (n)
ETUDE DE LA COMPLEXITÉ
… EN FONCTION DES CAS
Soit D
nl’ensemble des configurations possibles pour des données de taille n Soit coût
A(d), la complexité de l’algorithme A sur la configuration d ∈ D
nComplexité dans le meilleur des cas
Min
A(n) = min {coût
A(d) | d ∈ D
n} Complexité dans le pire des cas
Max
A(n) = max {coût
A(d) | d ∈ D
n}
ETUDE DE LA COMPLEXITÉ
… EN FONCTION DES CAS
Complexité en moyenne
MoyA(n) = Σ{p(d)*coûtA(d) | d ∈ Dn}
p(d), la probabilité d’avoir la configuration d Donne le comportement en général
Si les configurations sont équiprobables MoyA(n) = 1/|Dn|Σ{coûtA(d) | d ∈ Dn} Pb = définir Dn
On partitionne Dn en ensembles homogènes Dn,i
ETUDE DE LA COMPLEXITÉ
NOTATIONS
Soit T(n) le temps d’exécution d’un programme en fonction de la taille n
caractérisant le nombre d’éléments traités Grand O : majorant
Grand Ω : minorant
ETUDE DE LA COMPLEXITÉ
GRAND O
Formulation 1 :
On dit que T(n) est en O de f de n, noté abusivement O(f(n)), si T(n) est au plus égal à une constante multipliée par f(n), sauf peut-être pour quelques valeurs de n Formulation 2 :
T(n) est en O(f(n)) s’il existe un entier n
0et une constante c>0 tels que : ∀ n ≥ n
0, T(n) ≤ c.f(n)
interprétation
ETUDE DE LA COMPLEXITÉ
GRAND O
Interprétation
Fonction majorant T(n)
Indication sur les performances de l’algorithme dans le pire des cas, pour n grand
3.1 Notation asymptotique 41
(b) (c)
(a)
n n
n n
0n
0n
0f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))
f (n) f (n)
f (n)
cg(n) cg(n)
c
1g(n) c
2g(n)
Figure 3.1 Exemples de notations Q,O et . Dans chaque partie, la valeur de n0 est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire. (a) La notation Q borne une fonction entre des facteurs constants. On écrit f(n) = Q(g(n)) s’il existe des constantes posi- tives n0, c1 et c2 telles que, à droite de n0, la valeur de f(n) soit toujours comprise entre c1g(n) et c2g(n) inclus. (b) La notation O donne une borne supérieure pour une fonction à un facteur constant près. On écritf(n) =O(g(n))s’il existe des constantes positivesn0 etctelles que, à droite de n0, la valeur de f(n) soit toujours inférieure ou égale à cg(n). (c) La notation V donne une borne inférieure pour une fonction à un facteur constant près. On écrit f(n) = V(g(n)) s’il existe des constantes positivesn0 etc telles que, à droite den0, la valeur def(n)soit toujours supérieure ou égale à cg(n).
Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que
12n
2− 3n = Q(n
2). Pour ce faire, on doit déterminer des constantes positives c
1, c
2et n
0telles que
c
1n
2! 1
2 n
2− 3n ! c
2n
2pour tout n " n
0. En divisant par n
2, on obtient
c
1! 1 2 − 3
n ! c
2.
On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c
2" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c
1! 1/14. Donc, en prenant c
1= 1/14, c
2= 1/2 et n
0= 7, on peut vérifier que
12
n
2− 3n = Q(n
2). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction
12n
2− 3n ; une autre fonction appartenant à Q(n
2) exigerait
nonautoriséeestundélit
Lélia Blin 97 Université d’Evry
ETUDE DE LA COMPLEXITÉ
GRAND Ω
Formulation 1 :
On dit que T(n) est en Ω de f de n, noté abusivement Ω(f(n)), si T(n) est au moins égal à une constante multipliée par f(n), sauf peut-être pour quelques valeurs de n
Formulation 2 :
T(n) est en Ω(f(n)) s’il existe un entier n
0et une constante c>0 tels que :
∀ n ≥ n
0, T(n) ≥ c.f(n)
interprétation
ETUDE DE LA COMPLEXITÉ
GRAND Ω
Interprétation
Fonction minorant T(n)
Indication sur les performances de l’algorithme dans le meilleur des cas, pour n grand
3.1 Notation asymptotique 41
(b) (c)
(a)
n n
n n
0n
0n
0f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))
f (n) f (n)
f (n)
cg(n) cg(n)
c
1g(n) c
2g(n)
Figure 3.1 Exemples de notationsQ, O et . Dans chaque partie, la valeur de n0 est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire.(a)La notation Q borne une fonction entre des facteurs constants. On écritf(n) = Q(g(n)) s’il existe des constantes posi- tives n0, c1 et c2 telles que, à droite de n0, la valeur de f(n) soit toujours comprise entre c1g(n) et c2g(n) inclus. (b) La notation O donne une borne supérieure pour une fonction à un facteur constant près. On écritf(n) =O(g(n))s’il existe des constantes positivesn0etctelles que, à droite de n0, la valeur de f(n) soit toujours inférieure ou égale à cg(n). (c) La notation V donne une borne inférieure pour une fonction à un facteur constant près. On écrit f(n) = V(g(n)) s’il existe des constantes positivesn0etctelles que, à droite den0, la valeur def(n)soit toujours supérieure ou égale à cg(n).
Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que
12n
2− 3n = Q(n
2). Pour ce faire, on doit déterminer des constantes positives c
1, c
2et n
0telles que
c
1n
2! 1
2 n
2− 3n ! c
2n
2pour tout n " n
0. En divisant par n
2, on obtient
c
1! 1 2 − 3
n ! c
2.
On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c
2" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c
1! 1/14. Donc, en prenant c
1= 1/14, c
2= 1/2 et n
0= 7, on peut vérifier que
12
n
2− 3n = Q(n
2). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction
1n
2− 3n ; une autre fonction appartenant à Q(n
2) exigerait
nonautoriséeestundélit
Lélia Blin 99 Université d’Evry
ETUDE DE LA COMPLEXITÉ
GRAND Θ
Définition :
T(n) est en Θ(f(n)) s’il existe un entier n
0et deux constantes c
1et c
2positives tels que
∀ n ≥ n
0, c
1.f(n) ≤ T(n) ≤ c
2.f(n)
interprétation
Encadrement de T(n)
ETUDE DE LA COMPLEXITÉ
GRAND Θ
Interprétation
Encadrement de T(n)
Caractérise le fait que l’algorithme a des comportements
similaires quelles que soient les données 3.1 Notation asymptotique 41
(b) (c)
(a)
n n
n n
0n
0n
0f (n) = Q(g(n)) f (n) = O(g(n)) f (n) = V(g(n))
f (n) f (n)
f (n)
cg(n) cg(n)
c
1g(n) c
2g(n)
Figure 3.1
Exemples de notations
Q, Oet . Dans chaque partie, la valeur de
n0est la valeur mi- nimale possible ; n’importe quelle valeur supérieure ferait aussi l’affaire.
(a)La notation
Qborne une fonction entre des facteurs constants. On écrit
f(n) = Q(g(n))s’il existe des constantes posi- tives
n0,
c1et
c2telles que, à droite de
n0, la valeur de
f(n)soit toujours comprise entre
c1g(n)et
c2g(n)inclus.
(b)La notation
Odonne une borne supérieure pour une fonction à un facteur constant près. On écrit
f(n) = O(g(n))s’il existe des constantes positives
n0et
ctelles que, à droite de
n0, la valeur de
f(n)soit toujours inférieure ou égale à
cg(n). (c)La notation
Vdonne une borne inférieure pour une fonction à un facteur constant près. On écrit
f(n) = V(g(n))s’il existe des constantes positives
n0et
ctelles que, à droite de
n0, la valeur de
f(n)soit toujours supérieure ou égale à
cg(n).Au chapitre 2, nous avons défini de la manière informelle suivante la notation Q : on élimine les termes d’ordre inférieur et on ignore le coefficient du terme d’ordre supérieur. Justifions brièvement cette définition intuitive en utilisant la définition for- melle pour montrer que
12n
2− 3n = Q(n
2). Pour ce faire, on doit déterminer des constantes positives c
1, c
2et n
0telles que
c
1n
2! 1
2 n
2− 3n ! c
2n
2pour tout n " n
0. En divisant par n
2, on obtient
c
1! 1
2 − 3
n ! c
2.
On peut s’arranger pour que le membre droit de l’inégalité soit valide pour toute valeur de n " 1, et ce en choisissant c
2" 1/2. De même, on peut faire en sorte que le membre gauche de l’inégalité soit valide pour toute valeur de n " 7, en choisissant c
1! 1/14. Donc, en prenant c
1= 1/14, c
2= 1/2 et n
0= 7, on peut vérifier que
12
n
2− 3n = Q(n
2). D’autres choix sont bien entendu possibles pour les constantes ; l’important est qu’il existe au moins une possibilité. Notez que ces constantes dé- pendent de la fonction
12n
2− 3n ; une autre fonction appartenant à Q(n
2) exigerait
nonautoriséeestundélit
Lélia Blin 101 Université d’Evry
ETUDE DE LA COMPLEXITÉ
COMPLEXITÉS
O(1) O(log n)
O(n) O(n.log n)
O(n 2 ) O(n 3 ) O(2 n ) O(n!)
Constante Logarithmique
Linéaire n log n Quadratique
Cubique Exponentielle
Factorielle
ETUDE DE LA COMPLEXITÉ
REPRÉSENTATION GRAPHIQUE
12 16 20 24 28 32 36 40 44 48 52
n n log n
n2
e2