Tri Plus efficace CSI 2510 1 Tri rcursif

  • Slides: 87
Download presentation
Tri Plus efficace CSI 2510 1

Tri Plus efficace CSI 2510 1

Tri récursif Le tri récursif divise les données de grande taille en deux presque

Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement sur ces plus petites séries de données. Ceci est appelé le paradigme Diviser pour régner (Divide-and-Conquer). Nous verrons deux tris récursifs: ütri par fusion (Merge Sort) ütri rapide (Quick Sort) CSI 2510 2

Diviser pour règner Paradigme diviser pour régner : n Diviser: Si la taille des

Diviser pour règner Paradigme diviser pour régner : n Diviser: Si la taille des données est trop grande pour les traiter d’une façon directe alors les diviser en deux ou plusieurs sous-ensembles disjoints. n Appliquer récursivement: Utiliser l’approche diviser pour régner afin de résoudre les sous-problèmes associés aux sous-ensembles de données. n Régner: Prendre les solutions aux sous-problèmes et “fusionner” ces solutions afin d’obtenir la solution au problème initial. Le cas de base pour la récursivité est le sous-problème trivial, souvent de taille 0 ou 1. CSI 2510 3

Tri par fusion (Mergesort) CSI 2510 4

Tri par fusion (Mergesort) CSI 2510 4

Tri par fusion Le tri par fusion est un algorithme de tri basé sur

Tri par fusion Le tri par fusion est un algorithme de tri basé sur le paradigme diviser pour régner Comme le tri par tas n Il utilise un comparateur n Il est exécuté en un temps O(n log n) Contrairement au tri par tas n Il n'utilise pas une file à priorité auxiliaire n Il accède aux données d’une manière séquentielle (convenable pour trier des données sur un disque) CSI 2510 5

Tri par fusion Le tri par fusion sur une séquence d'entrée S avec n

Tri par fusion Le tri par fusion sur une séquence d'entrée S avec n éléments consiste en trois étapes: n n n Diviser: diviser S en 2 groupes d’environ n/2 éléments chacun Appliquer récursivement : trier récursivement S 1 et S 2 Régner: fusionner S 1 et S 2 dans une séquence triée CSI 2510 6

Fusion de deux séquences triées : L’étape ‘Régner’ fusionne les 2 séquences triées A

Fusion de deux séquences triées : L’étape ‘Régner’ fusionne les 2 séquences triées A et B dans une séquence trié S Comment? Comparer l'élément le plus petit de A et celui de B et insérer le plus petit dans S La fusion des deux séquences triées, chacune avec n/2 éléments prend un temps O (n) CSI 2510 7

Tri par fusion Algorithm merge. Sort(S, C) Input séquence S avec n éléments, comparateur

Tri par fusion Algorithm merge. Sort(S, C) Input séquence S avec n éléments, comparateur C Output séquence S triée selon C if S. size() > 1 (S 1, S 2) partition(S, n/2) merge. Sort(S 1, C) merge. Sort(S 2, C) S merge(S 1, S 2, C) e Pas c a l p ur- s CSI 2510 8

2 5 6 9 12 15 20 27 4 7 10 13 16 S

2 5 6 9 12 15 20 27 4 7 10 13 16 S 2 4 A B 5 6 CSI 2510 9

Fusion de deux séquences triées Algorithm merge(A, B, C) Input séquences triées A et

Fusion de deux séquences triées Algorithm merge(A, B, C) Input séquences triées A et B comparateur C Output séquence triée de A B S séquence vide while !A. is. Empty() !B. is. Empty() if C. is. Less. Than(A. first(). element(), B. first(). element()) S. insert. Last(A. remove(A. first())) else S. insert. Last(B. remove(B. first())) while !A. is. Empty() S. insert. Last(A. remove(A. first())) while !B. is. Empty() S. insert. Last(B. remove(B. first())) return S CSI 2510 Pas e c a pl r u s 10

Arbre de tri par fusion L’exécution du tri par fusion est représenté comme un

Arbre de tri par fusion L’exécution du tri par fusion est représenté comme un arbre binaire n chaque nœud représente un appel récursif du tri par fusion et emmagasine Ø la séquence non triée avant l'exécution et sa partition Ø La séquence triée à la fin de l'exécution n la racine représente l’appel initial n les enfants sont les appels pour les sous-séquences n les feuilles sont les appels pour les séquences de taille 0 ou 1 7 2 7 9 4 2 4 7 9 2 2 7 7 7 9 2 2 4 4 9 9 9 CSI 2510 4 4 11

