Tri Plus efficace CSI 2510 1 Tri rcursif
- Slides: 87
Tri Plus efficace CSI 2510 1
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 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 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 é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 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 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 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 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 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 1 CSI 2510 - Aut. 09 - Tris recursifs 12 12
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 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 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 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 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 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 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 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 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 CSI 2510 22
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 6 67 33 42 45 14 CSI 2510 24
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 67 98 CSI 2510 62
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
Tri fusion CSI 2510 65
Tri rapide (Quicksort) CSI 2510 66
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 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 à 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 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 1 CSI 2510 - Aut. 09 - Tris recursifs 71 71
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 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 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 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 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 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 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 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 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 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 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 CSI 2510 83
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, 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
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
- Csi 2510
- Csi 2510
- Poesia marinetti automobile
- Crepuscolari
- Elementi della comunicazione verbale
- Rogoff tutoring efficace
- Metodo di studio liceo
- Valore efficace onda quadra
- Area efficace
- Barriere alla comunicazione
- Figura con r
- Principes fondamentaux de la communication
- Carlo bosna
- Ivan bricault
- Massa efficace elettrone
- Je contiens du sucre sans être sucré qui suis-je
- Sylur dewon
- Plus j'apprends plus je me rends compte de mon ignorance
- Jerusalem cite de dieu chant
- Emerson a6740
- Csi dinner edition answers
- Elg2911
- Csi 201
- Placement of diacritics is examining
- Epbb calc
- Www pge com standardnem
- Csi como
- Csi incentive
- Law & order: criminal mind
- Csi uottawa
- Csi bible symposium
- Csi 3140
- Itil 7 step continuous improvement process
- Csi 3140
- Csi
- Csi 3120
- Csi
- Csi 2911
- Csi office on aging
- Csi 2132
- Comparison context clues examples
- While the csi team is searching the crime scene, _____.
- Csi 201
- Csi varese
- Boston massacre csi
- Agenda scramble words
- Csi 3531
- Csi bible
- Corporate spending innovations (csi)
- Csi-321 introduction to computing applications
- Csi 3131
- Csi basics
- Csi 3140
- A csi lab technician _____.
- Csi 3131
- Csi 321
- Csi 2101
- Cara menghitung csi
- Csi csif comunidad valenciana enseñanza
- Project scheduling in software engineering
- Csi 201
- Csi atherectomy setup
- Csi great lakes region
- Amir afrasiabi
- Csi framework
- Csi uniform drawing system
- Csi 3140
- Csi human resources
- Mario marchand
- Csi bible
- Csi 2911
- Csi bones
- Csi 3140
- Csi search patterns
- Csi in project management
- Csi la molina
- Xcad plugin
- Csi computer crime and security survey
- Master csi
- Csi 101
- Csi2911
- Bnl csi
- Csi cable jamestown
- Csi-2 to usb
- Csi
- Csi 3120
- Katrin csi
- Csi 3140