chapitre vii. tri tri par tas tri rapide. tris faisant appel aux arbres dichotomique (quick sort)...

31
Chapitre VII. Tri Tri par tas Tri rapide

Upload: claudie-daniel

Post on 04-Apr-2015

127 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Chapitre VII. Tri

Tri par tas

Tri rapide

Page 2: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Tris faisant appel aux arbres

• Dichotomique (quick sort)• Tri par fusion • Tris par tas • ….

Page 3: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Tri par tas

• Fait appel à la structure de l’arbre binaire parfait partiellement ordonné

• La complexité est • Le principe : prendre le tri par sélection et

accélérer la recherche de min par l’organisation adéquate de données

• (heapsort)

nn lg,

Page 4: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Rappel du tri par sélection

Tri par sélection

• Principe : on recherche le minimum dans la partie restante du tableau et on l’échange avec l’élément qui suit la partie déjà triée.

• Après k placements les k plus petits éléments du tableau sont déjà à leur place définitive

G

Page 5: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Arbre binaire parfait• Arbre binaire parfait : tous les niveaux sont complètement remplis, sauf

éventuellement le dernier niveau. Dans ce dernier cas les nœuds (feuilles) du dernier niveau sont groupés le plus à gauche possible. Arbre binaire parfait est un arbre équilibréparfait « imparfait »

Page 6: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Numérotation hiérarchique(1)

• Numéroter en ordre croissant à partir de 1 tous les nœuds• num(r)=1• num(n)=i => num(FG(n))=2i et num(FD(n))=2i+1

1

32

4 56 7

8 9 10

Page 7: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Numérotation hiérarchique(2)

• 2 < i < n => le père du noeud d’indice i

est à l’indice (i div 2)

• 1 < i < (n div 2) => le fils gauche du nœud d’indice i

est en 2i

le fils droit du nœud d’indice i

est en 2i+1

Page 8: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

a b c d e f g h i j

Représentation sous forme d’un tableau

• Codage d’un arbre binaire parfait avec N nœuds par un tableau de N cases

• Un arbre binaire parfait comportant p nœuds et de hauteur

1 a

3 c2 b

4 d 5 e 6 f 7 g

8 h 9 i 10 j

1 2 3 4 5 6 7 8 9 10

p2log

Page 9: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Arbres binaires parfaits partiellement ordonnés

• ABPPO : est un arbre étiqueté par des éléments d’un ensemble muni d’un ordre total ( ex  < sur un ensemble des entiers).

• contenu(n)<contenu(fils(n)) pour tout noeud n et pour tout fils(n)

(1;3)

(3,9)(2;5)

(4;6) (5;7) (6;11) (7; 10)

(8; 12) (9;18) (10;13)

Ex. Arbre binaire parfait partiellement ordonné.

Notation : (index, contenu)

Page 10: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Tas

• Tas : un tableau représentant un arbre parfait partiellement ordonné.

- t[1] est la racine

- t[i div 2] est le père de t[i] pour tout i>1

- t[2*i] = FG(t[i]) (si il existe)

- t[2*i +1] = FD(t[i]) (si il existe)

- Si p est le nombre de nœuds de l’arbre et si 2*i=p, alors t[i] n’a qu’un seul fils t[p].

- Si i est supérieur à p div 2, t[i] est une feuille

Si M est la taille du tableau qui contient un tas de p éléments, alors p<M

Page 11: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

(1) Adjonction d’un élément :

- ajouter le nouvel élément à la nouvelle feuille créée à cet effet

- réorganiser le tas pour maintenir la cohérence

Ajout (1)

(1;3)

(3,9)(2;5)

(4;6) (5;7) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;4)

(1;3)

(3,9)(2;5)

(4;6) (5;4) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;7)

1

Page 12: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Ajout (2)

(1;3)

(3,9)(2;5)

(4;6) (5;4) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;7)

(1;3)

