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

Σχετικά έγγραφα
Αλγόριθμοι και πολυπλοκότητα Bucket-Sort και Radix-Sort

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

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

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

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

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

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

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

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

Ταχεία Ταξινόμηση Quick-Sort

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

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

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

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

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

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

ίκτυα Ταξινόµησης (CLR κεφάλαιο 28)

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

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

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Ουρά Προτεραιότητας: Heap

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

Heapsort Using Multiple Heaps

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

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

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

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

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

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

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

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

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

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

Αναζήτηση και ταξινόμηση

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

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

Transcript:

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort 1, c 3, a 3, b 7, d 7, g 7, e B 0 1 3 4 5 6 7 8 9 1

BucketSort (Ταξινόμηση Κάδου) - Αρχικά θεωρείται ένα κριτήριο κατανομής με βάση το οποίο το σύνολο των κλειδιών κατανέμεται σε m ανεξάρτητα υποσύνολα κλειδιών που ονομάζονται κάδοι. Στη συνέχεια τα κλειδιά κάθε κάβου κατανέμονται και πάλι αναδρομικά σε m μικρότερους κάδους

BucketSort (Ταξινόμηση Κάδου) - Έστω πίνακας Α μεγέθους Ν που τα στοιχεία του παίρνουν ακέραιες τιμές στο διάστημα 0...Μ-1 - Ο BucketSort μπορεί να ταξινομήσει τον πίνακα σε χρόνο O(N+M) - Δημιουργούμε έναν πίνακα count μεγέθους Μ με τα στοιχεία του αρχικά 0. - Διαβάζουμε τον πίνακα Α και για κάθε στοιχείο του εκτελούμε count[a[i]]++ για 0 i N-1 - Στη συνέχεια διαβάζουμε τον πίνακα count και γράφουμε στον πίνακα Α τόσες φορές το j όσες αναγράφονται στο count[j] 3

BucketSort (Ταξινόμηση Κάδου) ΠΑΡΑΔΕΙΓΜΑ Α = [6, 0, 3,, 3, 5, 8, 1, 9, 1, 1,,, 4,, 4, ] - Δημιουργούμε έναν πίνακα count μεγέθους Μ με τα στοιχεία του αρχικά 0. - Διαβάζουμε τον πίνακα Α και για κάθε στοιχείο του εκτελούμε count[a[i]]++ για 0 i N-1 count = [1, 3, 5,,, 1, 1, 0, 1, 1] - Στη συνέχεια διαβάζουμε τον πίνακα count και γράφουμε στον πίνακα Α τόσες φορές το j όσες αναγράφονται στο count[j] A=[0 1 1 1 3 3 4 4 5 6 8 9] 4

BucketSort (Ταξινόμηση Κάδου) - Αν Μ=Ο(Ν) τότε ο χρόνος εκτέλεσης είναι Ο(Ν) Αυτό σημαίνει ότι το θεωρητικό όριο για την πολυπλοκότητα των αλγορίθμων ταξινόμησης δεν ισχύει? ΙΣΧΥΕΙ. Ο αλγόριθμος δε βασίζεται σε συγκρίσεις και επιπλέον χρησιμοποιεί χώρο Ο(Μ+Ν) αντί για Ο(Ν) 5

Bucket-Sort Έστω S ακολουθία N (κλειδιών και στοιχείων) αντικειμένων με κλειδιά στο σύνολο [0, M 1] Ο Bucket-sort χρησιμοποιεί τα κλειδιά ως δείκτες σε ένα βοηθητικό array B από ακολουθίες (buckets - κάδοι) Φάση 1: Άδειασε την ακολουθία S με τη μετακίνηση κάθε αντικειμένου (k, o) στο bucket του B[k] Φάση : For i 0,, M 1, μετακίνησε τα αντικείμενα του κάδου B[i] στο τέλος της ακολουθίας S Ανάλυση: Η φάση 1 παίρνει χρόνο O(N) Η φάση παίρνει χρόνο O(N ) Ο Bucket-sort χρειάζεται χρόνο O(N ) Αλγόριθμος bucketsort(s, N) Είσοδος ακολουθία S (key, element) αντικειμένων με κλειδιά εντός του συνόλου [0, N 1] Έξοδος ακολουθία S ταξινομημένη με αύξουσα σειρά κλειδιών B array N κενών ακολουθιών while S.isEmpty() f S.first() (k, o) S.remove(f) B[k].insertLast((k, o)) for i 0 to N 1 while B[i].isEmpty() f B[i].first() (k, o) B[i].remove(f) S.insertLast((k, o)) 6

