Vous êtes sur la page 1sur 39

Algorithmique, structures de données

et complexité
GLSI1
Plan du cours

1. Introduction à la complexité des algorithmes


2. Types abstraits de données
3. Listes chaînées
4. Piles et files
5. Arbres
Introduction à la complexité
des algorithmes
Notion de complexité algorithmique
 L’efficacité ou la performance d’un algorithme dépend de
sa capacité à minimiser certains critères très importants:
 Le temps d’exécution.
 L’espace mémoire utilisé.
 La bande passante du réseau.

 La complexité d’un algorithme est la mesure du nombre


d’opérations fondamentales qu’il effectue sur un jeu de
données.
 Elle est exprimée comme une fonction de la taille de données.
Notion de complexité algorithmique
 La complexité algorithmique permet de s’informer sur
l’efficacité d’un algorithme indépendamment de
l’environnement d’implémentation
 machine physique,
 système d’exploitation,
 compilateurs de programmes,
 etc.

 La complexité d'un algorithme mesure la quantité de


ressources qu'il exige (mémoire ou temps-processeur).
Notion de complexité algorithmique
 Opérations fondamentales:
 C’est la nature du problème qui fait que certaines opérations
deviennent plus fondamentales que d’autres dans un algorithme
 Exemple

Problème Opération fondamentale


Recherche d’un élément dans une Comparaison
liste
Tri d’une liste, d’un fichier, … Comparaisons, déplacements
Multiplication des matrices réelles Multiplications et additions
Notion de complexité algorithmique
 Coût des opérations :
 Coût de base : Pour la complexité en temps, il existe plusieurs
possibilités :
 Calculer le nombre d’opérations élémentaires (addition, comparaison,
affectation, …) puis le multiplier par le temps moyen de chacune d’elle ;

 pour un algorithme avec essentiellement des calculs numériques,


compter les opérations coûteuses (multiplications, racine, exponentielle,
…) ;

 ou compter le nombre d’appels à l’opération la plus fréquente

 Toute opération élémentaire prend le temps 1


Notion de complexité algorithmique
 Coût en séquentiel:
 Séquence :
 Cséquence(n)= Céléments de la séquence(n)
 Alternative: Si Cond alors T1sinon T2
 C(n)=Ccond(n)+max(CT1(n),CT2(n))
 Itération bornée : Pour i de j à k faire B
 C(n)=(k-j+1)*[Centête(n)+CB(n)]+ Centête(n)
 Entête : incrémentation de l’itérateur (i) et test de continuation
 Itération non bornée :
 Tant que Cond faire B
 C(n)=Nbboucle[Ccond(n)+CB(n)]+ Ccond(n)
 Nbboucle : le nombre de boucles
 Répéter B jusqu’à Cond
 C(n)=Nbboucle[Ccond(n)+CB(n)]
Notion de complexité algorithmique
 Coût en récursif:
 Rappel : La résolution d’un algorithme récursif nécessite de
trouver :
 la base de la récurrence ;
 la relation de récurrence associée ;
 et les cas d’arrêt.
 C(n) est calculé grâce à des relations de récurrence
Notion de complexité algorithmique
 Exemple 1 : les algorithmes de tri
 Tri par sélection
 Tri par insertion
 Tri à bulles
 Tri fusion
Notion de complexité algorithmique
 Tri par sélection
 Le principe est de parcourir un tableau afin de
chercher le plus petit élément qui est ensuite
permuté avec le premier élément.
 Le même traitement s’effectue avec le tableau
ayant le premier élément en moins.
 Cette opération est répétée jusqu’à ce que
tous les éléments soient en places.
Notion de complexité algorithmique
 Tri par sélection
Algorithme Tri_Selection
Début
Pour i de 1 à n-1 faire
m  i
Pour j de i+1 à n faire
si (Tab[j] < Tab[m]) alors
m  j
Finsi Opération élémentaire:
Finpour la comparaison de deux cellules du
temp  Tab[m] tableau.
Tab[m]  Tab[i] Complexité :
Tab[i]  temp C = (n-1)+(n-2)+...+1 = n.(n-1)/2
Finpour La complexité est de de l'ordre de
Fin n² et notée O(n²).
Notion de complexité algorithmique
 Tri par insertion
 Considérer que le premier élément est à sa place.
