Vous êtes sur la page 1sur 5

Précis du cours d’Algorithmique et complexité

Chapitre 2 : COMPLEXITE DES ALGORITHMES

I. Notion de complexité
La complexité d’un algorithme est sa charge en termes de temps (complexité temporelle) et de ressources
(complexité spatiale)
Compte tenu de l’abondance de ressources dans les machines actuelles, on s’intéressera plus à la complexité
temporelle
L’évaluation de la complexité d’un algorithme consiste en l’indication d’un coût qui soit indépendant de :
 Le langage de l’ordinateur
 Du système d’exploitation
 Du langage de programmation
 De la version du compilateur
Pour cette leçon, l’évaluation de la complexité s’appuie sur le décompte du nombre d’opérations élémentaires
qu’effectue un algorithme. Le coût des algorithmes est parfois estimé comme une fonction de la taille des données.
On dira parfois qu’un algorithme A qui traite une donnée de taille n a un coût C(n). C(n) est en général exprimé
sous la forme d’une fonction qui peut etre :
 Linéaire (an+b) ( )
 Quadratique (an2 + bn + c) ( )
 Polynomiale (ad nd + … + a0) ( )
 Logarithmique (log ( ))
 Exponentielle ( )
A chacune de ces formes, correspond une approximation bien spécifiée par les notations de Landau.

II. Notation de Landau

CHAPITRE 3. RECHERCHE ET TRI

I. Introduction
La recherche et le tri sont des processus qui concernent les collections de données que nous avons choisies de
représenter par des vecteurs. Le type vecteur que nous avons considéré se présente comme suit :
VECTEUR = tableau[Nmax] d’entier
La recherche dans un vecteur peut correspondre à l’un des problèmes spécifiques suivants :
 Test d’appartenance
 Détermination du maximum / minimum
 Détermination de la position de la kième occurrence d’un élément x
 L’existence d’éléments vérifiant des propriétés particulières
Le tri d’un vecteur consiste en l’organisation de ses éléments dans un ordre (Croissant ou Décroissant).
Précis du cours d’Algorithmique et complexité
II. Recherche

II.1. Spécification du problème

Nous nous intéressons à une variante du test n qui consiste à retourner la position d’une occurrence d’un
élément x dans un vecteur V.
Suivant l’organisation des éléments du vecteur, on peut résoudre ce problème de deux façons
 Stratégie séquentielle
 Stratégie dichotomique
Quelque soit la stratégie, le principe de résolution est globalement le même :
i. Se placer au début correspondant au parcours à choisir
ii. Avancer conformément au parcours jusqu’à atteindre l’élément x
iii. Retourner le résultat

II.2. Recherche séquentielle

Fonction rechercheSequentielle(x :Entier, VECTEUR V, n : Entier) : Entier


Var i, pos : Entier
Début
i←1;
pos ← -1 ;
Tantque (V[i] <> x et i<n) faire
i←i+ 1 ;
Fintantque
si (V[i] = x) alors
pos ←i ;
sinon
pos ← -1 ;
finsi
Retourner pos ;
Fin

La complexité de cet algorithme se recapitule dans le tableau suivant


Opération Meilleur des cas Pire des cas
← 1+1+1 1 +( n-1)*1 + 1 +1
Comparaison 2+1 n*2 + 1
Op Logique 1 n*1
+ 0 ( n-1)*1
Complexité 6 = (1) 5n+2 = ( )

SALLE 4C Lundi Mardi Mercredi Jeudi Vendredi Samedi

CAMPUS 2 INF 355 INF 345 INF 315 INF 335 INF 345 13H-16H
INF 315
7H- 13H INF 355 INF 365 INF 315 INF 335 INF 365

II.2. Recherche dichotomique

a) Principe
Le principe est celui de la recherche d’un mot dans un dictionnaire.
On teste l’élément central du vecteur (V[m]) ; On s’arrête s’il y a correspondance. Dans le cas contraire, on
poursuit la recherche soit dans le sous vecteur de gauche (V[1 ..m-1] si x <V[ m]), soit dans le sous vecteur de droite
(V[m+1 ..n]) si x >V[ m]).
NB : la Recherche dichotomique ne s’applique qu’à des vecteurs triés
Précis du cours d’Algorithmique et complexité
b) Algorithme
fonction rechercheDich(x: Entier, V:vecteur, n : Entier): Entier
Var d, f, m, pos : Entier
Debut
d←1; f←n; m ←(d+f)/2;
tantque(x <> V[m] et d <> f) faire
si(V[m] > x) alors
f ← m+1;
sinon
d ← m-1;
finsi
m←(d+f)/2;
fintantque
si(x = V[m]) alors
pos ← m;
sinon
pos ← -1;
finsi
retourner pos;
Fin

c) Complexité

Prop1 = n/2 ; Prop2 = n/22 ; Prop3 = n/23 ; Prop4 = n/24 ; … ; Propk= n/2k = 1;
D’où = (nombre de fois que je peux trouver un nombre entre 1 et n)

Opération Meilleur des cas Pire des cas


← 3+1+1 3 + logn +logn +1+1
Comparaison 2 +1 2logn +logn+1
et Logique 1 logn
+ ou - 1 1+logn+logn
/ 1 1+logn
Complexité 11= (1) 8+9logn = (logn)

III. TRI
1) Spécification du problème

Soit V[n]. Trier V c’est ranger ses éléments dans un ordre (Croissant par exemple).
Le tri est un processus répétitif qui s’effectue en n-1 étapes. L’objectif de chaque étape est de ramener un
élément à sa position finale. Ce principe est mis en œuvre à l’aide des techniques du tri bulle et du tri par sélection.
Le tri par insertion correspond à une mise en œuvre d’une variante de ce principe
2) Tri bulle
Procedure TriBulle (V: Vecteur, n:Entier)
Var i, j : Entier
Debut
Pour i de n à 2 faire
pour j de 1 à i faire
si(V[j]>V[j+1]) alors
Précis du cours d’Algorithmique et complexité
echanger(V, j, j+1]);
finsi
finpour
Finpour
Fin

Complexité
NB : Pour les tris on évalue généralement la complexité des tri à partir des opérations de comparaison et d’échanges
Opération Meilleur des cas Pire des cas
Comparaison n2+n -1 n2+n -1
Echange 0 (n2+n)/2
Complexité (n2) (n2)

3) Tri sélection
Procedure TriSelection (V: Vecteur, n:Entier)
Var i, j, pos : Entier
Debut
Pour i de n à 2 faire
pos ←1;
pour j de 2 à i faire
si(V[j]>V[pos]) alors
pos ← j;
finsi
finpour
echanger(V, i, pos);
Finpour
Fin
Complexité
Opération Meilleur des cas Pire des cas
Comparaison n2+n -1 n2+n -1
Echange n-1 n-1
Complexité (n2) (n2)

4) Tri par insertion


Procedure TriInsertion (V: Vecteur, n:Entier)
Var i, j, pos : Entier
Debut
Pour i de n à 2 faire
pos ←1;
pour j de 2 à i faire
si(V[j]>V[pos]) alors
pos ← j;
finsi
finpour
echanger(V, i, pos);
Finpour
Fin
Complexité
Opération Meilleur des cas Pire des cas
Comparaison n2+n -1 n2+n -1
Echange n-1 n-1
Précis du cours d’Algorithmique et complexité
Complexité (n2) (n2)

Vous aimerez peut-être aussi