Παράδειγμα Ακτίνα κλειδιών [0, 9] 7, d 1, c 3, a 7, g 3, b 7, e Φάση 1 1, c 3, a 3, b 7, d 7, g 7, e B 0 1 3 4 5 6 7 8 9 Φάση 1, c 3, a 3, b 7, d 7, g 7, e 7

Ιδιότητες και Επεκτάσεις Key-type Ιδιότητα Τα κλειδιά χρησιμοποιούνται σαν δείκτες σε ένα πίνακα και δεν μπορούν να είναι αυθαίρετα αντικείμενα Δεν υπάρχει εξωτερικός συγκριτής Ιδιότητα Ευσταθούς Ταξινόμησης Η σχετική σειρά κάθε αντικειμένων με το ίδιο κλειδί διατηρείται μετά την εκτέλεση του αλγορίθμου Επεκτάσεις Ακέραια κλειδιά εντός της ακτίνας [a, b] Βάλε το αντικείμενο (k, o) σε κάδο B[k a] Κλειδιά Strings από ένα σύνολο D πιθανών strings, όπου το D έχει σταθερό μήκος (πχ. Τα ονόματα των 50 πολιτειών των ΗΠΑ) Ταξινόμησε το D και υπολόγισε το βαθμό r(k) κάθε string k του D στην ταξινομημένη ακολουθία Βάλε το αντικείμενο (k, o) σε κάδο B[r(k)] 8

Λεξικογραφική Σειρά Μία d-άδα (d-tuple) είναι μια ακολουθία d κλειδιών (k 1, k,, k d ), όπου το κλειδί k i λέγεται ότι είναι η i-στη διάσταση της πλειάδας (tuple) Παράδειγμα: Οι Καρτεσιανές συντεταγμένες ενός σημείου στο χώρο είναι μια τριάδα (3-tuple) Η λεξικογραφική σειρά d-tuples ορίζεται αναδρομικά ως εξής: (x 1, x,, x d ) (y 1, y,, y d ) x 1 y 1 x 1 y 1 (x,, x d ) (y,, y d ) Οι πλειάδες (tuples) συγκρίνονται με βάση την πρώτη διάσταση, μετά με βάση τη δεύτερη, κοκ. 9

Λεξικογραφικός Ταξινομητής Έστω C i ο συγκριτής που συγκρίνει πλειάδες με βάση την i-στη διάσταση Έστω stablesort(s, C) ένας αλγόριθμος ταξινόμησης που χρησιμοποιεί το συγκριτή C Ο Λεξικογραφικός ταξινομητής ταξινομεί μια ακολουθία d-άδας (d-tuples) σε λεξικογραφική σειρά εκτελώντας d φορές τον αλγόριθμο stablesort, μια για κάθε διάσταση Ο Lexicographic-sort τρέχει σε χρόνο O(dT(n)), όπου T(n) είναι ο χρόνος εκτέλεσης του stablesort Lexicographic-Sort Αλγόριθμος lexicographicsort(s) Είσοδος ακολουθία S από d-tuples Έξοδος ακολουθία S ταξινομημένη σε λεξικογραφική σειρά for i d downto 1 stablesort(s, C i ) Παράδειγμα: (7,4,6) (5,1,5) (,4,6) (, 1, 4) (3,, 4) (, 1, 4) (3,, 4) (5,1,5) (7,4,6) (,4,6) (, 1, 4) (5,1,5) (3,, 4) (7,4,6) (,4,6) (, 1, 4) (,4,6) (3,, 4) (5,1,5) (7,4,6) 10

Ο Radix-sort είναι μια εξειδίκευση του lexicographic-sort που χρησιμοποιεί bucket-sort ως ευσταθή αλγόριθμο ταξινόμησης σε κάθε διάσταση Ο Radix-sort είναι εφαρμόσιμος σε tuples όπου τα κλειδιά σε κάθε διάσταση i είναι ακέραιοι στο σύνολο [0, N 1] Ο Radix-sort τρέχει σε χρόνο O(d( N )) Radix-Sort Ταξινόμηση ρίζας Αλγόριθμος radixsort(s, N) Είσοδος ακολουθία S από d- tuples τέτοια ώστε: (0,, 0) (x 1,, x d ) και (x 1,, x d ) (M 1,, M 1) για κάθε tuple (x 1,, x d ) στο S Έξοδος ακολουθία S ταξινομημένη σε λεξικογραφική σειρά for i d downto 1 bucketsort(s, M) 11

