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

Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département dinformatique et de génie logiciel Édition septembre 2009.

Présentations similaires


Présentation au sujet: "Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département dinformatique et de génie logiciel Édition septembre 2009."— Transcription de la présentation:

1 Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département dinformatique et de génie logiciel Édition septembre 2009

2 Plan Définitions et propriétés Les algorithmes de tri simples et leur complexité Les algorithmes de tri complexes et leur complexité Le tri rapide (QuickSort) Le tri-fusion (MergeSort) Le tri par arbre (TreeSort) Le tri par monceau (HeapSort)

3 Traitement de données triées Le traitement de données déjà triées est plus rapide. Nécessaire pour le traitement séquentiel dintervalles. Il faut trier des données à bas coût ! nb de comparaisons nb de déplacements déléments espace mémoire requis

4 Tri selon une relation dordre Besoin : attribut de tri (clé) :, que lon peut comparer { } (c.-à-d. ordre total) déplacer toute linformation : ou, + indirection vers linformation Il faut trier des données à bas coût ! nb de comparaisons nb de déplacements déléments espace mémoire requis

5 Critères d'analyse Complexité en temps : 2 critères de base nombre de comparaisons entre clés nombre de transferts (ou déchanges) d'éléments Complexité en place mémoire : nécessaire au tri tri sur place (in situ) : en O(1) tri à côté : en O(n) tri récursif : utilise une pile Stabilité conserve l'ordre originel pour éléments de clés égales Progressivité à l'étape k trie les k premiers éléments de la liste Configuration particulière des données : aléatoires, triées, inversées, égales, presque triées

6 Critères d'analyse Meilleur cas: tableau déjà trié Cas moyen: tableau aléatoire Pire cas: tableau trié à lenvers

7 Les algorithme de tri Les algorithmes de tri «classiques»: Tris élémentaires tri insertion; tri sélection; Etc.. Tris dichotomiques tri rapide (Quick Sort); tri fusion; Tris par structure tri par arbre (Tree Sort); tri par monceau (Heap Sort) tri pigeonnier (Pigeon Hole). tri basique Tri aléatoire … et le Bogo tri

8 Méthodes simples de tri Intérêts pédagogiques (terminologie et mécanismes fondamentaux) Tris simples plus efficaces sur des petites listes (moins de 50 éléments) sur des listes presque triées sur des listes contenant un grand nombre de clés égales Certains tris complexes sont améliorés en faisant appel à des tris simples sur une partie des données

9 Tris simples Algorithme#1 : insérer chacun des n éléments à la bonne place dans le tableau créé jusquici Tri par insertion : 44,55,12,42,94,18,06,67

10 Tris simples tri par insertion : 44,55,12,42,94,18,06,67

11 Tris simples tri par insertion : 44,55,12,42,94,18,06,67

12 Tris simples tri par insertion : 44,55,12,42,94,18,06,67 44

13 Tris simples tri par insertion : 44,55,12,42,94,18,06,67 44

14 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55

15 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55

16 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55

17 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55

18 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55

19 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55

20 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94

21 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94

22 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94

23 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94

24 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94 06,12,18,42,44,55,94

25 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94 06,12,18,42,44,55,94

26 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94 06,12,18,42,44,55,94 06,12,18,42,44,55,67,94

27 Tris simples tri par insertion : 44,55,12,42,94,18,06, ,55 12,44,55 12,42,44,55 12,42,44,55,94 12,18,42,44,55,94 06,12,18,42,44,55,94 06,12,18,42,44,55,67,94

