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

Σχετικά έγγραφα
Δομές Δεδομένων και Αλγόριθμοι

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

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

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Όρια Αλγόριθμων Ταξινόμησης. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

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

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

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

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

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

JDSL Java Data Structures Library

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

Εισαγωγή στους Αλγόριθμους. Παύλος Εφραιμίδης, Λέκτορας

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

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

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

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

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Κατώτερα φράγματα Κατώτερο φράγμα: εκτίμηση της ελάχιστης εργασίας που απαιτείται για την επίλυση ενός προβλήματος. Παραδείγματα: Αριθμός συγκρίσεων π

Ταξινόμηση. 1. Ταξινόμηση του Shell. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

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

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

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ

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

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ασκήσεις (2) Άσκηση 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Αλγόριθμοι. Μάρθα Σιδέρη. ιαδικαστικά: ύο πρόοδοι 31 Μαρτίου, 18 Μαΐου 7-9μμ 20% η μία, ύο Προγραμματιστικές 1 προσθετικό βαθμό η μία.

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

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

Διακριτά Μαθηματικά [Rosen, κεφ. 3] Γιάννης Εμίρης Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Οκτώβριος 2018

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

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

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε;

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

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

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

1 Αριθμητική κινητής υποδιαστολής και σφάλματα στρογγύλευσης

Δοµές Δεδοµένων. ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ Φθινοπωρινό Εξάµηνο Ευάγγελος Μαρκάκης

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

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

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

Επεξεργασία Ερωτήσεων

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ουρά Προτεραιότητας (priority queue)

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

Ταξινόμηση. 1. Ταξινόμηση με Μέτρημα 2. Ταξινόμηση με βάση τη Ρίζα. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Κατακερματισμός (Hashing)

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

Advanced Data Indexing

Επεξεργασία Ερωτήσεων

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

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

Επεξεργασία Ερωτήσεων

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 13: Παραλλαγές Μηχανών Turing και Περιγραφή Αλγορίθμων

Αλγόριθμοι και πολυπλοκότητα Bucket-Sort και Radix-Sort

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

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 11: Περιορισμοί της Αλγοριθμικής Ισχύος

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Κεφάλαιο 10 Ψηφιακά Λεξικά

Κατανεμημένα Συστήματα Ι

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Θεωρία Υπολογισμού Άρτιοι ΑΜ. Διδάσκων: Σταύρος Κολλιόπουλος. eclass.di.uoa.gr. Περιγραφή μαθήματος

Θεωρία Υπολογισμού Αρτιοι ΑΜ Διδάσκων: Σταύρος Κολλιόπουλος eclass.di.uoa.gr

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο 6 Ουρές Προτεραιότητας

Υπολογιστική Πολυπλοκότητα

5.1. Προσδοκώμενα αποτελέσματα

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

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

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

Διαδικασιακός Προγραμματισμός

Επεξεργασία Ερωτήσεων

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Transcript:

Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1

Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να ταξινομήσουν μια δοσμένη ακολουθία στοιχείων βασισμένοι σε συγκρίσεις κλειδιών. Μια ερώτηση η οποία προκύπτει από την μελέτη αυτών των αλγορίθμων είναι η εξής: Μπορούμε να ταξινομήσουμε μια ακολουθία n στοιχείων σε χρόνο καλύτερο από O n log n ; Δομές Δεδομένων και Τεχνικές 2

Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Αν η βασική πράξη που κάνουν οι αλγόριθμοι μας είναι η σύγκριση δύο κλειδιών τότε η πολυπλοκότητα χρόνου O(n log n) είναι η καλύτερη που μπορούμε να πετύχουμε. Δομές Δεδομένων και Τεχνικές 3