Radix-Sort για Δυαδικούς Αριθμούς Σκεφτείτε μια ακολουθία από n ακεραίους των b-bit x x b x 1 x 0 Αναπαριστούμε κάθε στοιχείο ως b- tuple ακεραίων στο σύνολο [0, 1] και εφαρμόζουμε radix-sort με M Αυτή η εφαρμογή του radix-sort αλγορίθμου τρέχει σε χρόνο O(bn) Πχ, μπορούμε να ταξινομήσουμε μια ακολουθία ακεραίων των 3-bit σε γραμμικό χρόνο Αλγόριθμος binaryradixsort(s) Είσοδος ακολουθία S από ακεραίους των b-bit Έξοδος ακολουθία S ταξινομημένη Αντικατάστησε κάθε στοιχείο x του S με το αντικείμενο (0, x) for i 0 to b 1 replace the key k of each item (k, x) of S με bit x i of x bucketsort(s, ) 1

Παράδειγμα Ταξινομώντας μια ακολουθία 4-μπιτων ακεραίων 1001 0010 1001 1001 0001 0010 1110 1101 0001 0010 1101 1001 0001 0010 1001 0001 1101 0010 1101 1101 1110 0001 1110 1110 1110 13

Κάτω Φράγμα Ταξινόμησης 14

Ταξινόμηση Βασισμένη στη Σύγκριση Πολλοί αλγόριθμοι ταξινόμησης είναι βασισμένοι στη σύγκριση. Ταξινομούν συγκρίνοντας ζεύγη αντικειμένων Παραδείγματα: bubble-sort, selection-sort, insertion-sort, heapsort, merge-sort, quick-sort,... Ας εξετάσουμε λοιπόν ένα κάτω φράγμα του χρόνου εκτέλεσης οποιουδήποτε αλγορίθμου χρησιμοποιεί συγκρίσεις για να ταξινομήσει n στοιχεία, x 1, x,, x n. ναι Είναι x i < x j? όχι 15

Μετρώντας Συγκρίσεις Ας μετρήσουμε συγκρίσεις. Η λειτουργία των συγκριτικών αλγορίθμων αναπαρίσταται με δέντρα συγκρίσεων (ή δέντρα αποφάασεων) Κάθε πιθανό τρέξιμο του αλγορίθμου αντιστοιχεί σε ένα μονοπάτι από τη ρίζα ως ένα φύλλο ενός Δένδρου Αποφάσεων (decision tree) x i < x j? x a < x b? x c < x d? x e < x f? x k < x l? x m < x o? x p < x q? 16

Ύψος Δένδρου Αποφάσεων (Decision Tree) Το ύψος αυτού του δέντρου αποφάσεων καθορίζει το πλήθος των συγκρίσεων και είναι ένα κάτω φράγμα του χρόνου εκτέλεσης Κάθε πιθανή αντιμετάθεση στην είσοδο πρέπει να οδηγεί σε διαφορετικό φύλλο στην έξοδο. Εάν όχι, κάποια είσοδος 4 5 θα είχε την ίδια διάταξη εξόδου με 5 4, κάτι το οποίο θα ήταν λάθος. Για την ταξινόμηση n στοιχείων απαιτείται να υπάρξουν τουλάχιστον n! Φύλλα (όλες οι μεταθέσεις). Δεδομένου ότι υπάρχουν n!=1** *n φύλλα, το ύψος είναι τουλάχιστον log (n!) minimum height (time) x a < x b? x i < x j? x c < x d? Το δυαδικό δέντρο ύψους h έχει το μέγιστο h φύλλα log (n!) x e < x f? x k < x l? x m < x o? x p < x q? Η ταξινόμηση n στοιχείων απαιτεί h >=n! n! 17

Το Κάτω Φράγμα Κάθε αλγόριθμος διάταξης βασισμένος σε σύγκριση χρειάζεται τουλάχιστον log (n!) χρόνο Επομένως, κάθε τέτοιος αλγόριθμος χρειάζεται log ( n!) log n n ( n / )log ( n / ). Δηλαδή, κάθε αλγόριθμος ταξινόμησης βασισμένος σε σύγκριση πρέπει να τρέχει σε χρόνο Ω(n log n) 18

Επιλογή 19

Το Πρόβλημα της Επιλογής (Selection Problem) Δεδομένου ενός ακεραίου k και n στοιχείων x 1, x,, x n, που έχουν ληφθεί από την συνολική ακολουθία, βρες το k-στο μικρότερο στοιχείο σε αυτό το σύνολο. Φυσικά μπορούμε να ταξινομήσουμε σε χρόνο O(n log n) και μετά να δεικτοδοτήσουμε το k-στο στοιχείο. k=3 7 4 9 6 4 6 7 9 Μπορούμε να λύσουμε το πρόβλημα της επιλογής ταχύτερα; 0

