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

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

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

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

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

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

Δοµές Δεδοµένων. 12η Διάλεξη Διάσχιση Δέντρων και Ουρές Προτεραιότητας. Ε. Μαρκάκης

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

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

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

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

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

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

p

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

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

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

Η εφαρµογή xsortlab. Οπτικός τρόπος ταξινόµησης

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

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

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

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

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

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

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

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

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

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

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

17. Εισαγωγή σε αριθμητικές μεθόδους για μηχανικούς και αλγορίθμους

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

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

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

ιαφάνειες παρουσίασης #4

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

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

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

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

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

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

ΣΧΟΛΙΑ 1 ΗΣ ΕΡΓΑΣΙΑΣ. 15 Μαΐου 2013

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Δέντρα Δυαδικής Αναζήτησης Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

Ελαφρύτερος και βαρύτερος Αλγόριθμοι ταξινόμησης

Heapsort Using Multiple Heaps

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

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

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

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

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

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

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

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

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

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

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

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

Προγραμματιστικές Τεχνικές

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Προγραμματιστικές Τεχνικές

Κεφάλαιο 1 Εισαγωγή. Περιεχόμενα. 1.1 Αλγόριθμοι και Δομές Δεδομένων

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

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

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Transcript:

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

Περίληψη Quicksort Ο βασικός αλγόριθµος Χαρακτηριστικά επιδόσεων Μικροί υποπίνακες Μη αναδροµική υλοποίηση Δοµές Δεδοµένων 9-2

Mergesort - Ανακεφαλαίωση Τρέχει σε χρόνο O(NlogN) Average case επίσης O(NlogN) Πολύ καλύτερη από τις στοιχειώδεις µεθόδους Αλλά: Θέλει πρόσθετο χώρο O(N) (βοηθητικό πίνακα) Χρόνος εκτέλεσης ανεξάρτητος από τα δεδοµένα εισόδου Δοµές Δεδοµένων 9-3

Ιδέες για βελτιώσεις Γιατί να χωρίζουµε τον πίνακα ακριβώς στη µέση σε κάθε βήµα? Μπορούµε να κάνουµε διαµερίσεις σε υποπίνακες που να εξαρτώνται και από τα δεδοµένα Quicksort: προτάθηκε από τον Hoare (1960). Υλοποιεί τέτοιες διαµερίσεις µε βάση ένα από τα στοιχεία του πίνακα Αποτελεί την καλύτερη µέθοδο ταξινόµησης ως σήµερα (καθιερωµένη ταξινόµηση της βιβλιοθήκης της Java) Δοµές Δεδοµένων 9-4

Ιδέα: ξανά διαίρει και βασίλευε Quicksort Επιλέγουµε κάποιο στοιχείο του πίνακα ως pivot Αναδιατάσσουµε τον πίνακα σε 2 υποπίνακες έτσι ώστε Πρώτος υποπίνακας έχει τα στοιχεία που είναι pivot Δεύτερος υποπίνακας έχει τα στοιχεία που είναι pivot Το pivot µπαίνει στην τελική του θέση T. Hoare, 1960 Αναδροµή στους υποπίνακες Δεν χρειάζεται συγχώνευση στο τέλος! R. Sedgewick Ph.D. thesis, 1975 Δοµές Δεδοµένων 9-5

Quicksort static void quicksort(item[] a, int p, int r) { if (r <= p) return; } int i = partition(a, p, r);/* διαµερίζει τον πίνακα και βάζει στη θέση a[i] το pivot element */ quicksort(a, p, i-1); quicksort(a, i+1, r); Δοµές Δεδοµένων 9-6

Υλοποίηση της διαµέρισης Η partition πρέπει να τοποθετεί το pivot στοιχείο στη θέση a[i] και να φροντίζει ότι Τα στοιχεία a[p],,a[i-1] είναι a[i] Τα στοιχεία a[i+1],, a[r] είναι a[i] Ποιο στοιχείο να επιλέξουµε για pivot? Για τυχαία δεδοµένα δεν παίζει σπουδαίο ρόλο ποιο θα επιλέξουµε Δοµές Δεδοµένων 9-7

Υλοποίηση της διαµέρισης Υλοποίηση µε pivot = a[r] Έστω v = a[r] Αναδιάταξη: Σαρώνουµε τον πίνακα από τα αριστερά µέχρι να βρούµε στοιχείο v (µε τον δείκτη i) Σαρώνουµε από δεξιά µέχρι να βρούµε στοιχείο v (µε τον δείκτη j) Αντιµεταθέτουµε και συνεχίζουµε µέχρι να συναντηθούν οι αριθµοδείκτες ή να περάσει ο j τον i Στο τέλος βάζουµε το v εκεί που έχει σταµατήσει ο i Δοµές Δεδοµένων 9-8