Ένα Κάτω Φράγμα για τους Αλγόριθμους Ταξινόμησης Υποθέστε ότι θέλουμε να ταξινομήσουμε μια ακολουθία S = x 0, x 1,, x n. Υποθέτουμε ότι όλα τα στοιχεία της S είναι διαφορετικά μεταξύ τους (αυτό δεν είναι περιορισμός επειδή αποδεικνύουμε ένα κάτω φράγμα). Δεν μας ενδιαφέρει αν η S υλοποιείται από ένα πίνακα ή μια συνδεδεμένη λίστα επειδή, για την απόδειξη του κάτω φράγματος, μετράμε μόνο συγκρίσεις κλειδιών. Δομές Δεδομένων και Τεχνικές 4

Δέντρα Αποφάσεων Κάθε φορά που ένας αλγόριθμος ταξινόμησης συγκρίνει δύο κλειδιά x i και x j, δηλαδή ρωτάει «Είναι το x i μικρότερο του x j ;», υπάρχουν δύο πιθανές απαντήσεις: «ναι» και «όχι». Βασιζόμενος στον αποτέλεσμα αυτής της σύγκρισης, ο αλγόριθμος ταξινόμησης μπορεί να εκτελέσει κάποιους εσωτερικούς υπολογισμούς (τους οποίους δεν λαμβάνουμε υπόψη μας εδώ) και μετά να εκτελέσει άλλη μία σύγκριση κλειδιών που έχει πάλι δύο απαντήσεις. Άρα μπορούμε να παραστήσουμε ένα αλγόριθμο ταξινόμησης βασισμένο σε συγκρίσεις κλειδιών με ένα δένδρο απόφασης (decision tree). Δομές Δεδομένων και Τεχνικές 5

Δένδρα Αποφάσεων Ένα δένδρο αποφάσεων T είναι ένα δυαδικό δένδρο το οποίο σε κάθε εσωτερικό του κόμβο περιέχει μια σύγκριση ανάμεσα σε δύο κλειδιά, και οι ακμές από ένα εσωτερικό κόμβο v στα παιδιά του αντιστοιχούν στους υπολογισμούς που προκύπτουν από τις απαντήσεις «ναι» και «όχι». Δομές Δεδομένων και Τεχνικές 6

Παράδειγμα Δένδρου Αποφάσεων yes a < b no b < c b < c yes no yes no a, b, c a < c a < c c, b, a yes no yes no a, c, b c, a, b b, a, c b, c, a Δομές Δεδομένων και Τεχνικές 7

Δένδρα Αποφάσεων Κάθε πιθανή αρχική αντιμετάθεση (permutation) των στοιχείων της S κάνει τον υποθετικό αλγόριθμο ταξινόμησης να εκτελέσει μια ακολουθία συγκρίσεων που αντιστοιχεί σε ένα μονοπάτι στο T, από τη ρίζα σε κάποιο εξωτερικό κόμβο. Κάθε εξωτερικός κόμβος του T αντιστοιχεί στην ακολουθία συγκρίσεων για το πολύ μια αντιμετάθεση των στοιχείων της S (αλλιώς ο αλγόριθμος δεν είναι σωστός). Ο χειρότερος χρόνος εκτέλεσης του αλγόριθμου αντιστοιχεί στο ύψος του δένδρου. Το μέγεθος και το σχήμα του δένδρου είναι συνάρτηση του αλγόριθμου και του πλήθους των στοιχείων που ταξινομούνται. Δομές Δεδομένων και Τεχνικές 8

Πρόταση Ο χρόνος εκτέλεσης οποιουδήποτε αλγόριθμου ταξινόμησης που βασίζεται σε συγκρίσεις κλειδιών είναι Ω(n log n) στη χειρότερη περίπτωση. Απόδειξη; Δομές Δεδομένων και Τεχνικές 9

Ο Συμβολισμός Ω(. ) Όπως ο συμβολισμός O(. ) μας παρέχει ένα τρόπο για να πούμε ότι μια συνάρτηση είναι μικρότερη ή ίση με κάποια άλλη, ο παρακάτω συμβολισμός Ω(. ) μας παρέχει ένα τρόπο για να πούμε ότι μια συνάρτηση είναι μεγαλύτερη ή ίση με κάποια άλλη. Ορισμός. Λέμε ότι η συνάρτηση f(n) είναι Ω g n αν η g(n) είναι O(f n ), ή αλλιώς, αν υπάρχει μια πραγματική σταθερά c > 0 και μια ακέραια σταθερά n 0 1 που είναι τέτοιες ώστε f n cg n, για n n 0. Δομές Δεδομένων και Τεχνικές 10