(3,9)(2;4)

(4;6) (5;5) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;7)

(2)

Page 13: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Ajout (3)

Procédure Ajouter(réf t: tableau[1..M] d’entiers; réf p:entier, x:entier);{on suppose que p<M lors de l’appel – pas de vérification du débordement}

Var i : entier;

Début

{une nouvelle feuille est crée et x est placé dedans}

p:=p+1; t[p]:=x; i:=p;

{conformité à la définition : on effectue les échanges tant que x est inférieur à son père}

Tq (i>1) et (t[i]<t[i div 2]) faire

échanger(t[i]), t[i div 2]);

i:=i div 2

FTq

Fin Ajouter

Page 14: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Suppression (1)

(2) Suppression de l’élément minimal :

- retirer le min et le renvoyer ;

- réorganiser le tas : placer la dernière feuille dans la racine et réordonner l’arbre : pour chaque nœud chercher le plut petit de ces deux fils et permuter.

Page 15: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Suppression (2)

(1;3)

(3,9)(2;4)

(4;6) (5;5) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;7)

(3)

(3,9)(2;4)

(4;6) (5;5) (6;11) (7; 10)

(8; 12) (9;18) (10;13) (11;7)

Page 16: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Suppression (3)

(1;7)

(3,9)(2;4)

(4;6) (5;5) (6;11) (7; 10)

(8; 12) (9;18) (10;13)

(1;4)

(3,9)(2;7)

(4;6) (5;5) (6;11) (7; 10)

(8; 12) (9;18) (10;13)

Page 17: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Suppression (4)

(1;4)

(3,9)(2;5)

(4;6) (5;7) (6;11) (7; 10)

(8; 12) (9;18) (10;13)

Page 18: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Suppression (5)Procédure SuppressionMin(réf t: tableau [1…M] d’entiers, réf p,min : entiers){on suppose que le tas n’est pas vide au moment de l’appel : p>0}Var i,j: entiers;Début { on retient le minimum} min:=t[1]; {réorganisation du tas} t[1]:=t[p]; p:=p-1; i:=1; {placer la dernière feuille à la racine} Tq i< (p div 2) faire {t[i] – n’est pas une feuille} { calcul de l’indice du plus petit des deux fils de t[i] ou de son seul fils 2*i=p} Si (2*i=p) ou (t[2*i]<t[2*i+1])

alors j:=2*i sinon j:=2*i +1FSiSi t[i] > t[j] {échange si la condition d’ordre n’est âs satisfaite} alors échanger(t[i], t[j]) i:=j; sinon sortir FSiFTq

FinSuppressionMin;

Page 19: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Utilisation d’un tas pour le tri d’un tableau (1)

• La base : le tri par sélection. Rechercher le minimum dans la partie du tableau non-triée et le placer à sa place définitive.

• Transformer le tableau en tas (avec la procédure « ajouter »)

• Utiliser le tas pour extraire le min et le placer à l afin du tableau

• (tri par ordre décroissant)

min

1 M

Tas de M éléments

min

1 M-1

Tas de M -1 éléments

Etc…

Page 20: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Utilisation d’un tas pour le tri d’un tableau (2)

Procédure Tri-par-Tas(réf t: tableau[1…M] d’entiers)Var p, min: entiers

Début

p:=0

Tq p<M faire {construction du tas}

ajouter(t,p,t[p+1]);

{p augmente de 1 à chaque appel de « ajouter »}

FTq

Tq p>1 faire

SuppressionMin(t,p,min)

{p diminue de 1 à chaque appel SuppressionMin}

t[p+1]:=min

FTq

Fin Tri-par-Tas

Page 21: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Complexité du tri pas tas

• Construction du tas : M appels de la procédure ajouter. Sa complexité dans le pire de cas est de

• La sélection de l’élément le plus petit se fait par M-1 appels de la procédure SuppressionMin. Sa complexité dans le pire des cas est de

