Vous êtes sur la page 1sur 18

Algorithmique, structures de données

et complexité
GLSI1-SEIOT1
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 jusqu’à n-1 faire
m  i
Pour j de i+1 jusqu’à 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

Vous aimerez peut-être aussi