Παράδειγμα Η συνάρτηση 3n log n + 2n είναι Ω n log n. Αυτό είναι εύκολο να αποδειχθεί επειδή 3n log n + 2n 3n log n για κάθε n 2. Δομές Δεδομένων και Τεχνικές 11

Απόδειξη του Κάτω Φράγματος Στη χειρότερη περίπτωση, ο χρόνος εκτέλεσης ενός αλγόριθμου ταξινόμησης βασισμένου σε συγκρίσεις κλειδιών είναι μεγαλύτερος ή ίσος με το ύψος του δένδρου απόφασης T που αντιστοιχεί στο αλγόριθμο αυτό όπως είπαμε παραπάνω. Κάθε εξωτερικός κόμβος του T αντιστοιχεί σε μια αντιμετάθεση των στοιχείων της S. Επιπλέον, κάθε αντιμετάθεση των στοιχείων της S αντιστοιχεί σε ένα εξωτερικό κόμβο του T. Ο αριθμός των αντιμεταθέσεων n στοιχείων είναι n! = n n 1 n 2 2 1. Άρα το δέντρο T πρέπει να έχει n! εξωτερικούς κόμβους. Δομές Δεδομένων και Τεχνικές 12

Απόδειξη του Κάτω Φράγματος Από τις ιδιότητες των δυαδικών δένδρων που έχουμε αποδείξει στο παρελθόν προκύπτει ότι το ύψος του T είναι τουλάχιστον log n!. Επειδή στο γινόμενο n! υπάρχουν τουλάχιστον n 2 όροι που είναι μεγαλύτεροι ή ίσοι με n 2 έχουμε log n! log n n 2 = n log n = n log n n n 2 2 2 2 2 2 n log n = 1 nlog n για n n 4 2 0. Δηλαδή η log n! είναι Ω n log n. log n Δομές Δεδομένων και Τεχνικές 13

Ταξινόμηση σε Γραμμικό Χρόνο Έχουμε δείξει ότι χρειαζόμαστε Ω(n log n) χρόνο στη χειρότερη περίπτωση για να ταξινομήσουμε ένα πίνακα μεγέθους n χρησιμοποιώντας αλγορίθμους που βασίζονται στη σύγκριση κλειδιών. Έχουμε παρουσιάσει αλγόριθμους που είναι βέλτιστοι δηλαδή έχουν πολυπλοκότητα O(n log n) στη χειρότερη περίπτωση (π.χ. τον heapsort ή τον mergesort). Ερώτηση: Υπάρχουν καλύτεροι αλγόριθμοι πού δεν βασίζονται στη σύγκριση κλειδιών; 14

Ταξινόμηση σε Γραμμικό Χρόνο Υπάρχουν αλγόριθμοι ταξινόμησης που τρέχουν σε γραμμικό χρόνο αλλά είναι κατάλληλοι μόνο για πίνακες με συγκεκριμένους τύπους στοιχείων. Θα παρουσιάσουμε τους αλγόριθμους bucket-sort και radix-sort. 15

Ο Αλγόριθμος bucket-sort Θεωρείστε ένα πίνακα S μεγέθους n του οποίου τα κλειδιά είναι ακέραιοι στο διάστημα [0, N 1] για κάποιο ακέραιο N 2. Η βασική ιδέα του αλγόριθμου bucket-sort είναι να χρησιμοποιήσουμε τα κλειδιά σαν δείκτες σε ένα πίνακα κάδων (buckets) B που έχει στοιχεία B 0,, B N 1. Ο αλγόριθμος λειτουργεί ως εξής. Στην αρχή διασχίζουμε τον πίνακα S και τοποθετούμε τα στοιχεία του στον πίνακα κάδων B. Το στοιχείο του πίνακα S με κλειδί k τοποθετείται στον κάδο B[k] πού είναι μια ακολουθία από στοιχεία του S που έχουν κλειδί k. Στη συνέχεια βάζουμε τα στοιχεία του B πίσω στον S σε ταξινομημένη σειρά, απαριθμώντας τα περιεχόμενα των κάδων B 0,, B N 1. 16

