Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Σχετικά έγγραφα
Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Αλγόριθµοι Ταξινόµησης

Αλγόριθμοι ταξινόμησης

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθµοι Ταξινόµησης

Γηάιεμε 14: Αιγόξηζκνη Ταμηλόκεζεο

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Διδάσκων: Παναγιώτης Ανδρέου

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Ταξινόμηση με συγχώνευση Merge Sort

Αλγόριθμοι Ταξινόμησης Μέρος 2

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθμοι και Πολυπλοκότητα

Εργαστήριο 2: Πίνακες

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Εισαγωγή στην Ανάλυση Αλγορίθμων

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομές Δεδομένων & Αλγόριθμοι

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Τεχνικές Σχεδιασμού Αλγορίθμων

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Εργαστηριακή Άσκηση 1

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

1η Σειρά Γραπτών Ασκήσεων

Αλγόριθµοι Divide-and- Conquer

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στους Αλγορίθμους

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Επιλογή. Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Επιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Σχεδίαση και Ανάλυση Αλγορίθμων

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Σχεδίαση και Ανάλυση Αλγορίθμων

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

p

Επιλογή. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Δομές Δεδομένων & Αλγόριθμοι

Προχωρημένες έννοιες προγραμματισμού σε C

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθµοι και Πολυπλοκότητα

Διάλεξη 18: B-Δένδρα

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Προγραμματισμός Ι (ΗΥ120)

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

ΗΥ240 - Παναγιώτα Φατούρου 2

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

Αναδρομικοί Αλγόριθμοι

Διδάσκων: Κωνσταντίνος Κώστα

Αλγοριθμικές Τεχνικές. Brute Force. Διαίρει και Βασίλευε. Παράδειγμα MergeSort. Παράδειγμα. Τεχνικές Σχεδιασμού Αλγορίθμων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ταξινόμηση. Σαλτογιάννη Αθανασία

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Αλγόριθµοι. Παράδειγµα. ιαίρει και Βασίλευε. Παράδειγµα MergeSort. Τεχνικές Σχεδιασµού Αλγορίθµων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 9: Ταξινόμηση Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

Transcript:

Διάλεξη 14: Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης 3) Mergesort Ταξινόμηση με Συγχώνευση 4) BucketSort Ταξινόμηση με Κάδους Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-1

3) Ταξινόμηση με Συγχώνευση (Merge sort) Η ταξινόμηση με συγχώνευση είναι διαδικασία διαίρει και βασίλευε ( Divide and Conquer: αναδρομική διαδικασία όπου το πρόβλημα μοιράζεται σε μέρη τα οποία λύνονται ξεχωριστά, και μετά οι λύσεις συνδυάζονται. ) Περιγραφή του Mergesort 1.Διαίρεση: Αναδρομικά μοιράζουμε τον πίνακα στα δύο μέχρι να φτάσουμε σε πίνακες μεγέθους ένα (DIVIDE) 2.Συγχώνευση: Ταξινομούμε αναδρομικά τους πίνακες αυτούς με την συγχώνευση γειτονικών πινάκων (χρησιμοποιώντας βοηθητικό πίνακα). (CONQUER) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-2

