0% ont trouvé ce document utile (0 vote)
154 vues6 pages

Complexité des Algorithmes sur Tableaux

Transféré par

DOUAE EL MRABET
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
154 vues6 pages

Complexité des Algorithmes sur Tableaux

Transféré par

DOUAE EL MRABET
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Conception de structures de données

Cours 2 Rappels sur la complexité


Algorithmes et complexité

25 février 2013

Struct 1/23 Struct 2/23


Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Mesurer l’efficacité d’un algorithme Quel est le paramètre ?


Le temps d’exécution d’un programme dépend : Première chose à faire : évaluer la TAILLE DES DONNÉES,
des données du problème pour cette exécution c’est-à-dire les entrées (instances) manipulées par l’algorithme.
de la qualité du code engendré par le compilateur
On doit essayer de choisir comme taille ( la ou ) les
de la nature et de la rapidité des instructions du processeur dimensions les plus significatives.
de l’efficacité de l’algorithme Par exemple, selon que le problème est modélisé par :
de l’encodage des données des nombres : les valeurs de ces nombres, le nombre de
chiffres dans leur codage binaire, ...
... et aussi de la qualité de la programmation !
des polynômes : le degré, le nombre de coefficients 6= 0, ...
Pour mesurer l’efficacité d’un algorithme : des matrices m × n : max(m, n), m.n, m + n, ...
des arbres : la hauteur, le nombre de noeuds, de feuilles, ...
On oublie ce qui est subjectif (programmeur, matériel, ... ). des listes, tableaux, fichiers : nombre de cases, d’éléments, ...
On cherche une grandeur n pour “quantifier” les entrées. des mots : leur longueur, le nombre de lettres de l’alphabet
utilisé pour les écrire, ...
On calcule les performances uniquement en fonction de n.
! ! Le choix d’un structure de données à une grande
B complexité d’un ALGORITHME, pas d’un programme ! influence sur l’efficacité d’un algorithme ! !

Struct 3/23 Struct 4/23


Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Qu’est ce que l’on compte ? Il n’y a pas que la taille qui compte...
Un algo ne sert pas à résoudre 1 seule instance d’un problème !
Dans l’idéal, il faut compter toutes les “opérations”
B exemple d’un algo de recherche d’élément dans un tableau trié.
élémentaires impliquées dans l’algorithme.
Or, on sait (cours d’Archi) que toutes les instructions n’ont La taille du problème : le nombre de cases du tableau.
pas le même coût en temps ! Le temps de la recherche dépend de l’algorithme choisi, mais
Il faut choisir quelles opérations compter : des opérations aussi des paramètres (le tableau et l’élément à trouver).
Exemples :
simples et indépendantes de l’implantation de l’algorithme.
Recherche séquentielle :
C’est la nature du problème qui rend certaines opérations
e ... meilleur cas
plus fondamentales que d’autres dans un algorithme. 0 n-1
Avec un peu d’habitude, on les repère : ... e pire cas
Recherche d’un élément dans un tableau, une liste, un arbre 0 n-1
Recherche dichotomique :
Tri d’une liste, d’un tableau, d’un fichier e ... pire cas
0 n-1

Multiplication de polynômes, de matrices, de grands entiers ... e ... meilleur cas


0 n/2 n-1

Et pour simplifier, on peut faire l’hypothèse que toutes ces Il faudrait une moyenne sur toutes les instances du problème...
opérations élémentaires ont un coût uniforme. B Calcul de la complexité d’un algo dans le PIRE cas !
Struct 5/23 Struct 6/23
Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Complexité asymptotique La notation O

Ce n’est pas très intéressant d’étudier la complexité si la taille Definition