Ο Αλγόριθμος bucket-sort Είναι εύκολο να δούμε ότι ο αλγόριθμος bucket-sort τρέχει σε O(n + N) χρόνο και χρειάζεται O(n + N) χώρο. Επομένως ο αλγόριθμος bucket-sort είναι αποδοτικός όταν η παράμετρος N είναι μικρή σε σχέση με το n π.χ. N = O(n) ή N = O n log n. Η απόδοση του αλγόριθμου χειροτερεύει όταν το N μεγαλώνει σε σχέση με το n. 17

Ο Αλγόριθμος bucket-sort Μια σημαντική ιδιότητα του αλγόριθμου bucket-sort είναι ότι λειτουργεί σωστά ακόμα και αν υπάρχουν πολλά στοιχεία με την ίδια τιμή κλειδιού. Μπορούμε να κρατήσουμε ένα μετρητή για κάθε τιμή του κλειδιού ή να υλοποιήσουμε τους κάδους σαν συνδεδεμένες λίστες κλειδιών. Δομές Δεδομένων και Τεχνικές 18

Ευσταθείς Μέθοδοι Ταξινόμησης Μια μέθοδος ταξινόμησης λέγεται ευσταθής (stable) αν διατηρεί τη σχετική σειρά των στοιχείων ενός αρχείου με διπλά κλειδιά. Ορισμός. Έστω S = ( x 0, k 0,, x n 1, k n 1 ) μια ακολουθία ζευγαριών προς ταξινόμηση. Θα λέμε ότι ένας αλγόριθμος ταξινόμησης είναι ευσταθής αν, για κάθε δύο στοιχεία (x i, k i ) και (x j, k j ) της S τέτοια ώστε k i = k j και το (x i, k i ) προηγείται του (x j, k j ) στην S πριν την ταξινόμηση (δηλαδή, i < j), τότε το (x i, k i ) προηγείται του (x j, k j ) στην S και μετά την ταξινόμηση. 19

Παράδειγμα Θεωρήστε τις παρακάτω εγγραφές που περιέχουν επώνυμα φοιτητών και έτος φοίτησης στο πανεπιστήμιο. Υποθέστε ότι αρχικά ταξινομούνται ως προς το επώνυμο: Επώνυμο Adams 1 Black 2 Brown 4 Jackson 2 Jones 4 Smith 1 Thompson 4 Washington 2 White 3 Έτος φοίτησης Wilson 3 20

Παράδειγμα Μια ασταθής ταξινόμηση ως προς το έτος φοίτησης είναι η παρακάτω: Επώνυμο Έτος φοίτησης Adams 1 Smith 1 Washington 2 Jackson 2 Black 2 White 3 Wilson 3 Thompson 4 Brown 4 Jones 4 21

Παράδειγμα Μια ευσταθής ταξινόμηση ως προς το έτος φοίτησης είναι η παρακάτω: Επώνυμο Έτος φοίτησης Adams 1 Smith 1 Black 2 Jackson 2 Washington 2 White 3 Wilson 3 Brown 4 Jones 4 Thompson 4 22

Ερωτήσεις Ποιοι από τους αλγόριθμους ταξινόμησης που έχουμε παρουσιάσει είναι ευσταθείς; Είναι ο αλγόριθμος bucket-sort ευσταθής; 23

Bucket-sort Ο αλγόριθμος bucket-sort είναι ευσταθής αν κάθε φορά που βάζουμε ένα στοιχείο στην S ή σε ένα κάδο B i, το βάζουμε στο τέλος της ακολουθίας, και κάθε φορά που βγάζουμε ένα στοιχείο αυτό είναι το πρώτο στοιχείο της ακολουθίας. 24