Tri par fusion – Exemple 1 Partition 7 2 9 4 3 8 6

Tri par fusion – Exemple 1 Partition 7 2 9 4 3 8 6 1 CSI 2510 - Aut. 09 - Tris recursifs 12 12

Tri par fusion – Exemple 1 Appel récursif + partition 7 2 9 4

Tri par fusion – Exemple 1 Appel récursif + partition 7 2 9 4 3 8 6 1 7 2 9 4 CSI 2510 - Aut. 09 - Tris recursifs 13 13

Tri par fusion – Exemple 1 Appel récursif + partition 7 2 9 4

Tri par fusion – Exemple 1 Appel récursif + partition 7 2 9 4 3 8 6 7 2 9 4 7 2 CSI 2510 - Aut. 09 - Tris recursifs 14 14

Tri par fusion – Exemple 1 Appel récursif + appel de base 7 2

Tri par fusion – Exemple 1 Appel récursif + appel de base 7 2 9 4 3 8 6 1 7 2 9 4 7 7 CSI 2510 - Aut. 09 - Tris recursifs 15 15

Tri par fusion – Exemple 1 Appel récursif + appel de base 7 2

Tri par fusion – Exemple 1 Appel récursif + appel de base 7 2 9 4 3 8 6 1 7 2 9 4 7 2 7 7 2 2 CSI 2510 - Aut. 09 - Tris recursifs 16 16

Tri par fusion – Exemple 1 Fusion 7 2 9 4 3 8 6

Tri par fusion – Exemple 1 Fusion 7 2 9 4 3 8 6 1 7 2 9 4 7 2 2 7 7 7 2 2 CSI 2510 - Aut. 09 - Tris recursifs 17 17

Tri par fusion – Exemple 1 Appel récursif, …, appel de base, fusion 7

Tri par fusion – Exemple 1 Appel récursif, …, appel de base, fusion 7 2 9 4 3 8 6 1 7 2 9 4 7 2 2 7 7 7 2 2 9 4 4 9 9 9 4 4 CSI 2510 - Aut. 09 - Tris recursifs 18 18

Tri par fusion - Example Fusion 7 2 9 4 3 8 6 1

Tri par fusion - Example Fusion 7 2 9 4 3 8 6 1 7 2 9 4 2 4 7 9 7 2 2 7 7 7 2 2 9 4 4 9 9 9 4 4 CSI 2510 - Aut. 09 - Tris recursifs 19 19

Tri par fusion - Example Appel récursif, …, appel de base, fusion 7 2

Tri par fusion - Example Appel récursif, …, appel de base, fusion 7 2 9 4 3 8 6 1 7 2 9 4 2 4 7 9 7 2 2 7 7 7 2 2 3 8 6 1 1 3 8 6 9 4 4 9 9 9 4 4 3 8 3 3 CSI 2510 - Aut. 09 - Tris recursifs 8 8 6 1 1 6 6 6 1 1 20 20

Tri par fusion – Exemple 1 Fusion 7 2 9 4 3 8 6

Tri par fusion – Exemple 1 Fusion 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 7 2 2 7 7 7 2 2 3 8 6 1 1 3 8 6 9 4 4 9 9 9 4 4 3 8 3 3 CSI 2510 - Aut. 09 - Tris recursifs 8 8 6 1 1 6 6 6 1 1 21 21

98 23 45 14 6 67 33 42 Tri par fusion – Exemple 2

98 23 45 14 6 67 33 42 Tri par fusion – Exemple 2 CSI 2510 22

98 23 45 14 6 67 33 42 CSI 2510 23