28 Tris simples template Tri par insertion template void TriInsertion(vector & Tableau, int n) { int j; T Tmp; for (int i=1;i=0) && (Tmp =0) && (Tmp

29 Tris simples tri stable? tri in situ? progressif? Meilleur cas : séquence triée nb de comparaisons ? nb de déplacements ? Pire cas : séquence triée inverse nb de comparaisons ? nb de déplacements ? Tri par insertion insérer chacun des n éléments à la bonne place dans le tableau créé jusquici

30 Tris simples Tri par insertion : insérer chacun des n éléments à la bonne place dans le tableau créé jusquici … tri stable? tri in situ? progressif? Meilleur cas : séquence triée nb de comparaisons ? O(n) O(n log n) nb de déplacements ? O(1) Pire cas : séquence triée inverse nb de comparaisons ? O(n 2 ) O(n log n) nb de déplacements ? O(n 2 )

31 Tris simples Tri par insertion dichotomique : Idée au lieu de parcourir les i premiers éléments triés pour faire l'insertion du i + 1 ième, rechercher la place où insère par dichotomie. Complexité nb de transferts est identique à celui de l'insertion séquentielle O(n 2 ) dans le pire des cas et en moyenne nb de comparaisons en O(n log n) (au pire et en moyenne) En pratique : n'améliore pas vraiment les performances

32 Tri shell, Donald Shell Une variante du tri par insertion Lenteur du tri par insertion les échanges ne portent que sur des voisins si le plus petit élément est à la fin il faut n étapes pour le placer définitivement Principe du tri shell éliminer les plus grands désordres pour abréger le travail aux étapes suivantes Idée ordonner des séries d'éléments éloignés de h, h prenant de valeurs de plus en plus petites (jusqu'à 1) Exemple (suite déterminée empiriquement) h n = (1093, 384, 121, 40, 13, 4, 1) H n+1 = 3 h n +1 Tris simples

33 Tri shell template void triShell(vector & Tableau, int n) { … while (p <= n) { p = (3 * p) + 1; } while (p > 0) { …. p = p/3; }

34 Tri shell On a démontré que la complexité dans le pire des cas est O(n 3/2 ). En choisissant pour suite d'incréments 1, 3, 7, 15, 31 ( h i+1 = 2h i + 1) on obtient expérimentalement une complexité en O(n 1,2 ). Très efficace jusqu'à 5000 éléments que les données soient aléatoires, triées ou en ordre inverse, code facile et compact, conseillé quand on n'a aucune raison d'en choisir un autre. Tris simples tri stable? tri in situ? progressif?

35 Tris simples Algorithme#2 remplir les cases de 1 à n avec le minimum des éléments du tableau restant

36 reste à classer MIN échange Tris simples Algorithme#2 Recherche du minimum par balayage séquentiel

37 Tris simples Tri par sélection : 44,55,12,42,94,18,06,67 Algorithme : remplir les cases de 1 à n avec le minimum des éléments du tableau restant

38 Tris simples tri par sélection : 44,55,12,42,94,18,06,67

39 Tris simples tri par sélection : 44,55,12,42,94,18,06,67

40 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67

41 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67

42 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67

43 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67

44 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67

45 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67

46 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67

47 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67

48 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67

49 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67

50 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67

51 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67

52 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67

53 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67

54 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67

55 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67

56 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67

57 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67

58 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,67,94

59 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,67,94

60 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,67,94

61 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,67,94 06,12,18,42,44,55,67,94

62 Tris simples tri par sélection : 44,55,12,42,94,18,06,67 06,55,12,42,94,18,44,67 06,12,55,42,94,18,44,67 06,12,18,42,94,55,44,67 06,12,18,42,94,55,44,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,94,67 06,12,18,42,44,55,67,94 06,12,18,42,44,55,67,94

63 Tri par sélection template template void TriSelection( vector & Tableau, int n) { int min; int min; T Tmp; T Tmp; for (int i=0 ; i

64 Tri par sélection Meilleur cas : séquence triée nb de comparaisons ? nb de déplacements ? Pire cas : séquence triée inverse nb de comparaisons ? nb de déplacements ? tri in situ? progressif? Stable? 21,17,21,5,2,9,2,7 Tri sélection remplir les cases de 1 à n avec le minimum des éléments du tableau restant

65 Tris simples Tri par sélection remplir les cases de 1 à n avec le minimum des éléments du tableau restant Meilleur cas : séquence triée nb de comparaisons ? O(n 2 ) nb de déplacements ? O(1) Pire cas : séquence triée inverse nb de comparaisons ? O(n 2 ) nb de déplacements ? O(n) tri in situ ? progressif ? stable ? Stable? 21,17,21,5,2,9,2,7

66 Tris simples Tri par sélection 21,17,21,5,2,9,2,7 stable ?

67 Tris simples Les balayages peuvent être éliminés Algorithme#3 remonter les plus petites valeurs à la surface, et ce, à chaque itération

68 Tris simples Tri à bulles (« Bubblesort ») 44,55,12,42,94,18,06,67 Algorithme : remonter les plus petites bulles à la surface, et ce, à chaque itération

69 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67

70 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67

71 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67

72 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67

73 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67

74 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67

75 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67

76 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67

77 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67

78 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67

79 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94

80 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94

81 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94

82 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94

83 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94

84 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94 06,12,18,42,44,55,67,94

85 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94 06,12,18,42,44,55,67,94

86 Tris simples tri à bulles (« Bubblesort ») : 44,55,12,42,94,18,06,67 06,44,55,12,42,94,18,67 06,44,55,12,18,42,94,67 06,12,44,55,18,42,94,67 06,12,44,55,18,42,67,94 06,12,18,44,55,42,67,94 06,12,18,42,44,55,67,94

87 Tri à bulles (« Bubblesort ») template template void TriBulle( vector & Tableau, int n) { T Tmp; for (int i=0; ii; j--) if ( Tableau[j-1]> Tableau[j]) { Tmp = Tableau[j-1]; Tableau[j-1] = Tableau[j]; Tableau[j] = Tmp; }} Tris simples

88 Tri à bulles Meilleur cas : séquence triée nb de comparaisons ? nb de déplacements ? Pire cas : séquence triée inverse nb de comparaisons ? nb de déplacements ? tri stable? tri in situ? progressif? Tri à bulles (« Bubblesort ») remonter les plus petites bulles à la surface, et ce, à chaque itération

89 Tris simples Tri à bulles (« Bubblesort ») remonter les plus petites bulles à la surface, et ce, à chaque itération Meilleur cas : séquence triée nb de comparaisons ? O(n 2 ) nb de déplacements ? O(1) Pire cas : séquence triée inverse nb de comparaisons ? O(n 2 ) nb de déplacements ? O(n 2 ) tri stable? tri in situ? progressif?

90 Tris simples Tri à bulles (« Bubblesort ») Première amélioration Une première amélioration consiste à arrêter le processus s'il n'y a aucun échange dans une passe. Deuxième amélioration : ShakerSort Une deuxième amélioration consiste à alterner le sens des passes. Troisième amélioration Une troisième qui consiste à reprendre au début chaque fois quil y a une permutation.

91 Complexité en temps : en O(n 2 ) en moyenne et au pire des cas en nombre de transferts ou en nombre de comparaisons en O(n²). en espace : en O(1) (tris sur place) Sauf tri shell ne conviennent pas pour un nombre important de données Faciles à comprendre et à mettre en œuvre Tris simples

92 Tri rapide (« Quicksort ») Tri dichotomique appelé aussi tri des bijoutiers Idée : trier les perles avec des tamis plus ou moins fins pour chaque tamis on sépare les perles en deux sous-ensembles (celles qui passent et celles qui restent dans le tamis) puis on trie celles qui sont passées avec un tamis plus fin et les autres avec un tamis plus gros Tris complexes

93 Tri rapide (« Quicksort ») 44,55,12,42,94,18,06,67 Algorithme choisir un pivot p (élément médian) partager le tableau en 2 : sous-tableau de gauche : éléments p sous-tableau de droite : éléments > p lélément entre les 2 le pivot est à sa place définitive appel récursif avec le sous-tableau de gauche appel récursif avec le sous-tableau de droite

94 Tris complexes Tri rapide (« Quicksort ») Partage avec pivot = TRI < 3 3 Suite du tri

95 Tris complexes Tri rapide (« Quicksort ») 44,55,12,42,94,18,06,67

96 Tris complexes Tri rapide (« Quicksort ») 44,55,12,42,94,18,06,67

97 Tris complexes Tri rapide (« Quicksort ») 44,55,12,42,94,18,06,67

98 Tris complexes Tri rapide (« Quicksort ») 44,55,12,42,94,18,06,67

99 Tris complexes Tri rapide (« Quicksort ») 06,55,12,42,94,18,44,67

100 Tris complexes Tri rapide (« Quicksort ») 06,55,12,42,94,18,44,67

101 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

102 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

103 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

104 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

105 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

106 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

107 Tris complexes Tri rapide (« Quicksort ») 06,18,12,42,94,55,44,67

108 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

109 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

110 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

111 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

112 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

113 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

114 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

115 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

116 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

117 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,94,55,44,67

118 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

119 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

120 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

121 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

122 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

123 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,94,67

124 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,67,94

125 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,67,94

126 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,67,94

127 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,67,94

128 Tris complexes Tri rapide (« Quicksort ») 06,12,18,42,44,55,67,94

129 Tris complexes tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : nb de comparaisons ? nb de déplacements ? Pire cas : nb de comparaisons ? nb de déplacements ? tri stable ? tri in situ ? progressive?

130 Tris complexes Meilleur cas : pivot = médiane nb de comparaisons ? nb de déplacements ? Pire cas : nb de comparaisons ? nb de déplacements ? tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94

131 Tris complexes tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 n/2 Meilleur cas : pivot = médiane nb de comparaisons ? nb de déplacements ? Pire cas : nb de comparaisons ? nb de déplacements ?

132 Tris complexes 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? nb de déplacements ? Pire cas : nb de comparaisons ? nb de déplacements ? n/4 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 n/2

133 Tris complexes 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? Pire cas : nb de comparaisons ? nb de déplacements ? n/4 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 n/2

134 Tris complexes 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : nb de comparaisons ? nb de déplacements ? n/4 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 n/2

135 Tris complexes tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : nb de comparaisons ? nb de déplacements ?

136 Tris complexes Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? nb de déplacements ? tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94

137 Tris complexes Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? nb de déplacements ? n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94

138 Tris complexes 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? nb de déplacements ? n-2 n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94

139 Tris complexes n-3 06,12,18,42,44,55,67,94 n-2 n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? nb de déplacements ?

140 Tris complexes n-4 n-3 06,12,18,42,44,55,67,94 n-2 n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? nb de déplacements ?

141 Tris complexes n-4 n-3 06,12,18,42,44,55,67,94 n-2 n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? O(n 2 ) nb de déplacements ?

142 Tris complexes n-4 n-3 06,12,18,42,44,55,67,94 n-2 n-1 tri rapide (« Quicksort ») : 06,12,18,42,44,55,67,94 Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) Pire cas : pivot = min. ou max. nb de comparaisons ? O(n 2 ) nb de déplacements ? O(n2)

143 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas : pire cas : en moyenne :

144 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas :O(log n) pire cas : en moyenne :

145 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas :O(log n) pire cas :O(n) en moyenne :

146 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas :O(log n) pire cas :O(n) en moyenne : O(log n)

147 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas :O(log n) pire cas :O(n) en moyenne : O(log n) Comment faire pour minimiser la taille de la pile ?

148 Problèmes du « Quicksort » Algorithme récursif : taille de la pile = ? meilleur cas :O(log n) pire cas :O(n) en moyenne : O(log n) Comment faire pour minimiser la taille de la pile ? empiler toujours le plus grand des 2 sous-tableaux O(1) taille de la pile O(log n) plutôt que : O(1) taille de la pile O(n)

149 Problèmes du « Quicksort » Algorithme récursif taille de la pile = ? meilleur cas :O(log n) pire cas :O(n) en moyenne : O(log n) Comment faire pour minimiser la taille de la pile ? empiler toujours de sous-tableaux de taille optimum Tout dépend du choix du pivot du pire cas : O(n 2 ) au meilleur cas : O(n log n) Comment choisir un bon pivot ?

150 la solution idéale est de trouver à chaque fois la valeur médiane du sous-tableau à trier, mais sa recherche précise rend le tri plus lent que sans elle. Une solution quelquefois utilisée est de prendre par exemple trois valeurs, pour en prendre la valeur médiane, par exemple tab[droite], tab[gauche] et tab[(droite+gauche)/2] (dans le cas d'un tableau parfaitement mélangé, le choix de trois positions n'a pas d'importance, mais dans des tableaux presque triés le choix ci-dessus est plus judicieux). La totalité de ces améliorations peut apporter un gain de l'ordre de 20% par rapport à la version de base. Problèmes du « Quicksort » Choix du pivot : du pire cas : O(n 2 ) au meilleur cas : O(n log n) Comment choisir un bon pivot ?

151 Problèmes du « Quicksort » Attention aux bornes : 06,18,12,42,94,55,44,67

152 Attention aux bornes : 06,12,18,42,94,55,44,67 Problèmes du « Quicksort »

153 Attention aux bornes : 06,12,18,42,94,55,44,67 Problèmes du « Quicksort »

154 Attention aux bornes : 06,12,18,42,94,55,44,67 Choix du pivot : du pire cas : O(n 2 ) au meilleur cas : O(n log n) Comment choisir un bon pivot ? Attention aux constantes cachées : O(n log n) n doit être grand !!! tri doit être in situ !

155 Mais… Très bien compris, étudié tant au niveau théorique quexpérimental. Très bonnes performances s'il est optimisé dérécursivé tri par insertion sur les petites listes

156 Tris complexes Tri rapide (« Quicksort ») Meilleur cas : pivot = médiane nb de comparaisons ? O(n log n) nb de déplacements ? O(1) En moyenne nb de comparaisons ? O(n log n) nb de déplacements ? O(n log n) Pire cas : pivot = min. ou max. nb de comparaisons ? O(n 2 ) nb de déplacements ? O(n 2 ) tri stable? tri in situ? progressif? Ce quil faut retenir de ce tri:

157 Tris complexes Tri rapide (« Quicksort ») template template void QuickSort(vector & tableau, int inf, int sup) { int milieu; if (sup>inf) // s'il y a au moins 2 éléments { milieu = Partition(tableau, inf, sup); // trier la partie de gauche QuickSort(tableau, inf, milieu); // trier la partie de droite QuickSort(tableau, milieu+1, sup); }}

158 Tris complexes Tri rapide (« Quicksort ») template template int Partition(vector & tableau, int inf, int sup) { T pivot, tempo; int i,j; pivot = tableau[(sup+inf)/2]; i = inf-1; j = sup+1; // Suite a la page suivante

159 Tris complexes Tri rapide (« Quicksort ») while ( ipivot); } while (tableau[j]>pivot); // Permuter les éléments qui ne sont pas // Permuter les éléments qui ne sont pas // à leur place // à leur place if ( i

160 Tri par fusion Diviser Diviser la séquence de n éléments à trier en 2 sous-séquences de taille n/2 Régner Trier les 2 sous-séquences Combiner Fusionner les 2 sous-séquences triées Tris complexes

161 Tri par fusion

162 1n1m Trié 1 n+m Trié t1 t3 t2 template template void triFusion(T * t, int debut, int fin) { if(debut

163 void fusionner(T * t, int debut, int milieu, int fin) { int i1=debut; // indice courant dans t[debut..milieu] int i2=milieu+1; // indice courant dans t[milieu+1..fin] int i3=0; // indice courant dans t3 (tableau auxiliaire) T *t3; // tableau auxiliaire dynamique de longueur fin-debut+1 t3= new T[fin-debut+1]; while((i1<=milieu)&&(i2<=fin)) { if(t[i1]milieu) // on a epuisé t[debut..milieu] for(;i2<=fin;i2++,i3++) t3[i3]=t[i2]; else // on a epuisé t[milieu+1..fin] for(;i1<=milieu;i1++,i3++) t3[i3]=t[i1]; // il faut transférer t3 à sa place dans t for(i1=0;i1

164 Tri par fusion Comparaison avec le tri QuickSort Tris complexes Stabilité? in situ? Progressivité? Complexité?

165 Tris complexes Tri par arbre (« Treesort ») 44,55,12,42,94,18,06,67 Algorithme utiliser une structure darbre pour trier la séquence de clés faire un nouvel arbre ? O(n log n) mais n nouveaux éléments + ptrs : trop despace !!!

166 Tris complexes Tri par arbre (« Treesort ») utiliser une structure darbre pour trier la séquence de clés utiliser les éléments de base comme feuilles

167 Tris complexes

168 Tris complexes

169 Tris complexes

170 Tris complexes

171 Tris complexes

172 Tris complexes

173 Tris complexes

174 Tris complexes

175 Tris complexes

176 Tri par arbre (« Heapsort ») 44,55,12,42,94,18,06,67 Algorithme bâtir une structure darbre sur place h i h 2i h i h 2i+1 structure appelée « monceau » (« heap ») Tris complexes

177 Monceau - définition Tris complexes Un arbre complet tel que pour chaque noeud N dont le parent est P, la clé de P est plus grande que celle de N Normalement implémenté dans un tableau Insertion et retrait sont O(log N) dans le pire cas Insertion est O(1) en moyenne Recherche du plus petit élément est O(1) dans le pire cas

178 Tris complexes Tri par arbre (« Heapsort »)

179 Tris complexes Création du monceau

180 Tris complexes

181 Tris complexes

182 Tris complexes

183 Tris complexes

184 Tris complexes

185 Tris complexes

186 Tris complexes

187 Tris complexes

188 Tris complexes

189 Tris complexes

190 Tris complexes

191 Tris complexes Monceaux dans la STL Fonction pour créer un monceau: make_heap(Iterator deb, Iterator fin) Fonctions pour insérer et retirer un élément push_heap(Iterator deb, Iterator fin) pop_heap(Iterator deb, Iterator fin) Toutes ces fonctions ont une seconde version avec un troisième argument qui est un prédicat qui permet de redéfinir lopérateur de comparaison utilisé Note: litérateur doit être un itérateur à accès direct, ce qui limite les possibilités de conteneurs (vector et deque)

192 Tris complexes Monceaux dans la STL Il existe aussi un adaptateur priority_queue On peut choisir le type de conteneur et de fonction de comparaison Offre les fonctions suivantes: –push() –top() –pop() Voir les exemples fournis en annexe (MonceauSTL.cpp)

193 Tris complexes Tri par monceau – Principe La procédure est la suivante: –On met dans le tableau les n valeurs à trier –On crée le monceau initial (de type Parent > Fils) –On retire la racine du monceau (qui est la plus grande valeur) et on la permute avec le dernier item du monceau –On rétablit le monceau avec les (n-1) valeurs, sil y a lieu –On répète le processus avec le monceau obtenu qui contient maintenant un élément de moins

194 Tris complexes Le tri

195 Tris complexes

196 Tris complexes

197 Tris complexes

198 Tris complexes

199 Tris complexes

200 Tris complexes

201 Tris complexes

202 Tris complexes

203 Tris complexes

204 Tris complexes

205 Tris complexes

206 Tris complexes

207 Tris complexes

208 Tris complexes

209 Tris complexes

210 Tris complexes

211 Tris complexes

212 Tris complexes

213 Tris complexes

214 Tris complexes

215 Tris complexes

216 Tris complexes

217 Tris complexes

218 Tris complexes

219 Tris complexes

220 Tris complexes « Heapsort » Algorithme créer le monceau en descendant les clés trier en échangeant le maximum et le dernier + redescendre complexité ? stabilité in situ progressivité

221 Tris complexes « Heapsort » Algorithme créer le monceau en descendant les clés trier en échangeant le maximum et le dernier + redescendre complexité ? O(n log n) en tout temps! aucun espace additionnel requis !!! stabilité in situ progressivité

222 Quicksort, tri-fusion versus Heapsort En moyenne, Quicksort a de meilleurs constantes cachées que le tri-fusion et le Heapsort (par évaluations empiriques) Stabilité? in situ? Progressivité?

223 Conclusion Quelques comparaisons tri par tas (monceau): meilleure complexité tri rapide et tri fusion: efficaces tri par insertion excellent si liste initiale presque triée et tri par sélection donne le début de liste trié avant la fin du tri tri par insertion peut débuter sans liste initiale complète Doit-on toujours trier complètement ?

224 Autres tris Si le tableau contient un grand nombre de valeurs similaires: algorithme par comptage ou tri par pigeonnier. Conclusion Aucun tri qui compare des clefs peut sexécuter en moins de temps que O(n lg n) Dautres algorithmes peuvent se faire plus rapidement mais ils ne comparent des clefs et ils fonctionnent dans des conditions particulières. Le tri par pigeonnier est un de ces cas. Il fait lhypothèses que les clefs à trier sont des entiers entre 1 et R (rang) On l'appelle également le tri par comptage (Counting sort en anglais) c'est l'algorithme LE PLUS performant en terme d'utilisation CPU.

225 Tri par pigeonnier 163 Tableau E Tableau U

226 Tri par pigeonnier

227 U[k] = U[k] - 1 T[i] k i i+1 tant que U[k] 0 pour k à rang i pour i à n U[k] U[k] + 1 pour k à rang k T[i] U[k] 0 TriPigeonnier(T[1..n]) Complexité spatiale? Complexité temporel?

228 Tri par pigeonnier U[k] = U[k] - 1 T[i] k i i+1 tant que U[k] 0 pour k à rang i pour i à n U[k] U[k] + 1 pour k à rang k T[i] U[k] 0 TriPigeonnier(T[1..n]) Complexité spatiale: O(n+rang) Complexité temporelle: O(n+rang)) si aucun doublon

229 Tri par pigeonnier Cependant de GROS inconvénients : 1) Si l'écart entre la valeur min et la valeur max de ton tableau initial est énorme, le tableau de distribution sera lui aussi énorme => complexité mémoire TROP importante. 2) Aucune comparaison n'est faite entre les valeurs => impossible de rendre ce tri GENERIQUE s'appliquant à tout type de données (par exemple trier un tableau de structure)car aucune fonction de comparaison n'est utilisée. Ce type de tri est donc réservé que dans cas bien précis connue de l'utilisateur: par exemple en imagerie, trié un tableau contenant les différents niveau de gris d'une image : les valeurs seront comprises entre 0 et 255 => le tableau de distribution sera petit, le tri sera en un temps linéaire.

230 Tri pigeonnier Le meilleur quand: peu de valeurs possibles pour les clés et/ou enregistrements petits ou réduits à la clé pas de collisions Dans les deux derniers cas, il existe des implémentations très simples. Impraticable dans tous les autres cas mémoire occupée en N + R.

231 Dans la cas où les clefs sont bornées (c'est à dire comprises entre un minimum et un maximum connus à l'avance) et en nombre fini: algorithme de tri basique (tri par bacs). Tri basique n=10 L =(26, 9, 0, 25, 1, 29, 64, 16, 81, 4) après 1 (0, 1, 81,64,4,25, 26, 16, 9, 29) après 2 (0, 1, 4, 9, 16, 25, 26, 29, 64, 81)

232 Classer L = (a 1, …, a n )clés Î (0, 1, 2,..., n 2 -1) Tri en O(nxnbChiffresMax). Exemple: nbChiffreMax = 2 1. tri par bacs avec clé : clé(a i ) mod n 2. tri par bacs avec clé : clé(a i ) / n Équivalent à un tri lexicographique avec la clé (q, r) telle que clé(a i ) = q.n + r n=10 L =(26, 9, 0, 25, 1, 29, 64, 16, 81, 4) après 1 (0, 1, 81,64,4,25, 26, 16, 9, 29) après 2 (0, 1, 4, 9, 16, 25, 26, 29, 64, 81) Tri basique

233 Pour trier des clefs alphabétiques, on peut effectuer un tri en base 26 Lorsque le tableau est presque trié, il est plus efficace d'effectuer un tri par insertion (passe de finition) plutôt que de répéter le tri basique jusqu'à tri complet.

234 Le bogo tri! Le bogo tri est basé sur le paradoxe du singe savant. Il s'agit sans nul doute de l'algorithme de tri le plus inefficace jamais créé. Son principe est très simple. Il consiste à permuter aléatoirement les éléments du tableau tant que celui-ci n'est pas trié. Si tous les éléments du tableau sont distincts, la complexité est de O(n * n!). Comme les ordinateurs utilisent des générateurs de nombres pseudo-aléatoires, il se peut que le tri ne se finisse jamais pour un ensemble donné. Variante Le bozo tri est une variante de cet algorithme. Il consiste à choisir aléatoirement 2 éléments et à les échanger. On répète cette opération tant que tous les éléments ne sont pas trié. Tout comme son compatriote, étant donné qu'on utilise des générateurs de nombres pseudo-aléatoires, il se peut que le tri ne se termine jamais.

235 Le bozo tri triAleatoire (E[0..N[) essais = 0 tant que essais < A i = indice aléatoire dans [0..N-1[ j = indice aléatoire dans ]i..N[ si E [i].cle > E [j].cle permuter(E[i],E[j]), essais = 0 sinon incrémenter essais ne trie pas complètement le tableau. Dans quelle circonstance voudrait-on utiliser le tri aléatoire? Est-ce que le tri aléatoire diminue le degré de désordre?

236 Le paradoxe du singe savant est un théorème selon lequel un singe qui tape au hasard sur le clavier dune machine à écrire pourra presque sûrement écrire tous les livres de la Bibliothèque nationale de France. Dans ladaptation du théorème en langue anglaise, le singe pourra presque sûrement dactylographier tous les travaux réunis de William Shakespeare. Le résultat fut présenté par Émile Borel en 1909 dans son livre de probabilités. Ces « singes » ne sont pas des singes réels, et ne se comportent pas comme de vrais singes ; ils sont plutôt une métaphore vivante pour une machine abstraite à produire des lettres dans un ordre aléatoire, par exemple un ordinateur ou un générateur aléatoire connecté à une imprimante. Le paradoxe du singe savant

237 sort(): –Doit garantir un temps moyen dans O(n lg n) –Le tri rapide (quicksort) répond à ce critère stable_sort(): –Doit garantir O(n lg n) dans le pire cas –Peut utiliser de la mémoire supplémentaire –Le tri par fusion (mergesort) répond à ce critère partial_sort() –Doit garantir un temps moyen dans O(n lg n) –Doit permettre le tri partiel –Le tri par monceau (heapsort) répond à ce critère Les tris dans la STL

238 Tous les tris présentés supposent que toutes les données à trier sont présentes en mémoire centrale. éléments volumineux : pour ne pas avoir à déplacer les éléments trier une liste où le stockage est indirect (tri indirect) on trie une listes de pointeurs sur les éléments trier une liste de couples (clé, référence) si les clés ne sont pas trop grosses Si le nombre dobjets à trier est trop grand: tri externe le fichier est chargé en mémoire par morceaux pb : minimiser les entrées sorties pb algorithmique mais surtout matériel Tri externe


Télécharger ppt "Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département dinformatique et de génie logiciel Édition septembre 2009."

Présentations similaires


Annonces Google