Λεξικογραφική Διάταξη Ας υποθέσουμε ότι θέλουμε να ταξινομήσουμε ακολουθίες στοιχείων με κλειδιά που είναι ζευγάρια (k, l), όπου k και l είναι ακέραιοι στο διάστημα [0, N 1] για κάποιο ακέραιο N 2. Η λεξικογραφική διάταξη αυτών των κλειδιών ορίζεται ως εξής: (k 1, l 1 ) < (k 2, l 2 ) αν k 1 < k 2 ή k 1 = k 2 και l 1 < l 2. Η έννοια της λεξικογραφικής διάταξης γενικεύεται εύκολα για κλειδιά που είναι πλειάδες d στοιχείων για d > 2. 25

Ο Αλγόριθμος Ταξινόμησης Βάσης Ο αλγόριθμος ταξινόμησης βάσης (radix-sort) ταξινομεί ακολουθίες στοιχείων με κλειδιά που είναι ζευγάρια (ή γενικότερα πλειάδες). Ο αλγόριθμος ταξινομεί μια δοσμένη ακολουθία S σε δύο περάσματα χρησιμοποιώντας την ευσταθή έκδοση του bucket-sort: Πρώτα την ταξινομεί ως προς τη δεύτερη συνιστώσα του κλειδιού και μετά ως προς τη πρώτη. Είναι εύκολο να δούμε ότι αν κάνουμε τις δύο ταξινομήσεις με αντίστροφη σειρά, το αποτέλεσμα δεν θα είναι σωστό. 26

Παράδειγμα Θεωρήστε την παρακάτω ακολουθία (δείχνουμε μόνο τα κλειδιά): S = ( 3,3, 1,5, 2,5, 1,2, 2,3, 1,7, 3,2, 2,2 ) Αν ταξινομήσουμε την S με την ευσταθή έκδοση του bucket-sort ως προς την πρώτη συνιστώσα του κλειδιού, τότε παίρνουμε την ακολουθία S 1 = 1,5, 1,2, 1,7, 2,5, 2,3, 2,2, 3,3, 3,2. Αν ταξινομήσουμε την S 1 με την ευσταθή έκδοση του bucket-sort ως προς την δεύτερη συνιστώσα του κλειδιού, τότε παίρνουμε την ακολουθία S 1,2 = 1,2, 2,2, 3,2, 2,3, 3,3, 1,5, 2,5, 1,7. Παρατηρήστε ότι αυτή η ακολουθία δεν είναι ταξινομημένη λεξικογραφικά. 27

Παράδειγμα Αν ταξινομήσουμε την S πρώτα ως προς την δεύτερη συνιστώσα του κλειδιού παίρνουμε την παρακάτω ακολουθία: S 2 = 1,2, 3,2, 2,2, 3,3, 2,3, 1,5, 2,5, 1,7 Αν τώρα ταξινομήσουμε την S 2 ως προς την πρώτη συνιστώσα του κλειδιού παίρνουμε την παρακάτω ακολουθία: S 2,1 = ( 1,2, 1,5, 1,7, 2,2, 2,3, 2,5, 3,2, 3,3 ) Παρατηρήστε ότι η παραπάνω ακολουθία είναι λεξικογραφικά ταξινομημένη. 28

Ο Αλγόριθμος Ταξινόμησης Βάσης Η μέθοδος αυτή μπορεί να επεκταθεί και στην περίπτωση που έχουμε d-πλειάδες. Ο αλγόριθμος ταξινόμησης βάσης είναι χρήσιμος αν κάθε στοιχείο της ακολουθίας που ταξινομούμε μπορεί να θεωρηθεί ότι αποτελείται από μια πλειάδα ψηφίων (ή συμβόλων ή γραμμάτων). Παράδειγμα: Μπορούμε να αναπαραστήσουμε κάθε ακέραιο αριθμό ανάμεσα στο 0 και το 99 ως μια πλειάδα δεκαδικών ψηφίων. Σ αυτή την περίπτωση ο αλγόριθμος ταξινόμησης βάσης ταξινομεί πρώτα ως προς το λιγότερο σημαντικό στοιχείο και μετά ως προς το περισσότερο σημαντικό. 29