98 23 45 14 6 67 33 42 CSI 2510 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 6 67 33 42 45 14 CSI 2510 24

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 98 6 67 33 42 45 14 23 CSI 2510 25

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 98 6 67 33 42 45 14 23 Fusionner CSI 2510 26

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 98 6 67 33 42 45 14 23 23 Fusionner CSI 2510 27

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 98 6 67 33 42 45 14 23 23 98 Fusionner CSI 2510 28

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 6 67 33 42 45 14 23 98 CSI 2510 29

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 6 67 33 42 45 14 23 98 Fusionner CSI 2510 30

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 Fusionner CSI 2510 31

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 Fusionner CSI 2510 32

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 Fusionner CSI 2510 33

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 14 Fusionner CSI 2510 34

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 14 23 Fusionner CSI 2510 35

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 14 23 45 Fusionner CSI 2510 36

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 14 23 45 98 Fusionner CSI 2510 37

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 45 6 67 33 42 14 14 45 14 23 45 98 CSI 2510 38

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 6 67 6 33 42 67 14 45 14 23 45 98 CSI 2510 39

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 6 67 6 33 42 67 14 45 Fusionner 14 23 45 98 CSI 2510 40

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 6 33 42 67 6 Fusionner 14 23 45 98 CSI 2510 41

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 6 33 42 67 6 67 Fusionner 14 23 45 98 CSI 2510 42

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 42 6 67 14 23 45 98 CSI 2510 43

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 42 6 67 Fusionner 14 23 45 98 CSI 2510 44

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 Fusionner 14 23 45 98 CSI 2510 45

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 Fusionner 14 23 45 98 CSI 2510 46

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 14 23 45 98 Fusionner CSI 2510 47

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 6 14 23 45 98 Fusionner CSI 2510 48

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 6 33 14 23 45 98 Fusionner CSI 2510 49

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 6 33 42 14 23 45 98 Fusionner CSI 2510 50

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 Fusionner CSI 2510 51

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 Fusionner CSI 2510 52

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 Fusionner CSI 2510 53

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 6 67 33 42 45 14 45 23 98 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 Fusionner CSI 2510 54

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 Fusionner CSI 2510 55

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 Fusionner CSI 2510 56

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 6 67 33 42 6 33 14 45 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 42 Fusionner CSI 2510 57

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 42 45 Fusionner CSI 2510 58

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 42 45 67 Fusionner CSI 2510 59

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 42 45 67 98 Fusionner CSI 2510 60

98 23 45 14 6 67 33 42 98 23 45 14 98 23

98 23 45 14 6 67 33 42 98 23 45 14 98 23 23 98 6 67 33 42 45 14 14 45 6 67 33 42 6 33 67 6 67 42 33 42 67 14 23 45 98 6 14 23 33 42 45 67 98 CSI 2510 61

98 23 45 14 6 67 33 42 6 14 23 33 42 45

98 23 45 14 6 67 33 42 6 14 23 33 42 45 67 98 CSI 2510 62

Analyse du tri par fusion Le hauteur h de l'arbre de tri par fusion

Analyse du tri par fusion Le hauteur h de l'arbre de tri par fusion est O(log n) n à chaque appel récursif, nous divisons la séquence en deux La quantité de travail aux nœuds de profondeur i est O(n) n on divise et fusionne 2 i séquences de taille n/2 i n on fait 2 i+1 appels récurrents Ainsi, le temps total d’exécution du tri par fusion est O(n log n) profondeur #séqs taille 0 1 n 1 2 n/2 i 2 i n/2 i … … … CSI 2510 63

Fusion CSI 2510 64

Fusion CSI 2510 64

Tri fusion CSI 2510 65

Tri fusion CSI 2510 65

Tri rapide (Quicksort) CSI 2510 66

Tri rapide (Quicksort) CSI 2510 66

Tri rapide est un algorithme de triage aléatoire basé sur le paradigme divide-and-conquer: n

Tri rapide est un algorithme de triage aléatoire basé sur le paradigme divide-and-conquer: n x Diviser: choisir un élément au hasard x (appelé le pivot) et partitionner S en sous-ensembles w L: les éléments plus petit que x w E: les éléments égaux à x w G: les éléments plus grand que x n n Appliquer récursivement : tri L et G Conquérir : fusionner L, E et G x L E G x CSI 2510 67

x S Pas e c a Pl r u s Quick. Sort(S) x L

x S Pas e c a Pl r u s Quick. Sort(S) x L E G i PIVOT x S. elem. At. Rank(i) (L, G) Partition(S, x) Quick. Sort(L) Quick. Sort(G) CSI 2510 68

Partition Nous partitionnons une séquence d'entrée comme suit : n n Nous enlevons, un