du problème est petite : Pour une fonction g(n) donnée, on note O(g(n)) l’ensemble de
B L’efficacité d’un algorithme n’est un enjeu important que sur fonctions suivant :
les gros problèmes. O(g(n)) = { f (n) | ∃c et n0 , ∀n ≥ n0 , 0 ≤ f (n) ≤ c · g(n) }
On ne sait pas où est la limite entre petits et gros problème...
On note f (n) = O(g(n)) et on dit “en grand O de g(n)”.
C’est pourquoi on regarde la complexité asymptotique des algos.
B Asymptotique : quand la taille n du problème tend vers ∞.
exemple : il n’est pas vrai que pour tout n ≥ 0, n2 ≥ 10 000 n, c.g(n) Exemples
mais asymptotiquement, n2 est plus grand que 10 000 n. f(n) 1 000 000 = O(1)
Il n’est pas toujours évident de compter exactement le nombre n = O(n)
d’opérations impliquées dans les algorithmes. 10n = O(n2 )
B On se contente de trouver des approximations.
99n + 2100 = O(n)
B En général on majore la complexité :
c’est-à-dire que l’on donne une borne supérieure (une borne 5n3 + 50n2 + 8 = O(n3 )
n
que l’on est sûr de ne jamais dépasser). 0 n0 n10 = O(2n )
Struct 7/23 Struct 8/23
Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Propriétés utiles Quelques classes de complexité

Pour toute constante c > 0 et toutes fonctions g, g1 , g2 : constant O(1) • opérations élémentaires :
c = O(1) affectation, comparaison, ...
B 210 = O(1), toute opération qui ne dépend pas de n... logarithmique O(log n) • recherche dichotomique
 
c · O g(n) = O g(n) linéaire O(n) • recherche séquentielle
B 3n = O(n), boucle de longueur n avec 3 affectations... • recherche du max (ou min)
   • calculer la longueur d’une liste
O g(n) + O g(n) = O g(n)
B n + n + · · · + n = O(n), quasi-linéaire O(n log n) • tri fusion
plusieurs boucles de longueur n qui se suivent... quadratique O(n2 ) • tri à bulle, tri par insertion
  
O g1 (n) + O g2 (n) = O max(g1 (n), g2 (n)) • parcours d’une matrice n × n
B n2 + n = O(n2 ), • recherche de motif dans
initialiser la 1e ligne d’une matrice puis tout le reste une chaı̂ne de caractères
  
O g1 (n) · O g2 (n) = O g1 (n) · g2 (n) polynomial O(nk ) avec k fixé (k = 3 : cubique)
B n · n = O(n2 ), 2 boucles imbriquées de longueur n exponentiel O(k n ) • Fibonacci récursif

Struct 9/23 Struct 10/23


Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Synthèse

Déterminer la TAILLE n du problème.


Choisir les OPÉRATIONS à compter.
Déterminer quel est le PIRE CAS pour l’algorithme. Choisir un tableau
B Ne pas oublier que n est grand.
comme structure de données
COMPTER (APPROXIMATIVEMENT) le nombre
d’opérations élémentaires en fonction de n.
→ donner une borne supérieure la plus précise possible.

B Pour tous les algos étudiés : donner la complexité !

Struct 11/23 Struct 12/23


Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Choix d’une structure de données Opérations sur un tableau non trié


B Tableau tab non trié de taille (variable) n :
Comment modéliser... accès au ie élément
recherche de l’élément e
... un ensemble (une collection) d’entiers ? insertion de l’élément e
suppression de l’élément e
... une file d’attente pour une imprimante ? suppression de l’élément d’indice i

... une liste d’étudiants ?

... un dictionnaire (T9) de téléphone portable ?

...

Struct 13/23 Struct 14/23


Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Opérations sur un tableau préservant l’ordre Opérations sur un tableau trié


B Tableau tab non trié de taille n dans lequel l’ordre relatif des
éléments doit être préservé : mêmes complexités, sauf pour B Tableau tab trié de taille (variable) n :
la suppression : O(n) dans tous les cas ! accès au ie élément
recherche de l’élément e
Dans le cas de la file d’attente, 2 possibilités :
0 n-1 TMAX insertion d’un élément e ?

insertion (en fin)


suppression (en tête)
0 deb fin = deb + n -1 TMAX

insertion (en fin) suppression de l’élément e


suppression (en tête) suppression de l’élément d’indice i
nombre d’insertions borné !
Struct 15/23 Struct 16/23
Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Recherche dichotomique Algorithmes de TRI


int rechercheDicho(int elem, int tab[], int lg){ TRI : étant donnés un ensemble de données et une relation
int debut = 0; d’ordre sur ces données, les trier en ordre croissant.
int fin = lg-1; les données peuvent être des entiers, des flottants ( !), des
int milieu = (debut+fin)/2; mots, des structures complexes, ...
while(debut<=fin) elles peuvent être dans un tableau, une liste, un fichier, ...
if (elem == tab[milieu]) l’ordre peut être numérique, lexicographique, militaire, ...
return milieu; Algorithmes de tri :
else if (elem < tab[milieu]){ les LENTS :
fin = milieu-1; /* cherche à gauche... */ tri par insertion
milieu = (debut+fin)/2; tri à bulles
} tri par sélection
...
else{ debut = milieu+1; /* elem > tab[milieu] */
les RAPIDES :
milieu = (debut+fin)/2; /* ... à droite */
tri par fusion (pas en place)
} tri rapide (quicksort) : rapide en moyenne
return -1; /* si on n’a rien trouvé dans le while */ tri par tas (structure de données complexes)
} ...
Struct 17/23 Struct 18/23
Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Tri par INSERTION Principe du tri par SÉLECTION (prog. en TD)


Principe : Séparer le tableau en 2 parties :
Séparer le tableau en une partie triée et l’autre non ; la 1ère est triée et contient les + petits éléments du tableau ;
Au début, la partie triée est vide ; la seconde n’est pas triée et contient des éléments + grands
À chaque étape, on insère le premier élément de la partie que tous ceux de la 1ère partie ;
non triée dans la première partie du tableau, de sorte que Au début, la partie triée est vide ;
celle-ci reste triée. À chaque étape, on sélectionne le plus petit élément de la
partie triée partie non triée est on l’insère à la fin de la partie triée.
0 i n-1
0 i Min n-1

partie triée

0 i+1 n-1 0 i+1 n-1


partie triée partie triée

Complexité ? ? Complexité ? ?
Struct 19/23 Struct 20/23
Complexité Algos sur les tableaux Complexité Algos sur les tableaux

Quicksort Tri Fusion


pivot
0 n/2 n-1
0 n/2 n-1

5 1 11 3 12 7 10 8 4 2 9 6 5 1 11 3 12 7 10 8 4 2 9 6
séparer
séparer
<= pivot >pivot

1 3 4 2 5 11 12 7 10 8 9 6 5 1 11 3 12 7 10 8 4 2 9 6
trier récursivement trier récursivement
trier récursivement trier récursivement

1 3 5 7 11 12 2 4 6 8 9 10
1 2 3 4 5 7 6 8 9 10 11 12
fusionner
fusionner

1 2 3 4 5 6 7 8 9 10 11 12

Complexité ? Complexité ?

Struct 21/23 Struct 22/23


Complexité Algos sur les tableaux

Synthèse des opérations sur les tableaux

tableau tableau tableau


Opération non trié ordonné trié
Accès au ie élément O(1) O(1) O(1)
Insertion d’un élément e O(1) O(1) O(n)
Suppression d’un élément e O(n) O(n) O(n)
Suppression du ie élément O(1) O(n) O(n)
Recherche d’un élément e O(n) O(n) O(log n)
Tri O(n log n) – –

Conclusion : il faut choisir une structure de données


adaptée au problème que l’on doit résoudre.

Struct 23/23

Vous aimerez peut-être aussi