Υλοποίηση της διαµέρισης Διαµέριση µε pivot = a[r] static int partition(item a[], int p, int r) { int i = p-1, j = r; ITEM v = a[r]; for (;;) { while (less(a[++i], v)) ;//i δεν βγαίνει εκτός while (less(v, a[--j])) if (j == p) break; if (i >= j) break; exch(a, i, j); } exch(a, i, r); return i; } Δοµές Δεδοµένων 9-9

Χαρακτηριστικά Επιδόσεων Δεν χρειάζεται πρόσθετο χώρο µνήµης σε αντίθεση µε την Mergesort Χρόνος εκτέλεσης: Worst case όταν ο πίνακας είναι ήδη ταξινοµηµένος! Θα χρειαστούµε Ν + Ν-1+...+1 = Ν(Ν+1)/2 = Ο(Ν 2 ) συγκρίσεις Όµως, average case: Ο(ΝlogN) (απόδειξη πιο δύσκολη) Στην πράξη είναι η πιο γρήγορη και ευρέως χρησιµοποιούµενη µέθοδος σήµερα Δεν συναντώνται συχνά δεδοµένα που να είναι ήδη ταξινοµηµένα ή σχεδόν ταξινοµηµένα Αντιθέτως το worst case των Insertion sort, Bubble sort, Selection sort, είναι πιο πιθανό Δοµές Δεδοµένων 9-10

Βελτιώσεις και Παραλλαγές Όπως και µε την Mergesort, η αναδροµή δεν λειτουργεί καλά για µικρά υποαρχεία Χρήση Insertion sort σε αρχεία µε µέγεθος Μ Αλλαγή 1 ης γραµµής σε if (r-p <= M) insertionsort(a, p, r) Ή ακόµα καλυτερα σε: if (r-p <= M) return; Χρήση Insertion sort µόνο στο τέλος: static void sort(item a[], int p, int r) { quicksort(a, p, r); //θα προκύψει πρώτα ένας µερικώς ταξινοµηµένος πίνακας insertionsort(a, p, r); } Δοµές Δεδοµένων 9-11

Quicksort ή Shellsort? Ν Shellsort Quicksort Quicksort µε Μ=3 Quicksort µε Μ=10 Quicksort µε Μ=20 12500 31 23 22 10 9 25000 42 20 19 19 19 50000 94 45 41 39 40 100000 214 95 88 85 90 200000 516 201 194 189 188 400000 1159 449 420 417 404 800000 2678 927 908 870 876 Δοµές Δεδοµένων 9-12

Quicksort ή Mergesort? Ν Quicksort Α Σ Α: Αναδροµικός Mergesort Σ: συνθετικός Mergesort 12500 23 27 30 25000 20 43 42 50000 45 91 92 100000 95 199 204 200000 201 421 455 400000 449 904 992 800000 927 1910 2106 Δοµές Δεδοµένων 9-13

Το βάθρο για ό,τι έχουµε δει... Quicksort Mergesort Shellsort Δοµές Δεδοµένων 9-14

Μη αναδροµική υλοποίηση Με χρήση στοίβας Μιµείται τις αναδροµικές κλήσεις Κάνουµε pop για να επεξεργαστούµε έναν υποπίνακα Ωθούµε στη στοίβα τους αριθµοδείκτες των 2 υποπινάκων που προκύπτουν µετά τη διαµέριση Βάζουµε πρώτα τον υποπίνακα µε το µεγαλύτερο µέγεθος Επεξεργαζόµαστε πρώτα τον υποπίνακα µε το µικρότερο µέγεθος Εξασφαλίζεται έτσι ότι το µέγεθος της στοίβας δεν µεγαλώνει πολύ Δοµές Δεδοµένων 9-15

Μη αναδροµική υλοποίηση static void quicksort(item[] a, int p, int r) { intstack S = new intstack(2*ν);//ν = r-p+1 } S.push(p); S.push(r); while (!S.isEmpty()) { } r = S.pop(); p = S.pop(); if (r <= p) continue; int i = partition(a, p, r); if (i-p > r-i) { S.push(p); S.push(i-1);} S.push(i+1); S.push(r); if (r-i >= i-p) { S.push(p); S.push(i-1); } Δοµές Δεδοµένων 9-16