La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.

Présentations similaires


Présentation au sujet: "CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement."— Transcription de la présentation:

1 CSI25101 Tri Plus efficace

2 CSI25102 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)

3 CSI25103 Diviser pour règner Paradigme diviser pour régner : 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. 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. 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.

4 CSI25104 Tri par fusion (Mergesort)

5 CSI25105 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 Il utilise un comparateur Il est exécuté en un temps O(n log n) Contrairement au tri par tas Il n'utilise pas une file à priorité auxiliaire Il accède aux données d’une manière séquentielle (convenable pour trier des données sur un disque)

6 CSI25106 Tri par fusion Le tri par fusion sur une séquence d'entrée S avec n éléments consiste en trois étapes: 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

7 CSI25107 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)

8 CSI25108 Tri par fusion Algorithm mergeSort(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) mergeSort(S 1, C) mergeSort(S 2, C) S  merge(S 1, S 2, C) Pas sur-place

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

10 CSI251010 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.isEmpty()   B.isEmpty() if C.isLessThan(A.first().element(), B.first().element()) S.insertLast(A.remove(A.first())) else S.insertLast(B.remove(B.first())) while  A.isEmpty() S.insertLast(A.remove(A.first())) while  B.isEmpty() S.insertLast(B.remove(B.first())) return S Pas sur-place

11 CSI251011 Arbre de tri par fusion 7 2  9 4  2 4 7 9 7  2  2 79  4  4 9 7  72  29  94  4 L’exécution du tri par fusion est représenté comme un arbre binaire 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 la racine représente l’appel initial les enfants sont les appels pour les sous-séquences les feuilles sont les appels pour les séquences de taille 0 ou 1

12 CSI251012 Tri par fusion – Exemple1 Partition 7  72  29  94  43  38  86  61  1 7 2 9 4  3 8 6 1 12 CSI2510 - Aut.09 - Tris recursifs

13 CSI251013 Appel récursif + partition 7 2  9 4 7 2 9 4  3 8 6 1 13 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1

14 CSI251014 7 2  9 4 7  2 7 2 9 4  3 8 6 14 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1 Appel récursif + partition

15 CSI251015 7 2  9 4 7  2 7  77  7 7 2 9 4  3 8 6 1 15 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1 Appel récursif + appel de base

16 CSI251016 7 2  9 4 7  2 7  77  72  22  2 7 2 9 4  3 8 6 1 16 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1 Appel récursif + appel de base

17 CSI251017 Fusion 7 2  9 4 7  2  2 7 7  77  72  22  2 7 2 9 4  3 8 6 1 17 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1

18 CSI251018 Appel récursif, …, appel de base, fusion 7 2  9 4 7  2  2 7 9 4  4 9 7  77  72  22  29  94  4 7 2 9 4  3 8 6 1 18 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1

19 CSI251019 Fusion 7 2  9 4  2 4 7 9 7  2  2 79 4  4 9 7  77  72  22  29  94  4 7 2 9 4  3 8 6 1 19 CSI2510 - Aut.09 - Tris recursifs Tri par fusion - Example

20 CSI251020 7 2  9 4  2 4 7 9 3 8 6 1  1 3 8 6 7  2  2 79 4  4 93 8  3 86 1  1 6 7  77  72  22  29  94  43  33  38  88  86  66  61  11  1 7 2 9 4  3 8 6 1 20 CSI2510 - Aut.09 - Tris recursifs Tri par fusion - Example Appel récursif, …, appel de base, fusion

21 CSI251021 Fusion 7 2  9 4  2 4 7 93 8 6 1  1 3 8 6 7  2  2 79 4  4 93 8  3 86 1  1 6 7  77  72  22  29  94  43  33  38  88  86  66  61  11  1 7 2 9 4  3 8 6 1  1 2 3 4 6 7 8 9 21 CSI2510 - Aut.09 - Tris recursifs Tri par fusion – Exemple1

22 CSI251022 674523146339842 Tri par fusion – Exemple2

23 CSI251023 674523146339842 674523146339842

24 CSI251024 674523146339842 674523146339842 45231498

25 CSI251025 674523146339842 674523146339842 45231498 2398

26 CSI251026 674523146339842 674523146339842 45231498 2398 Fusionner

27 CSI251027 674523146339842 674523146339842 45231498 2398 23 Fusionner

28 CSI251028 674523146339842 674523146339842 45231498 2398 2398 Fusionner

29 CSI251029 674523146339842 674523146339842 45231498 23984514 2398

30 CSI251030 674523146339842 674523146339842 45231498 23984514 Fusionner 2398

31 CSI251031 674523146339842 674523146339842 45231498 23984514 Fusionner 2398

32 CSI251032 674523146339842 674523146339842 45231498 23984514 45 Fusionner 239814

33 CSI251033 674523146339842 674523146339842 45231498 23984514 Fusionner 98451423

34 CSI251034 674523146339842 674523146339842 45231498 23984514 Fusionner 9814 2345

35 CSI251035 674523146339842 674523146339842 45231498 23984514 Fusionner 2314 23 9845

36 CSI251036 674523146339842 674523146339842 45231498 23984514 Fusionner 23984514 2345

37 CSI251037 674523146339842 674523146339842 45231498 23984514 Fusionner 23984514 234598

38 CSI251038 674523146339842 674523146339842 45231498 23984514 6763342 23984514 234598

39 CSI251039 674523146339842 674523146339842 45231498 23984514 6763342 676 23984514 234598