Η Βασική Ιδέα του Αλγόριθμου Merge Sort (#στοιχείων αριστερά) n=7 (#στοιχείων δεξιά) n 7 n 7 = = 4 = 3 2 2 = 2 2 Divide Conquer (merge) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-3

Συγχώνευση 2 Λιστών Υποθέστε ότι θέλετε να συγχωνεύσετε 2 ταξινομημένες λίστες L1, L2 και να δημιουργήσετε μια νέα ταξινομημένη λίστα TEMP. Διαδικασία 1. Τοποθέτησε τους δείκτες i, j στην κεφαλή κάθε λίστας. 2. Διάλεξε το μικρότερο από την λίστα L1 και L2 και τοποθέτησε τον στον πίνακα TEMP στην θέση κ 3. Προχώρησε τον δείκτη i (αν το μικρότερο στοιχείο ήταν από την λίστα L1) ή τον δείκτη j στην αντίθετη περίπτωση. 4. Επανέλαβε τα βήματα 2-4 μέχρι να εισαχθούν όλα τα στοιχεία στον TEMP Μέτα από 6 εκτελέσεις: L1 7 8 9 16 30 56 L2 3 5 15 28 60 TEMP 3 5 7 8 9 15 i min(l1[i],l2[j]) κ j (Το i,j ξεκινάνε από την αρχή της κάθε λίστας) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-4

Παράδειγμα Εκτέλεσης Merge Sort BEFORE:[8,4,8,43,3,5,2,1,10,] 0,8: [8,4,8,43,3,5,2,1,10,] 0,4: [8,4,8,43,3,] 0,2: [8,4,8,] 0,1: [8,4,] 0,0: [8,] 1,1: [4,] Merging: [A0,A0] [A1,A1] => [4,8,] 2,2: [8,] Merging: [A0,A1] [A2,A2] => [4,8,8,] 3,4: [43,3,] 3,3: [43,] 4,4: [3,] Index: 0 1 2 3 4 5 6 7 8 divide divide divide Merging: [A3,A3] [A4,A4] => [3,43,] Merging: [A0,A2] [A3,A4] => [3,4,8,8,43,] 5,8: [5,2,1,10,] 5,6: [5,2,] 5,5: [5,] 6,6: [2,] Merging: [A5,A5] [A6,A6] => [2,5,] 7,8: [1,10,] 7,7: [1,] 8,8: [10,] divide divide Merging: [A7,A7] [A8,A8] => [1,10,] Merging: [A5,A6] [A7,A8] => [1,2,5,10,] Merging: [A0,A4] [A5,A8] => [1,2,3,4,5,8,8,10,43,] AFTER:[1,2,3,4,5,8,8,10,43,] ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-5

Αλγόριθμος Merge Sort void MergeSort(int A[], int temp[], int l, int r){ // η συνθήκη τερματισμού της ανάδρομης if (l==r) return; int mid = (l+r)/2; // για ελαχιστοποίηση overflow(για μεγάλα l,r) // int mid = l + ((r - l) / 2); // μοιράζουμε αναδρομικά τον πίνακα Mergesort(A, temp, l, mid); Mergesort(A, temp, mid+1, r); // Τώρα οι πίνακες [l..mid] και [mid+1..r] είναι ταξινομημένοι // Η διαδικασία συγχώνευσης k=l, i=l; j=mid+1; 7 8 9 16 30 56 3 5 15 28 60 // συγχώνευση στον TEMP μέχρι μια από τις λίστες να είναι κενή while ((i<=mid) && (j<=r)) { if (A[i]<A[j]){ temp[k] = A[i]; i++; else { temp[k] = A[j]; j++; k++; συνέχεια στην επόμενη διαφάνεια l i L1 min(l1[i],l2[j]) TEMP 3 5 7 8 9 15 ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-6 Mid k Mid+1 j L2 r

Αλγόριθμος Merge Sort // copy όλων τα υπόλοιπων στοιχείων της λίστας L1 while (i<=mid) { temp[k] = A[i]; L1 Mid k++;i++; l i 7 8 9 16 30 56 3 5 15 28 60 TEMP 3 5 7 8 9 15 16 28 30 56 // copy όλων τα υπόλοιπων στοιχείων της λίστας L2 while (j<=r) { temp[k] = A[j]; k++;j++; Mid+1 L2 j k r // αντιγραφή όλων των στοιχείων από TEMP -> A for (i=l; i<=r; i++) { A[i] = temp[i]; ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-7

Ανάλυση Χρόνου (αναδρομής) Το πρόβλημα μοιράζει αναδρομικά σε δυο μέρη την λίστα που θέλουμε να ταξινομήσουμε. Όταν φτάσουμε στην λίστα που έχει μέγεθος 1 τότε σταματά η αναδρομή και το πρόγραμμα αρχίζει να συνδυάζει (merge) τις επιμέρους λίστες. Παρατηρούμε ότι πάνω σε μια λίστα μεγέθους Ν η αναδρομή εκτελείται 2log 2 n φορές. Δηλαδή ο πίνακας μοιράζεται ως εξής: n, n/2, n/4,, 2, 1 void MergeSort(int A[], int temp[],int l, int r){ if (l==r) return; int mid = (l+r)/2; Mergesort(A, temp, l, mid); Mergesort(A, temp, mid+1, r); Θ(logn) ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-8

Ανάλυση Χρόνου (συγχώνευση) Σε κάθε επίπεδο της ανάδρομης περνάμε μια φορά από το κάθε στοιχείο. Επομένως η συγχώνευση των στοιχείων σε κάθε επίπεδο της εκτέλεσης χρειάζεται γραμμικό χρόνο Θ(n). Σημειώστε ότι η διαδικασία απαιτεί τη χρήση βοηθητικού πίνακα. Μπορούμε να χρησιμοποιούμε τον ίδιο βοηθητικό πίνακα temp για όλες τις (αναδρομικές) κλήσεις του ΜergeSort. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-9

Συνολικός Χρόνος Εκτέλεσης Mergesort Η αντιγραφή και η συγχώνευση παίρνουν χρόνο Θ(n) και η αναδρομή παίρνει χρόνο Θ(log n). Συνολικά Θ(n log n). Ο χρόνος εκτέλεσης εκφράζεται και από την αναδρομική εξίσωση Τ(0) = Τ(1) = 1 Τ(n) = 2 T(n/2) + n η οποία μπορεί να λυθεί με το Master Theorem ή με την μέθοδο της αντικατάστασης. Πλεονέκτημα MergeSort: O συνολικός χρόνος εκτέλεσης είναι Θ(n log n) (σε αντίθεση με το SelectionSort (Θ(n 2 )) και το InsertionSort (Ο(n 2 )) Μειονέκτημα: Απαιτεί τη χρήση βοηθητικού πίνακα (δηλαδή χρειάζεται διπλάσιο χώρο αποθήκευσης για την εκτέλεση του). Αυτό δεν καθιστά την μέθοδο πολύ εύχρηστη. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-10

4) Ταξινόμηση με Κάδους - BucketSort Έστω ότι ο πίνακας A n στοιχείων περιέχει στοιχεία που ανήκουν στο διάστημα [1..m]. O αλγόριθμος BucketSort βασίζεται πάνω στα ακόλουθα βήματα: 1. Δημιουργούμε ένα πίνακα buckets μήκους m και θέτουμε buckets[i]=0, για όλα τα i (Αυτά τα είναι τα buckets - κάδοι) 2. Διαβάζουμε τον πίνακα Α ξεκινώντας από το πρώτο στοιχείο. Αν διαβάσουμε το στοιχείο α, τότε αυξάνουμε την τιμή του buckets[α] κατά ένα. Επαναλαμβάνουμε το βήμα μέχρι το τελευταίο στοιχείο. 3. Τέλος, διαβάζουμε γραμμικά τον πίνακα buckets, o oποίος περιέχει αναπαράσταση του ταξινομημένου πίνακα, και θέτουμε τα στοιχεία του πίνακα Α με την ταξινομημένη ακολουθία. BUCKETS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-11

Η Βασική Ιδέα του Αλγόριθμου Βucket Sort Δεδομένο Εισόδου: Τα στοιχεία είναι στο εύρος m=[0,14], n=8 1 11 1 7 2 14 7 1 0 Μετά την πρώτη εκτέλεση του Bucketsort (Εισαγωγή του 1) n-1 BUCKETS 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Μετά τη τρίτη εκτέλεση του Bucketsort (Εισαγωγή του 1) m BUCKETS 0 2 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Μετά την 8ή εκτέλεση του Bucketsort m BUCKETS 0 3 1 0 0 0 0 2 0 0 0 1 0 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 m ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-12

Αλγόριθμος BucketSort // Α: Πίνακας για ταξινόμηση μεγέθους n // Buckets: Βοηθητικός πίνακας μεγέθους m void Bucketsort(int A[], int buckets[], int n, int m) int i, j, k=0; // Κατανομή στοιχείων στους σωστούς κάδους for (i=0; i<n; i++) { buckets[a[i]]++; Ο(n) // Αντιγραφή στοιχείων από πίνακα BUCKETS στον πίνακα A for (i=0; i<m; i++) { for (j=0; j<buckets[i]; j++) { A[k] = i; k++; BUCKETS: Ο(m+n) Συνολικά περνάμε 1 φορά από τα στοιχεία του πίνακα BUCKETS (m) και μια φορά από αυτά του A (n) 0 3 1 0 0 0 0 2 0 0 0 1 0 0 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 m A: 1 1 0 1 1 2 7 7 11 14 2 3 4 5 6 7 n 14-13

Χρόνος Εκτέλεσης O αλγόριθμος BucketSort πετυχαίνει ταξινόμηση του Α σε χρόνο Θ(n+m): Σημαίνει ότι ο αλγόριθμος είναι καλύτερος από τον Mergesort Θ(nlogn); (Κατακρίβειαν μπορεί να αποδειχθεί ότι όλοι οι αλγόριθμοι ταξινόμησης, με δυαδική σύγκριση, έχουν σαν κάτω φράγμα Ω(n log n)) ΟΧΙ, γιατί το μοντέλο είναι διαφορετικό. Μέχρι τώρα υποθέσαμε ότι η μόνη πράξη που μπορούμε να εφαρμόσουμε στα δεδομένα είναι η δυαδική σύγκριση ή ανταλλαγή στοιχείων. Ο αλγόριθμος BucketSort όμως στο Βήμα 2 ουσιαστικά εφαρμόζει m-αδική (m-ary) σύγκριση, σε χρόνο Ο(1). Αυτό μας υπενθυμίζει πως σχεδιάζοντας ένα αλγόριθμο και λαμβάνοντας υπόψη κάποια αποδεδειγμένα κάτω φράγματα πρέπει πάντα να αναλύουμε το μοντέλο στο οποίο δουλεύουμε. Η ύπαρξη και αξιοποίηση περισσότερων πληροφοριών πιθανόν να επιτρέπουν τη δημιουργία αποδοτικότερων αλγορίθμων. ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ. 14-14