Partition Nous partitionnons une séquence d'entrée comme suit : n n Nous enlevons, un à un, chaque élément y de S et Nous insérons y dans L, E ou G, dépendant du résultat de la comparaison avec le pivot x Chaque insertion et suppression sont au début ou à la fin d'une séquence, et alors il prend un temps O (1) Ainsi, l'étape de partition du tri rapide prend un temps O(n) Pas e c a pl r u s Algorithm partition(S, p) entrées séquence S, position p du pivot sortie sous-séquences L, E, G des éléments de S plus petits que, égaux à, ou plus grands que le pivot, resp. L, E, G séquences vides x S. remove(p) while !S. is. Empty() y S. remove(S. first()) if y < x L. insert. Last(y) else if y = x E. insert. Last(y) else { y > x } G. insert. Last(y) return L, E, G CSI 2510 69

Tri rapide - Arbre Une exécution du tri rapide est représentée par un arbre

Tri rapide - Arbre Une exécution du tri rapide est représentée par un arbre binaire: n Chaque nœud représente un appel récursif du tri rapide et emmagasine: Ø La séquence non triée avant l'exécution et son pivot Ø La séquence triée à la fin de l'exécution n La racine est l'appel initial n Les feuilles sont les appels sur les sous-séquences de taille 0 ou 1 7 4 9 6 2 2 4 6 7 9 4 2 2 4 2 2 4 4 7 9 7 7 CSI 2510 - Aut. 09 - Tris recursifs 9 9 70 70

Tri rapide – Exemple 1 Sélection du pivot 7 2 9 43 7 6

Tri rapide – Exemple 1 Sélection du pivot 7 2 9 43 7 6 1 CSI 2510 - Aut. 09 - Tris recursifs 71 71

Tri rapide – Exemple 1 Partition, appel récursif, sélection du pivot 7 2 9

Tri rapide – Exemple 1 Partition, appel récursif, sélection du pivot 7 2 9 4 3 7 6 1 2 4 3 1 CSI 2510 - Aut. 09 - Tris recursifs 72 72

Tri rapide – Exemple 1 Partition, appel récursif, appel de base 7 2 9

Tri rapide – Exemple 1 Partition, appel récursif, appel de base 7 2 9 43 7 6 1 2 4 3 1 1 1 CSI 2510 - Aut. 09 - Tris recursifs 73 73

Tri rapide – Exemple 1 Appel récursif, …, appel de base, joindre 7 2

Tri rapide – Exemple 1 Appel récursif, …, appel de base, joindre 7 2 9 43 7 6 1 2 4 3 1 1 2 3 4 1 1 4 3 3 4 4 4 CSI 2510 - Aut. 09 - Tris recursifs 74 74

Tri rapide – Exemple 1 Partition, appel récursif, …, appel de base 7 2

Tri rapide – Exemple 1 Partition, appel récursif, …, appel de base 7 2 9 43 7 6 1 2 4 3 1 1 2 3 4 1 1 7 9 7 4 3 3 4 4 4 CSI 2510 - Aut. 09 - Tris recursifs 75 75

Tri rapide – Exemple 1 Partition, …, appel récursif, appel de base 7 2

Tri rapide – Exemple 1 Partition, …, appel récursif, appel de base 7 2 9 43 7 6 1 2 4 3 1 1 2 3 4 1 1 7 9 7 4 3 3 4 3 3 9 9 4 4 CSI 2510 - Aut. 09 - Tris recursifs 76 76

Tri rapide – Exemple 1 Joindre, joindre 7 2 9 4 3 7 6

Tri rapide – Exemple 1 Joindre, joindre 7 2 9 4 3 7 6 1 1 2 3 4 6 7 7 9 2 4 3 1 1 2 3 4 1 1 7 9 7 7 7 9 4 3 3 4 3 3 9 9 4 4 CSI 2510 - Aut. 09 - Tris recursifs 77 77

Pire de cas : temps d'exécution Le pire de cas pour le tri rapide

Pire de cas : temps d'exécution Le pire de cas pour le tri rapide arrive quand le pivot est l’élément unique minimum ou maximum Un des ensembles L et G a la taille n - 1 et l'autre a la taille 0 Le temps d’exécution est proportionnel à la somme n + (n - 1) + … + 2 + 1 Alors, dans le pire des cas, le temps d'exécution du tri rapide est O(n 2) profondeur temps 0 n 1 n-1 … … … n-1 1 CSI 2510 78

Temps moyen d'exécution Considérer un appel récursive au tri rapide sur une séquence de

