Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Algorithmes et
Structures de Données
Chapitre 7 – Les Tris
Capocchi Laurent
capocchi@univ-corse.fr
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Objectifs
Les algorithmes de tris
Tri par sélection
Tri à bulle
Tri par insertion
Tri rapide (Quick sort)
Tri par fusion
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Tri et recherche sur les tableaux
Un tableau permet l'accès direct à un élément
Nous allons nous servir de cette propriété pour présenter
les principaux algorithmes de tri et de recherche
Notion de complexité d'un algorithme
Son étude consiste à prévoir le nombre d’opérations =
temps de calcul sur un ordinateur
Ce type d’analyse n’a de l’intérêt que pour les
programmes manipulant des données de grande taille
Analyse indépendante du type de matériel
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Complexité des algorithmes
Nombre d'opérations élémentaires (affectations,
comparaisons, opérations arithmétiques) effectuées par un
algorithme
On dit que la complexité d'un algorithme est O(f(n))
n : taille des données
f : combinaison de polynômes, logarithmes ou
exponentielles
Le nombre d'opérations effectuées est borné par c*f(n), où c
est une constante quand n tend vers l'infini
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Complexité des algorithmes
Les algorithmes usuels peuvent être classés en un
certain nombre de grandes classes de complexité :
Les algorithmes constant : O(1)
Les algorithmes sub-linéaires : O(log n)
Les algorithmes linéaires : O(n), O(n log n) sont
considérés comme rapides
Les algorithmes de complexité O(n2) et O(n3) sont plus
lent
Les algorithmes polynomiaux en O(nk) pour k>3 sont lent,
Les algorithmes exponentiels dont la complexité est > à
tout polynôme en n
Ils sont impraticables dès que la taille des données >
qqs dizaines
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Complexité des algorithmes
Ordres de grandeur (exemples)
1, log n, n, n.log n, n2, n3, 2n
n
f(n)
1
Log n
n
2
n
2n
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Complexité des algorithmes
La recherche de l'algorithme ayant la plus faible complexi
fait partie du travail régulier de l'informaticien
Il ne faut pas tomber dans l'excès :
Proposer un algorithme confus, complexe, développant
mille astuces et ayant une complexité en O(n1,99), alors
qu'il existe un algorithme simple, claire de complexité
O(n2)
Les critères de clarté et de simplicité doivent être
considérés comme aussi importants que celui de l'efficacité
dans la conception des algorithmes
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Pourquoi évaluer l’efficacité d’un algorithme ?
Le ordinateurs ne sont pas infiniment rapides
La mémoire n’est pas gratuite
On doit utiliser des algorithmes performants en
terme
de durée : temps d’exécution
d’encombrement : mémoire
Évaluer l’efficacité d’un algorithme = Analyser
l’algorithme
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Qualité d'un algorithme
Performance : Étude du coût (complexité) en temps
et en mémoire
La complexité en mémoire (place mémoire prise par
l’algorithme) = problème de moins en moins primordial
vu les capacités techniques actuelles
Rmq : ne pas confondre un pb de mémoire saturée qui
vient du pg avec la complexité mémoire de l’algorithme
La complexité en temps
Certains pbs n’admettent pas de solutions, d’autres ont
des solutions qui nécessitent bcp de temps d’exécution
(pbs irréalisables)
On distingue la complexité en moyenne, la complexité
dans le pire des cas, et la complexité au meilleur des
cas
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Qualité d'un algorithme
La complexité en temps
Problème exponentiel
Utilisation d’heuristiques :
Méthode qui produit la plupart du temps un résultat
acceptable mais pas nécessairement optimal en un
temps raisonnable
On ne pourra pas prouver s’il est optimal ou non
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Pourquoi trier ?
Ranger les éléments dans un ordre connu (croissant
ou décroissant) pour faciliter les opérations de
Recherche, Insertion, Suppression
Exemples
Établir le classement de certains élèves
Mettre en ordre un dictionnaire
Trier l'index d'un livre
{18, 3, 10, 25, 9, 3, 11, 13, 23, 8}
doit devenir
{3, 3, 8, 9, 10, 11, 13, 18, 13, 25}
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Comment et quand trier ?
Il faut faire une distinction entre le tri d'un grand nombre
d'élément : plusieurs centaines, et le tri de quelques
éléments : paquet de cartes
Si peu d’éléments la méthode importe peu
Tri d’un paquet de carte : regarder si le paquet est trié si
oui, arrêter sinon le jeter par terre et recommencer…
Au bout d’un certain temps on risque d’avoir un
paquet ordonné !
La méthode peut également ne jamais s’arrêter
Le tri est possible s’il existe une relation d’ordre sur les
éléments
entiers, mots, …
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Plan
Méthodes élémentaires (tris naïfs)
Tri par sélection
Tri à bulle
Tri par insertion
Méthodes plus évoluées
Tri rapide (Quick Sort)
Tri par fusion
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Tri par sélection (tri par extraction)
Idée : on suppose que le tableau est partagé en 2 parties
1 partie triée
1 partie non triée mais dont tous les éléments sont > aux
éléments de la 1ère partie
Au début de l’algorithme : la partie triée est vide
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Tri par sélection (tri par extraction)
Principe
On cherche le minimum de la partie non triée
On le colle à la suite de la partie triée en l’échangeant
avec l’élément à la frontière
Exemple du tri du jeu de carte
On cherche la plus petite carte : on la met dans la main
gauche
On cherche la plus petite carte dans le paquet restant à
trier
On la met à droite du paquet qui est dans la main gauche
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Tri par sélection (tri par extraction)
Trouver l’emplacement de l’élément le plus petit du
tableau
minimum tel que i, em ei
Échanger les éléments e1 et em
On recommence sur la suite du tableau
{e2eN}
On arrête lorsqu’on a plus qu’une suite composée d’un seul
élément {eN}
Essayez sur la suite {18, 3, 10, 25, 9, 3, 11, 13, 23, 8}
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
18 3 10 25 9 3 11 13 23 8
318 10 25 9 3 11 13 23 8
im
im
3 3 10 25 9 18 11 13 23 8
i m
3 3 8 25 9 18 11 13 23 10
im
3 3 8 9 25 18 11 13 23 10
i m
3 3 8 9 10 18 11 13 23 25
im
3 3 8 9 10 11 18 13 23 25
i m
3 3 8 9 10 11 13 18 23 25
i m
3 3 8 9 10 11 13 18 23 25
i m
3 3 8 9 10 11 13 18 23 25
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Algorithme Tri par sélection
Recherche de l’emplacement de l’élément le plus petit
On doit regarder tous les éléments du tableau
Utilisation d’une boucle « pour »
On doit regarder s’ils sont plus petit que le minimum
Au départ il faut choisir un minimum…
Le premier élément du tableau à trier …
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Algorithme de Tri par sélection
Recherche de l’emplacement de l’élément le plus petit
minimum<-1
Pour i <- 2 à 10 faire
si t[i] < t[minimum] alors
minimum <-i
finsi
finPour
Échanger les éléments
tmp <- t[minimum]
t[minimum] <- t[i]
t[i] <- tmp
Refaire
pour
minimum
= 2 puis
3,…,N
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Algorithme de Tri par sélection
procédure triSelection (var A :Tableau))
Variables locales : i, j ,minimum, tmp : Entiers
Pour j <- 1 à longueur(A)-1 faire
minimum <- j
Pour i <- j+1 à longueur(A) faire
si t[i] < t[minimum] alors
minimum <- i
finsi
finPour
tmp <- t[minimum]
t[minimum] <- t[j]
t[j] <- tmp
finPour
finProcédure triSélection
Complexité en O(n2) dans
le meilleur, en moyenne et
au pire des cas
1 / 16 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !