Algorithmes de Tri Chapitre 6
Algorithmes de Tri
Et si on faisait un peu d’informatique?
Jusque là, nous avons toujours travaillé sur des sujets de maths, et un peu de physique aussi. Passons un peu aux choses sé-
rieuses! Faisons un peu d’informatique! Le fait de comprendreles principes plus abstraits de cette matière permet une meilleure
vision sur les problèmes courants et concrets.
Aujourd’hui je vous propose donc un TD entier sur les algorithmes de tri.
1 Contexte
1.1 Algorithme
Ici on a laché le mot “algorithme”. Je peux vous l’accorder : ça pique un peu quand on ne s’y attends pas forcément. La
nition de notre cher ami Wikipedia est :
Un algorithme est un énoncé dans un langage bien déni
d’une suite d’opérations permettant de résoudre par calcul un problème
Tout le monde sait trier cette suite : 5 2 4 3 1 par ordre croissant. Mais la question est comment? Ca c’est une question
d’informaticien. Quand je vous ai demandé d’interpoler une fonction à partir de quelques points, tout le monde peut me le faire.
Mais peu savent me dire comment ils ont fait en détail! Voilà l’étendu des problèmes algorithmiques. L’avantage est que si on
connaît la méthode exacte alors on peut faire le boulot d’un humain mais à une vitesse inniment plus grande (donc sur des
grands problèmes),car je suis désolé de vous apprendreça mais : un ordinateurpeut faire des milliards (sans exagérer) d’addition
à la seconde. Nous c’est tout juste si on peut dire en 10s combien font 123x42.
Ici on veut se focaliser sur la manière de trier une liste de nombre1. Ce TD a pour but de voir les trois algorithme les plus
simples et plus connus pour effectuer ce tri et de voir les avantages et inconvénient de chaque.
Par la suite on travaillera sur le tableau Tindexé de 1 à N.
1.2 Notion de complexité
Pour savoir si un algorithme est efcace on utilise un outil mathématique qui s’appelle la complexité. Je vais en aborder
qu’une (toute) petite partie. Mais ça permet de donner une bonne évaluation déjà.
nition 1 :
On appelle le coût en pire cas d’un algorithme le nombre d’opérations élémentaires qui seront exécutés dans l’exemple
le plus long.
On appelle le coût en meilleur cas d’un algorithme le nombre d’opérations élémentaires qui seront exécutées dans une
conguration simple.
nition 2 :
Soit un algorithme paramétré par x1, ..., xn. On note O(f(x1, ..., xn)) le coût de algorithme si :
CR,Nombre d’opérations Cf(x1, ..., xn)
2 Tri par sélection
Il est réputé pourêtre, certes le plus clair et simple, des algorithmesde tri, mais surtout par ses performances trèèèsdécevantes.
Son principe est très simple : Parcourir tous les couples de [1..N ]×[1..N ]interchangeables (i.e. on prend en compte (1,2)
mais pas (2,1) car c’est une permutation du premier) et si l’ordre n’est pas correct, alors échanger ces deux valeurs.
Ex 1:
1Il n’est pas nécessaire d’être limité à Z, on peut se placer dans un ensemble Etelle qu’il existe une fonction booléenne d’ordre telle que a, b E,
f(a, b)=a<bexiste
1 Loïc Frère TEXPetit
Algorithmes de Tri Chapitre 6
Ecrire une fonction (très simple) Swap(T, i, j) qui échange dans le tableau T les valeurs aux indexes iet j.
Trouver une manière d’énumérer tous les couples interchangeable [1..N ]×[1..N].
Aide : Utiliser deux boucles FOR imbriqués
En déduire l’algorithme de Tri par sélection : TriSelect(T).
D’un point de vue performance :
On a dans tous les cas au moins N(N+1)
2comparaisons. Dans le meilleur cas on peut s’affranchir des échanges. Mais cela ne
fait que changer la constante devant. On a donc :
En pire et meilleur cas, l’algorithme de Tri Sélection a un coût en O(N2)
3 Tri bulle
5 2 3 1 4
2 3 1 4 2 3 1 45 5 2 3 1 45 2 3 1 4 5
31 4 51 4 5
2 2 31 4 5
23
1 4 532 1 4 532
1 4 53
2
FIG. 1 – Etapes du tri bulle
Sans être bien plus performant, il est assez drôle de connaître le fameux
tri bubulle. Son principe réside sur le fait que si on effectue des échanges de
valeurs voisines successifs, on propage des valeurs triés en n de liste.
La Fig. 1 explique le fonctionnement de l’algorithme. La èche indique
l’index sur lequel est l’une des variables d’une boucle for qui sera utilisée.
En clair on parcourt le moins de fois possible le tableau en largeur et si on
rencontre deux valeurs voisines qui ne sont pas rangés alors on échange les
valeurs.
On appelle cet algorithme le tri bulle car si on regarde les déplacements
des éléments. Ils remontent petit à petit et ne s’arrêtent que quand ils sont à
leur place.
Ex 2:
Ecrire l’algorithme du Tri Bulle.
Aide : Utiliser deux boucles FOR imbriqués
Imaginez une ruse (simple) pour éviter de faire des parcours inutiles. Le tri
bulle sur une liste trié doit être très rapide.
D’un point de vue performance, on est identique à l’algorithme de sélection mais on a une meilleure analyse d’une liste triée
qui se verra très vite trouvée en Ncomparaisons.
En pire cas l’algorithme de Tri Bulle a un coût en O(N2). En meilleur cas il est en O(N).
3.1 Pour ceux qui sont en avance : Le tri fusion
Là on rentre dans la catégorie des algorithmes efcaces; donc un peu plus bizarres. Histoire de bien vous embêter, j’ai choisi
un algorithme de tri qui se fait de façon récursif (oui je sais je suis méchant).
Cet algorithme réside sur une principe simple :
1. Je prends une liste
2. Je la découpe en deux bouts
3. Je relance le tri sur ces deux bouts
4. Je fusionne ces deux bouts triés en une liste complètement triée
Ex 3:
Ecrire une fonction Fusion(T1, T2) qui à partir de deux listes triées, renvoie une liste qui fusionne les deux en une seule de façon triée.
En déduire l’algorithme récursif du Tri Fusion (la découpe se fera au milieu).
Aide : Ne pas oublier la condition de terminaison
L’analyse de performance ne peut pas se faire à votre niveau. Mais si on dessine un arbre des découpages et des fusions. On
peut voir que on aura environ log2Nfusions. Chacune de ces fusions sera de coup de l’ordre de N. Ainsi on a :
En pire et meilleur cas, l’algorithme de Tri Fusion a un coût en O(Nlog2N)
Toutefois, ce tri requiert plus de place mémoire que les autres (l’opération de fusion requiert un tableau supplémentaire). En
effet, lorsqu’on fait une analyse de performance, on calcule le nombre d’opérations, mais aussi le coût mémoire engendré.
Pour les accros qui en veulent plus : L’algorithme de Tri Fusion est très performant mais n’est pas le meilleur. Vous pouvez
vous documentersur l’algorithme du QuickSort qui est une méthode prochede la fusion mais qui a un coût en pire cas de O(n2).
Toutefois, en moyenne on se rend compte qu’on a O(Nlog 2N)opérations avec un coût mémoire O(log2N)dans les versions
les plus optimisés.
2 Loïc Frère TEXPetit
1 / 2 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 !