Académique Documents
Professionnel Documents
Culture Documents
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.
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
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
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
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)
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)