40 CSI251040 674523146339842 674523146339842 45231498 23984514 6763342 676 Fusionner 23984514 234598

41 CSI251041 674523146339842 674523146339842 45231498 23984514 6763342 676 6 Fusionner 23984514 234598

42 CSI251042 674523146339842 674523146339842 45231498 23984514 6763342 676 Fusionner 239845146 234598

43 CSI251043 674523146339842 674523146339842 45231498 23984514 6763342 6763342 23984514676 14234598

44 CSI251044 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 23984514676 14234598

45 CSI251045 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 3323984514676 14234598

46 CSI251046 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 422398451467633 14234598

47 CSI251047 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 14234598

48 CSI251048 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 2398451464233 14234598 6 67

49 CSI251049 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 23984514633 14234598 633 6742

50 CSI251050 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 2398451464233 14234598 63342 67

51 CSI251051 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 14234598 6334267

52 CSI251052 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 234598 334267 14 6

53 CSI251053 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 234598 64267 6 14 33

54 CSI251054 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 144598 64267 614 23 33

55 CSI251055 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 142398 64267 61423 45 33

56 CSI251056 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 142398 63367 6142333 45 42

57 CSI251057 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 142398 63342 614233342 45 67

58 CSI251058 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 142345 63342 61423334245 98 67

59 CSI251059 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 14234598 6334267 6142333424567

60 CSI251060 674523146339842 674523146339842 45231498 23984514 6763342 6763342 Fusionner 239845146764233 14234598 6334267 614233342456798

61 CSI251061 674523146339842 674523146339842 45231498 23984514 6763342 6763342 239845146764233 14234598 6334267 614233342456798

62 CSI251062 674523146339842 614233342456798

63 CSI251063 Analyse du tri par fusion profondeur#séqstaille 01n 12 n2n2 i2i2i n2in2i ……… Le hauteur h de l'arbre de tri par fusion est O(log 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) on divise et fusionne 2 i séquences de taille n  2 i on fait 2 i  1 appels récurrents Ainsi, le temps total d’exécution du tri par fusion est O(n log n)

64 Fusion CSI251064

65 Tri fusion CSI251065

66 CSI251066 Tri rapide (Quicksort)

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

68 CSI251068 i  PIVOT x  S.elemAtRank(i) (L,G)  Partition(S,x) QuickSort(L) QuickSort(G) QuickSort(S) x S x L G E Pas sur-Place

69 CSI251069 Partition Nous partitionnons une séquence d'entrée comme suit : 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) 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.isEmpty() y  S.remove(S.first()) if y < x L.insertLast(y) else if y = x E.insertLast(y) else { y > x } G.insertLast(y) return L, E, G Pas sur-place

70 CSI251070 Tri rapide - Arbre Une exécution du tri rapide est représentée par un arbre binaire: 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 La racine est l'appel initial 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 47 9  7 9 2  29  9 70 CSI2510 - Aut.09 - Tris recursifs 4  47  7

71 CSI251071 Sélection du pivot 7 2 9 4 3 7 6 1 71 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1

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

73 CSI251073 2 4 3 1 1  11  1 7 2 9 4 3 7 6 1 73 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1 Partition, appel récursif, appel de base

74 CSI251074 7 2 9 4 3 7 6 1 2 4 3 1  1 2 3 4 1  11  14 3  3 4 4  44  4 74 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1 Appel récursif,…, appel de base, joindre, joindre

75 CSI251075 7 9 7 7 2 9 4 3 7 6 1 2 4 3 1  1 2 3 4 1  11  14 3  3 4 4  44  4 75 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1 Partition, appel récursif,…, appel de base

76 CSI251076 Partition, …, appel récursif, appel de base 7 9 7 7 2 9 4 3 7 6 1 2 4 3 1  1 2 3 4 1  11  14 3  3 4 3  34  44  4 9  99  9 76 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1

77 CSI251077 Joindre, joindre 7 9 7  7 7 9 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  11  14 3  3 4 3  34  44  4 9  99  9 77 CSI2510 - Aut.09 - Tris recursifs Tri rapide – Exemple1

78 CSI251078 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  Alors, dans le pire des cas, le temps d'exécution du tri rapide est O(n 2 ) profondeurtemps 0n 1 n  1 …… 1 …

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

80 CSI251080 Temps prévu d'exécution Ainsi, nous avons 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)

81 CSI251081 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 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 les éléments avec un rang plus petit que h les éléments avec un rang plus grand que k Tri rapide sur place

82 CSI251082 É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. Tri rapide sur place

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

84 CSI251084 Algorithm inPlacePartition(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] 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 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: l parcourt le tableau de gauche à droite jusqu’à trouver un élément ≥ le pivot r parcourt le tableau de droite à gauche jusqu’à trouver un élément < le pivot Échanger les éléments d’indices l et r Tri rapide sur place

85 CSI251085 Algorithm inPlaceQuickSort(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.elemAtRank(i) (h, k)  inPlacePartition(i,l,r) inPlaceQuickSort(S, l, h  1) inPlaceQuickSort(S, k  1, r) Tri rapide sur place

86 CSI251086

87 CSI251087 AlgorithmTimeNotes 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) Tri fusion O(n log n) tous les cas accès séquentiel (distribuées) fast (bon avec un très grand nombre d’entrées)


Télécharger ppt "CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement."

Présentations similaires


Annonces Google