Temps moyen d'exécution Considérer un appel récursive au tri rapide sur une séquence de taille s. Soit: n n Pour la moitié des appels: la taille de L et G est inférieure à 3 s/4 Pour l’autre moitié: soit L ou G a une taille plus grande que 3 s/4 En moyenne, chaque niveau i traitera une séquence de taille (3/4)in Le dernier niveau est atteint lorsque (3/4)in = 1. C’est-à-dire i=log 4/3 n La hauteur de l’arbre est donc O(log n) CSI 2510 79

Temps prévu d'exécution Ainsi, nous avons n n n La hauteur prévue de l'arbre

Temps prévu d'exécution Ainsi, nous avons n n n La hauteur prévue de l'arbre de tri rapide est O(log n) La quantité de travail total fait aux nœuds de même profondeur de l'arbre de tri rapide est O(n) Ainsi, le temps prévu d’exécution est O(n log n) CSI 2510 80

Tri rapide sur place Dans l'étape de partition, nous utilisons des opérations de remplacement

Tri rapide sur place Dans l'étape de partition, nous utilisons des opérations de remplacement pour réarranger les éléments des séquences d’entrées tel que n n n les éléments plus petits que le pivot ont des rangs plus petit que h les éléments égaux au pivot ont des rangs entre h et k les éléments plus grands que le pivot ont des rangs plus grand que k Les appels récursifs considèrent n n les éléments avec un rang plus petit que h les éléments avec un rang plus grand que k CSI 2510 81

Tri rapide sur place Étape 1 pour Diviser: l scrute la séquence de la

Tri rapide sur place Étape 1 pour Diviser: l scrute la séquence de la gauche, et r de la droite Un échange est exécuté quand l est à un élément plus grand que le pivot et r est à un élément plus petit que le pivot. CSI 2510 82

Tri rapide sur place Un échange final avec le pivot complète l’étape pour Diviser

Tri rapide sur place Un échange final avec le pivot complète l’étape pour Diviser CSI 2510 83

Tri rapide sur place On partitionne la séquence en utilisant deux indices pour la

Tri rapide sur place On partitionne la séquence en utilisant deux indices pour la décomposer en L, E et G Répéter jusqu'à ce que l et r se croisent: n l parcourt le tableau de gauche à droite jusqu’à trouver un élément ≥ le pivot n r parcourt le tableau de droite à gauche jusqu’à trouver un élément < le pivot n Échanger les éléments d’indices l et r Algorithm in. Place. Partition(p, s, e) Entrées: position p du pivot; s et e sont les limites dans la séquence Sorties: l et r tel que : r-1=indice du dernier élément plus petit que le pivot l+1=indice du premier élément plus grand que le pivot l s, r e-1 swap S[p] with S[e], p e while l ≤ r while S[l] < S[p] and r > l l l+1 while S[r] > S[p] and r > l r r-1 if r > l swap S[r] with S[l] swap S[l] with S[p] return r, l CSI 2510 84

Tri rapide sur place Algorithm in. Place. Quick. Sort(S, l, r) Entrées séquence S,

Tri rapide sur place Algorithm in. Place. Quick. Sort(S, l, r) Entrées séquence S, rangs l et r Sortirs séquence S avec les éléments des rangs entre l et r réarrangés dans l'ordre croissant if l r return i entier aleatoire entre l et r x S. elem. At. Rank(i) (h, k) in. Place. Partition(i, l, r) in. Place. Quick. Sort(S, l, h - 1) in. Place. Quick. Sort(S, k + 1, r) CSI 2510 85

Tri rapide sur place CSI 2510 86

Tri rapide sur place CSI 2510 86

Algorithm Time Tri par sélection O(n 2) tous les cas sur-place lent (acceptable avec

Algorithm Time Tri par sélection O(n 2) tous les cas sur-place lent (acceptable avec peu de données) Tri par insertion O(n 2) pire et moyen sur-place lent (acceptable avec peu de données) Tri rapide O(n 2) au pire O(n log n) en moyenne sur-place, partition très simple le plus rapide (bon avec un grand nombre d’entrées) Tri par monceau O(n log n) tous les cas sur-place rapide (bon avec un grand nombre d’entrées) O(n log n) tous les cas accès séquentiel (distribuées) fast (bon avec un très grand nombre d’entrées) Tri fusion CSI 2510 Notes 87