• La complexité du tri par tas est donc en • Avec « comparaison » comme opération fondamentale.

M2log

M2log

MM 2log

Page 22: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Tri rapide(Quick Sort)

• Tri dichotomique : on partage une liste à trier ( tableau) en deux sous-listes L1,L2:

• Les éléments de L1 sont tous inférieurs à tous les éléments de L2

• On recommence jusqu’à avoir les sous-listes réduits à un élément

Page 23: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Principe de tri rapide

Élément Pivot

Choisir un élément pivot et placer les éléments inférieurs à gauche, supérieurs – à - droite

Pivot se trouve à sa place définitive

Choix du Pivot – 1er élément du tableau

Recommencer avec les deux sous-listes tq atteindre 1 élément

Page 24: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Exemple

• 101 212 21 123 47 79 195

• 47 79 21 101 123 212 195

• 21 47 79 101 123 212 195• • 21 47 79 101 123 212 195

• 21 47 79 101 123 195 212

Page 25: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Tri rapide – pivot

• Supposons que nous avons une procédure placer (réf t,val i,j,réf k):

• t est défini entre i, j,• k – emplacement définitif du pivot

(paramètre de sortie)• placer : place élément t[i] à la k-ème place

et renvoie k.

Page 26: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Algorithme général

• Procédure tri-rapide(réf t: tableau[1..n+1] des entiers; val i,j : entiers)

• {t[n+1] contint une sentinelle}• Var k : entier;• Début

– Si i<j alors {plus qu’un élément dans le sous-tableau}– Placer(t,i,j,k) {partitionner t selon le principe du pivot et placer

t[i] en k}– Tri-rapide(t,i,k-1)– Tri-rapide(t,k+1,j)– Fsi

Fin Tri-rapide

L’appel tri-rapide(t,1,n) provoque le tri du tableau complet

Page 27: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Procédure de partition et de placement(1)

G D

Avancer G Tq t[G] < Pivot

Reculer D Tq t[D] > Pivot

Permuter

G D

Page 28: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Procédure de partition et de placement(2)

• Ajout d’une sentinelle t[n+1] > t[i] pour tout i=1, ….,n

• Quand on appelle « placer » sur une partie de tableau qui n’est pas la fin du tableau, cette sentinelle existe : l’élément qui se trouve à l’indice j+1 est le pivot de l’appel précédent. Il est donc supérieur à tous les éléments entre i et j.

Page 29: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Procédure de partition et de placement(3)

• Procédure placer (réf t: tableau[1..n+1] des entiers; i,j, : entiers, réf k: entier)

• Var G : entier;• Début

– G:=i+1;k:=j– TQ G<k faire {Le pivot est t[i]

• TQ t[k] >t[i] k:=k-1;• TQ t[G] < t[i] G:=G+1;• Si G<K alors• échanger(t [G], t[k])• G:=G+1• k:=k-1FTQÉchanger(t[i], t[k])

Fin placer

Page 30: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Analyse

• Graphe d’appels est un arbre binaire• Complexité au pire• Opération fondamentale : comparaison.• A chaque niveau de l’arbre au pire n

comparaisons• La hauteur de l’arbre est

• C est donc (?)

n2log

Page 31: Chapitre VII. Tri Tri par tas Tri rapide. Tris faisant appel aux arbres Dichotomique (quick sort) Tri par fusion Tris par tas …

Version itérative• Procédure tri-rapide-iter(réf t : tableau[1..n+1]des entiers)• Var Q:PILE; i,j,k : entiers• i:=1;j:=n;pile-vide(Q);• TQ vrai faire• TQ i<j faire• placer(t,i,j,k) emplilerQ5i,j,k);j:=k-1• FTQ• Si non estèvide(Q) alors• (i,j,k):=sommet(Q); dépiler(Q);i:=k+1• sinon• sortir• FSIFTQFintri-rapide_iter