Πρόταση Έστω S μία ακολουθία από n ζευγάρια κλειδίτιμή, κάθε ένα από τα οποία έχει κλειδί της μορφής k 1, k 2,, k d, όπου k i είναι ένας ακέραιος στο διάστημα [0, N 1] για κάποιο N 2. Μπορούμε να ταξινομήσουμε την S λεξικογραφικά σε O d n + N χρόνο χρησιμοποιώντας τον αλγόριθμο ταξινόμησης βάσης. Δομές Δεδομένων και Τεχνικές 30

Αλγόριθμοι Ταξινόμησης: Σύνοψη Αν θέλουμε να ταξινομήσουμε μικρούς πίνακες (π.χ., με 100 στοιχεία) οι στοιχειώδεις αλγόριθμοι που παρουσιάσαμε είναι κατάλληλοι. Αν ο δοσμένος πίνακας είναι σχεδόν ταξινομημένος, η ταξινόμηση με εισαγωγή είναι η προτιμητέα. Αν τα στοιχεία του πίνακα είναι μεγάλα και η αντιμετάθεση τους κοστίζει, τότε η ταξινόμηση με επιλογή είναι η κατάλληλη. 31

Αλγόριθμοι Ταξινόμησης: Σύνοψη Ο αλγόριθμος ταξινόμησης με συγχώνευση είναι κατάλληλος για περιπτώσεις που τα δεδομένα μας δεν χωράνε στην κύρια μνήμη και είναι αποθηκευμένα στο δίσκο. Για δεδομένα που χωράνε στην κύρια μνήμη, ο αλγόριθμοι quicksort και heapsort είναι προτιμότεροι του mergesort επειδή ταξινομούν τα δεδομένα επιτόπου. Μεταξύ των quicksort και heapsort, πειραματικές μελέτες έχουν δείξει ότι υπερτερεί ο quicksort τις περισσότερες φορές. Οπότε ο quicksort είναι ένας εξαιρετικός αλγόριθμος γενικής χρήσης για δεδομένα που βρίσκονται στην κύρια μνήμη. Γι αυτό χρησιμοποιείται από την συνάρτηση βιβλιοθήκης qsort της C. 32

Αλγόριθμοι Ταξινόμησης: Σύνοψη Όμως η O(n 2 ) χρονική πολυπλοκότητα χειρίστης περίπτωσης του quicksort είναι απαγορευτική για εφαρμογές πραγματικού χρόνου όπου πρέπει να εγγυηθούμε τον χρόνο ολοκλήρωσης μιας ταξινόμησης. Σ αυτές τις περιπτώσεις καταλληλότερος αλγόριθμος είναι o heapsort επειδή έχει χρονική πολυπλοκότητα χειρίστης περίπτωσης O n log n και ταξινομεί επιτόπου. 33

Αλγόριθμοι Ταξινόμησης: Σύνοψη Αν θέλουμε να ταξινομήσουμε πίνακες με μικρά ακέραια κλειδιά ή πλειάδες κλειδιών, τότε οι αλγόριθμοι bucket-sort και radix-sort είναι οι πιο κατάλληλοι. Μάλιστα αν η παράσταση d(n + N) είναι σημαντικά μικρότερη της n log n τότε οι αλγόριθμοι αυτοί είναι προτιμότεροι του quicksort ή του heapsort. 34

Μελέτη M.T. Goodrich, R. Tamassia and D. Mount. Data Structures and Algorithms in C++. 2 nd edition, 2011. Sections 11.3.1, 11.3.2 and 11.3.3 M.T. Goodrich, R. Tamassia. Δομές Δεδομένων και Αλγόριθμοι σε Java. 5 η έκδοση. Εκδόσεις Δίαυλος. Κεφ. 11.3.1, 11.3.2 και 11.3.3 35