Prendre le second élément et l'insérer dans la partie
triée en déplaçant les éléments triés au besoin pour
faire de la place. Prendre le troisième élément et
l'insérer dans la partie triée en déplaçant les
éléments triés au besoin pour faire de la place. On
continue jusqu'à l'élément N.
Notion de complexité algorithmique
 Tri par insertion
Pour i de 2 à n faire
elem  T[i]
j  i
Tantque ((j>1) et (T[j-1]>elem)) faire
T[j]  T[j-1]
j  j-1
FinTantque Opération élémentaire:
la comparaison de deux cellules du
T[j]  elem
tableau.
Finpour Complexité :
C = 2 + 3 + 4 +...+ n = n(n+1)/2 -1
La complexité est de l'ordre de n²
et notée O(n²).
Notion de complexité algorithmique
 Tri à bulles
 comparer le premier élément avec le deuxième et les
échanger si le premier est plus grand que le second. On
compare ensuite le second avec le troisième (le second peut
ainsi contenir l'ancien premier) et on les échange si le
second est plus grand que le troisième. On continue jusqu'à
la fin de la première passe. À la fin de cette passe, le plus
grand est nécessairement au bout du tableau. On
recommence le même processus mais cette fois, on se
rendra jusqu'à l'indice N-1
Notion de complexité algorithmique
 Tri à bulles
Pour i de n à 1 pas -1 faire
pour j de 2 à i faire
si (T[j-1] > T[j]) Alors
tampon  T[j-1]
T[j-1] T[j]
T[j] tampon
Complexité : opération élémentaire:
Finsi
la comparaison de deux cellules du
Finpour tableau.
Finpour C = (n-1)+(n-2)+...+1 = n(n-1)/2
La complexité est de l'ordre de n²
et notée O(n²).
Notion de complexité algorithmique
 Tri fusion
1. Si le tableau n'a qu'un élément, il est
déjà trié.
2. Sinon, séparer le tableau en deux
parties à peu près égales.
3. Trier récursivement les deux parties
avec l'algorithme du tri fusion.
4. Fusionner les deux tableaux triés en
un seul tableau trié.
Notion de complexité algorithmique
 Tri fusion
Procédure tri-fusion (T: Tab , i:entier, j:entier)
m: entier
Début
Si(i > j) alors
Ecrire(" erreur ")
Sinon Si (i < j) alors
m ← (i+j)div2
tri-fusion (T,i,m)
tri-fusion (T,m+1,j)
fusionner (T,i,m,j)
FinSi
FinSi
La complexité est de O(n log2(n)).
Fin
Notion de complexité algorithmique
 Exemple 2 : étant donné un entier positif N, décider s’il est
premier ou non
 Rappel : Un nombre N est premier s’il n’est divisible que
par1 et lui-même.
 Résolution : Tenter de chercher un diviseur de N.
 Si un tel diviseur existe, N est non premier.
 Sinon, N est premier
 Trois algorithmes :
 Le premier algorithme A1 cherchera un candidat depuis 2 jusqu’à N −1.
 Le second algorithme A2 cherchera un candidat depuis 2 à N/2
 Le troisième algorithme A3 cherchera un candidat entre 2 et N
Notion de complexité algorithmique
 Algorithme (A1)
Fonction isPrime(N : Entier) : booléen
Var d : Entier
Début
Pour d de 2 à (N-1) Faire
Si (N mod d=0) Alors Retourner(Faux)
FinSi
FinPour
Retourner(Vrai)
Fin
 Algorithme (A2)
Fonction isPrime(N : Entier) : booléen
Var d : Entier
Début
Pour d de 2 à (N/2) Faire
Si (N mod d=0) Alors Retourner (Faux)
FinSi
FinPour
Retourner(Vrai)
Fin
Notion de complexité algorithmique
 Algorithme (A3)
Fonction isPrime(N : Entier) : booléen
Var d : Entier
Début
Pour d de 2 à racine(N) Faire :
Si (N mod d=0) Alors Retourner (Faux)
FinSi
FinPour
Retourner(Vrai)
Fin

 L’opération fondamentale pour le problème de test de primalité est le test


de la division de N par un nombre inférieur à N
 Pire des cas : N est premier
Notion de complexité algorithmique
 Complexité des trois algorithmes
 CA1(N) = (N-1)-2+1= N-2
 CA2(N) = (N/2)-2+1= (N-2)/2
 CA3(N) = N -2+1= N -1

A1 A2 A3

Rapidité
Les grandes familles de complexité d’algorithme

Complexité Notation Exemple


Constante O(1) Echange deux valeurs
Logarithmique O(log(N)) Recherche dichotomique
Linéaire O(N) Recherche séquentielle
Quasi-linéaire O(N log(N)) Tri par fusion
Quadratique O(N2) Tri par sélection
Cubique O(N3) Produit de deux matrices
Polynomiale O(Np) Algorithme avec p boucles imbriquées
Exponentielle O(aN), a>1 Calcul récursif de la suite de Fibonacci

Aucun progrès technologique (modèle de machine standard) ne permet à un


algorithme de changer de classe de complexité.
Les grandes familles de complexité d’algorithme
 Effets de la multiplication de la puissance d’une machine
par 10, 100 et 1 000 sur la taille maximale N des
problèmes que peuvent traiter des algorithmes de
complexité donnée :
Complexité 10 100 1000
(log N) N10 N100 N1000
( N ) 102 N 104 N 106N
(N) 10 N 100 N 1000 N
(N log N) < 10 N < 100 N < 1000 N
(N2) 3N 10 N  32 N
(N3) 2N 5N 10 N
(2N)  N+3  N+7  N + 10
Mesure de complexité
 Il existe plusieurs types d’analyse de la performance d’un
algorithme :
 L’analyse optimiste (analyse dans le cas le plus favorable ou
analyse dans le meilleur des cas).
 L’analyse en moyenne.
 L’analyse pessimiste (analyse dans le cas le plus défavorable ou
analyse dans le pire des cas).
Les notations asymptotiques
 Borne Supérieure : « au plus, de l’ordre de »
 Notation « grand-O »
 Définition
Soit g(n) une fonction positive. On définit l’ensemble Ο(g(n))
par :
O( g (n))   f (n) (c  0), (n0  0) tels que:0  f (n)  c.g (n); (n  n0 )

 Il s’agit de l’ensemble des fonctions bornées supérieurement


par la fonction g(n), à des constances multiplicatives près.

 Lorsque f (n)∈Ο(g(n)), on dit que la fonction g(n) est une borne


supérieure asymptotique pour la fonction f(n), et notée par
f (n) = Ο(g(n)).
Les notations asymptotiques
 Borne Supérieure : « au plus, de l’ordre de »

 Exemples
 n2 −180n +144  O(n2) pour tout n12 , en effet
n2−180n +144  n2 +180n +144  n2 +180 n2 + n2, c= 182, n0=12
 n2 +10n  O(n2) pour tout n1 , en effet
n2+10n  n2 +10 n2 =11 n2, c= 11, n0=1
 n2 +10n  O(n2) pour tout n10 , en effet
n2+10n  n2 +nn =2 n2, c= 2, n0=10
Les notations asymptotiques
 Borne Supérieure : « au plus, de l’ordre de »
 Exemples
 Démontrer que n2 ∈ O(10−5n3)
Les notations asymptotiques
 Exercice:
Considérer les deux algorithmes A1 et A2 avec leurs temps
d’exécution T1(n) = 9n2 et T2(n) = 100n + 96 respectives.
1. Déterminer la complexité asymptotique des deux algorithmes
dans la notation Grand-O. Quel algorithme a la meilleure
complexité asymptotique?
2. Montrer que les solutions sont correctes en spécifiant un c et
un n0 par algorithme afin que la relation suivante soit satisfaite :
 O(f) = {g|∃c > 0 : ∃n0 > 0 : ∀n ≥ n0 : g(n) ≤ cf(n)}
3. Tracer les graphes des deux fonctions Ti dans un même système
de coordonné (abscisse n, ordonné Ti(n)).
4. Pour une longueur de donnée n à déterminer quel algorithme
est le plus efficace ?
Les notations asymptotiques
 Borne inférieure : « au moins, de l’ordre de »
 Notation « grand- »
 Définition
Soit g(n) une fonction positive. On définit l’ensemble (g(n))
par :
( g (n))   f (n) (c  0), (n0  0) tels que: c.g (n)  f (n); (n  n0 )

 Il s’agit de l’ensemble des fonctions bornées inférieurement par


la fonction g(n), à des constances multiplicatives près.

 Lorsque f(n)∈(g(n)), on dit que la fonction g(n) est une borne


inférieure asymptotique pour la fonction f(n), et notée par
f(n) = (g(n)).
Les notations asymptotiques
 Borne inférieure : « au moins, de l’ordre de »

 Exemples
 Si f(n)=4n+2 alors f(n)=Ω(n)
 Si f(n)=4n2+1alors f(n)=Ω(n)
Les notations asymptotiques
 Borne asymptotique : «de l’ordre de »
 Notation « grand- »
 Définition
Soit g(n) une fonction positive. On définit l’ensemble (g(n))
par :
( g (n))   f (n) (c1 , c2  0), (n0  0) tels que: c1.g (n)  f (n)  c2 .g (n); (n  n0 )
 Il s’agit de l’ensemble des fonctions bornées inférieurement et
supérieurement par la fonction g(n), à des constances
multiplicatives près.
 Lorsque f (n)∈(g(n)), on dit que la fonction g(n) est une borne
asymptotique pour la fonction f(n), et notée par f (n) = (g(n)).
 f ∈ Θ(g) si et seulement si f ∈ O(g) et f ∈ Ω(g).
Les notations asymptotiques
 Borne asymptotique : «de l’ordre de »

 Exemples
 Si f(n)=4n+2 alors f(n)=(n)
 Si f(n)=4n2+1alors f(n)= (n2)
Les notations asymptotiques
 Propriétés des notations asymptotiques
 Théorème 1 (Transitivité des notations Ο, Ω et )
i. Si f = Ο(g) et g = Ο(h), alors f = Ο(h).
ii. Si f = Ω(g) et g = Ω(h), alors f = Ω(h).
iii. Si f = (g) et g = (h), alors f = (h).

 Théorème 2 (Réflexivité des notations Ο, Ω et )


i. f = Ο( f ).
ii. f = Ω( f ).
iii. f = ( f ).
Les notations asymptotiques
 Propriétés des notations asymptotiques
 Théorème 3 (Symétrie de la notation )
 f = (g)⇔ g = ( f ).

 Théorème 4 (Symétrie transposée entre la notation  et la


notation Ο)
 f = Ο(g)⇔ g = ( f ).
Les notations asymptotiques
 Exercice :
Soient f , g, S et T : IN → IN
1. Montrer que si f (n) ∈ O(g(n)), alors g(n) ∈ Ω( f (n)).

2. Montrer que si f (n) ∈ O(g(n)), alors f (n) + g(n) ∈ O(g(n)).

3. Montrer que f (n) + g(n) ∈ Θ(max( f (n), g(n))).

4. Montrer que O( f (n) + g(n)) = O(max( f (n), g(n))).

5. On suppose que S (n) ∈ O( f (n)) et T(n) ∈ O(g(n)).


a. Montrer que si f (n) ∈ O(g(n)), alors S (n) + T(n) ∈ O(g(n)).

b. Montrer que S (n)T(n) ∈ O( f (n)g(n)).


Quelques règles utiles
 Les quelques règles suivantes permettent de simplifier les
complexités en omettant des termes dominés :

 Les coefficients peuvent être omis : 14n2 devient n2

 na domine nb si a > b : par exemple, n2 domine n

 Une exponentielle domine un polynôme : 3n domine n5 (cela


domine également 2n)

 De même, un polynôme domine un logarithme : n domine


(log(n))3 .
 Cela signifie également, par exemple, que n2 domine n log(n).
Les notations asymptotiques
 Notations asymptotiques et fonctions particulières
 fonction polynomiale asymptotiquement strictement
positif
d
Définition : Une fonction polynomiale f ( x)   ai x telle que
i

i 0
ad> 0 est dite fonction polynomiale asymptotiquement strictement
positif.
d
 Théorème : Soit f (n)   ai ni une fonction polynomiale
i 0 d
asymptotiquement strictement positif alors f (n)   ai n  (n )
i d

i 0

 Définition : On dit qu’une fonction f (n) admet une borne


asymptotique polynomiale, si et seulement si
( d  0) tel que: f (n)  (nd )
Les notations asymptotiques
 Notations asymptotiques et fonctions particulières
 Somme partielle de série arithmétique
 La somme partielle de la série arithmétique vérifie la relation
suivante :
n n(n  1)
i   (n 2 )
i 1 2

Vous aimerez peut-être aussi