Γρήγορη Επιλογή Quick-Select Ο Quick-select είναι ένας radomized αλγόριθμος επιλογής βασισμένος στην αρχή prune-καιsearch: Prune: Διάλεξε ένα τυχαίο στοιχείο x (που καλείται pivot) και διαχώρισε το S σε L στοιχεία μικρότερα του x E στοιχεία ίσα με x G στοιχεία μεγαλύτερα του x Search: ανάλογα με το k, είτε η απάντηση είναι το E, είτε χρειάζεται να εκτελέσουμε αναδρομικά ή στο L ή στο G L k < L x E x L < k < L + E (done) G k > L + E k = k - L - E 1

Διαχωρισμός Διαχωρίζουμε μια ακολουθία εισόδου όπως και στον αλγόριθμο γρήγορης ταξινόμησης: Αφαιρούμε, κατά σειρά, κάθε στοιχείο y από το S και Εισάγουμε το y στο L, E ή G, ανάλογα με το αποτέλεσμα της σύγκρισης με το pivot x Κάθε εισαγωγή και εξαγωγή γίνεται στην αρχή ή στο τέλος μιας ακολουθίας, και λόγω αυτού παίρνει O(1) χρόνο Συνεπώς, το βήμα διαχωρισμού του quick-select χρειάζεται χρόνο O(n) Αλγόριθμος partition(s, p) Είσοδος ακολουθία S, θέση p του pivot Έξοδος υποακολουθίες L, E, G των στοιχείων του S που είναι μικρότερα, ίσα ή μεγαλύτερα από το pivot. L, E, G κενές ακολουθίες 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

Οπτικοποίηση του Quick-Select Μια εκτέλεση του quick-select μπορεί να οπτικοποιηθεί με ένα μονοπάτι αναδρομής Κάθε κόμβος αναπαριστά μια αναδρομική κλήση του quickselect, και αποθηκεύει το k και την υπόλοιπη ακολουθία k=5, S=(7 4 9 3 6 5 1 8) k=, S=(7 4 9 6 5 8) k=, S=(7 4 6 5) k=1, S=(7 6 5) 5 3

Αναμενόμενος Χρόνος Εκτέλεσης Σκεφτείτε μια αναδρομική κλήση του quick-select σε μια ακολουθία μεγέθους s Καλή κλήση: τα μεγέθη των L και G είναι το καθένα λιγότερο από 3s 4 Κακή κλήση: ένα από τα L και G έχει μέγεθος μεγαλύτερο από 3s 4 7 9 4 3 7 6 1 9 7 9 4 3 7 6 1 4 3 1 7 9 7 1 1 1 7 9 4 3 7 6 Καλή κλήση Κακή κλήση Μια κλήση είναι καλή με πιθανότητα 1 1/ των πιθανών pivots προκαλούν καλές κλήσεις: 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 Κακοί pivots Καλοί pivots Κακοί pivots 4

Αναμενόμενος Χρόνος Εκτέλεσης, Μέρος Πιθανοτικό γεγονός #1: Ο αναμενόμενος αριθμός ρίψεων νομίσματος που απαιτείται για να φέρουμε μια κορώνα είναι. Πιθανοτικό γεγονός #: Η Αναμονή είναι μια γραμμική συνάρτηση: E(X + Y ) = E(X ) + E(Y ) E(cX ) = ce(x ) Έστω T(n) ο αναμενόμενος χρόνος εκτέλεσης του quick-select. Από το #, T(n) < T(3n/4) + bn*(αναμενόμενος # κλήσεων πριν από 1 καλή κλήση) Από το #1, T(n) < T(3n/4) + bn Δηλ. το T(n) είναι γεωμετρική σειρά: T(n) < bn + b(3/4)n + b(3/4) n + b(3/4) 3 n + Έτσι T(n) είναι O(n). Μπορούμε να λύσουμε το selection problem σε O(n) αναμενόμενο χρόνο. 5

Ντετερμινιστική Επιλογή Μπορούμε να εκτελέσουμε επιλογή σε χρόνο χειρότερης περίπτωσης O(n). Βασική ιδέα: χρησιμοποιούμε αναδρομικά τον ίδιο τον αλγόριθμο επιλογής για να βρούμε ένα καλό pivot για τον quick-select: Χώρισε το S σε n/5 σύνολα των 5 Βρες έναν median σε κάθε σύνολο Βρες αναδρομικά τον median των baby medians. Min size for L 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 1 3 4 5 Min size for G 6