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

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

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

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

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

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

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

εισαγωγικές έννοιες Παύλος Εφραιμίδης Δομές Δεδομένων και

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

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

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

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

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

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

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

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

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

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

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

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

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

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

viii 20 Δένδρα van Emde Boas 543

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Περιεχόμενα

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

Αλγοριθμικές Τεχνικές

ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ (συνέχεια)

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

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

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

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

Fast Fourier Transform

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

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

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

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

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

G n. n=1. n=1. n=1 G n) = m (E). n=1 G n = k=1

ο ρόλος των αλγορίθμων στις υπολογιστικές διαδικασίες Παύλος Εφραιμίδης Δομές Δεδομένων και Αλγόριθμοι

Εξωτερική Ταξινόμηση. Μ.Χατζόπουλος 1

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ

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

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

1 Το πρόβλημα της συντομότερης διαδρομής

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

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

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

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

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

περιεχόμενα υπολογιστικό πρόβλημα αλγόριθμοι παράδειγμα ταξινόμησης ταξινόμηση αλγόριθμοι τεχνολογία αλγορίθμων Παύλος Εφραιμίδης

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

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

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

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

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

Transcript:

Εισαγωγη στον Σχεδιασμο και Αναλυση αλγοριθμων Αλγοριθμοι Ταξινομησης Η ταξινόμηση μιας ακολουθίας αριθμών είναι από τα βασικά αποτελέσματα της θεωρίας αλγορίθμων. Μια ευρεία γκάμα τέτοιων αλγορίθμων έχουν αναπτυχθεί και εδώ παρουσιάζουμε τους κύριους και ταχύτερους από αυτούς. Προσοχή: Οι σημειώσεις αυτές αποσκοπούν απλά στην συνολική καταγραφή των ψευδοκωδίκων για να μπορούν οι ενδιαφερόμενοι να έχουν εύκολα πρόσβαση σε αυτούς. Δεν γίνεται επεξήγηση της λειτουργίας τους. Για την κατανόηση της λειτουργίας τους διατρέξτε στην βιβλιογραφία. Είσοδος: Μια ακολουθία n αριθμών A =< a 1, a 2,..., a n >. Εξοδος: Μια αναδιάταξη των αριθμών < a 1, a 2,..., a n > τέτοια ώστε a 1 a 2 a n. 1. InsertionSort(A) (Ενθετική Ταξινόμηση) 1. για j = 2 έως μήκος [Α] 2. κλειδί=α[j] 3. i = j 1 4. ενόσω i > 0 και A[i] > κλειδί 5. A[i + 1] = A[i] 6. i = i 1 7. A[i + 1]=κλειδί Η επίδοση της Ενθετικής ταξινόμησης εξαρτάται άμεσα από τον βαθμό της ταξινόμησης που έχει η είσοδος. Για μια ήδη ταξινομημένη είσοδο θα πάρει χρόνο γραμμικό (που είναι το καλύτερο που μπορούμε να ελπίζουμε μιας και τόσος χρόνος χρειάζεται απλά και μόνο για να διαβάσει τα στοιχεία) αλλά για μια είσοδο που είναι αντίστροφα ταξινομημένη ο αλγόριθμος κάνει τον κακό (αν και όχι τραγικό) χρόνο της τάξης του Θ(n 2 ). Για περισσότερες πληροφορίες για τον χρόνο του αλγορίθμου ανατρέξτε (εκτός από το βιβλίο) και στο google. 1

2. MergeSort(A, p, r) (Συγχωνευτική ταξινόμηση) 1. αν p < r 2. τότε q = (p + r)/2 3. MergeSort(A, p, q) 4. MergeSort(A, q + 1, r) 5. Merge(A, p, q, r) Merge(A, p, q, r) (Συγχώνευση) 1. n 1 = q p + 1 2. n 2 = r q 3. για i = 1 έως n 1 4. L[i] = A[p + i 1] 5. για j = 1 έως n 2 6. R[j] = A[q + j] 7. L[n 1 + 1] = 8. R[n 2 + 1] = 9. i = 1 10. j = 1 11. για k = p έως r 12. αν L[i] R[j] 13. τότε A[k] = L[i] 14. i = i + 1 15. αλλιώς A[k] = R[j] 16. j = j + 1 Ο αλγόριθμος της Συγχωνευτικής Ταξινόμησης είναι κλασσικό παράδειγμα αλγορίθμου που χρησιμοποιεί την τεχνική Διαίρει και Βασίλευε. Ο αλγόριθμος σπάει την ακολουθία στην μέση και δημιουργεί δύο προβλήματα με μέγεθος μισό του αρχικού. Αφού ταξινομίσει αυτά (με την ίδια μέθοδο, δηλαδή με το σπάσει και αυτά στην μέση) μετά καλεί την διαδικασία Merge(A, p, q, r) η οποία συγχωνέυει της δύο ταξινομημένες ακολουθίες μισού μεγέθους σε μία! Η υπορουτίνα Merge(A, p, q, r) έχει γραμμικό χρόνο εκτέλεσης, δηλαδή Θ(n). Η αναδρομική σχέση που περιγράφει τον χρόνο εκτέλεσης της 2

MergeSort(A, p, r) είναι Τ(n) = 2T (n/2)+θ(n) = O(nlogn) (από κεντρικό Θεωρήμα). 3

3. QuickSort(A, p, r) (Ταχυταξινόμηση) 1. αν p < r 2. τοτε q = Partition(A, p, r) 3. QuickSort(A, p, q 1) 4. QuickSort(A, q + 1, r) Partition(A, p, r) (Διαμέριση) 1. x = A[r] 2. i = p 1 3. για j = p έως r 1 4. αν A[j] x 5. τότε i = i + 1 6. Εναλλαγή(A[i], A[j]) 7. Εναλλαγή(A[i + 1], A[r]) 8. επιστροφή(i + 1) Η υπορουτίνα P artition(a, p, r) έχει χρόνο εκτέλεσης γραμμικό, δηλαδή Θ(n). Η επίδοση της ταχυταξινόμησης εξαρτάται άμεσα από την διαμερίση που θα παράξει η υπορουτίνα P artition(a, p, r). Στην χειρότερη περίπτωση θα μας δώσει ένα υποπρόβλημα μήκους n 1 και ένα μήκους 0 οπότε η αναδρομική σχέση θα είναι: Τ(n)=Τ(n 1)+Τ(0)+Θ(n)=Θ(n 2 ). Οχι και τόσο καλός χρόνος. Στην καλή περίπτωση όμως η διαμέριση γίνεται στη μέση της ακολουθίας και τότε η αναδρομική σχέση γίνεται Τ(n) 2T (n/2)+θ(n)=o(nlogn) (από το κεντρικό θεώρημα). Το ενδιαφέρον στον αλγόριθμο αυτό είναι πως ο χρόνος παραμένει ίδιος ακόμα και αν η διαμέριση δεν γίνεται στην μέση αλλά απλά ισομερώς, αρκεί αυτό να συμβαίνει σε κάθε επανάληψη της υπορουτίνας P artition(a, p, r). Δηλαδή ο αλγόριθμος τρέχει κοντά στον χρόνο καλύτερης περίπτωσης ακόμα και όταν η είσοδος είναι τέτοια που διαμερίζεται συνέχεια σε υποπροβλήματα με αναλογία 9 προς 1 (που διασθητικά φαίνεται πολύ κακός). Ετσι η επίδοση μέσης περίπτωσης είναι πολύ κοντά στην επίδοση καλύτερης περίπτωσης (αλλιώς δεν θα τον αναφέραμε καν). 4

4. HeapSort(A) (Ταξινόμηση Σωρού) 1. CreateMaxHeap(A) 2. για i = μήκος [Α] αντίστροφα έως 2 3. Εναλλαγή(Α[1],Α[i]) 4. ΠλήθοσΣωρού(Α)=ΠλήθοσΣωρού(Α)-1 5. RestoreMaxHeap(A, 1) RestoreMaxHeap(A, i) (Αποκατάσταση Σωρού Μεγίστου) 1. l =Αριστερός (i) 2. r =Δεξιός (i) 3. αν l ΠλήθοσΣωρού(Α) και A[l] > A[i] 4. τότε #-μεγίστου=l 5. αλλιώς #-μεγίστου=i 6. αν r ΠλήθοσΣωρού(Α) και A[r] > A[#-μεγίστου] 7. τότε #-μεγίστου=r 8. αν #-μεγίστου i 9. τότε Εναλλαγή(A[i], A[#-μεγίστου]) 10. RestoreMaxHeap(A, # μεγίστου) CreateMaxHeap(A) (Κατασκευή Σωρού Μεγίστου) 1. ΠλήθοσΣωρού[Α]=μήκος (Α) 2. για i = μήκος (Α)/2 αντίστροφα έως 1 3. RestoreMaxHeap(A, i) Οι υπορουτίνες Αριστερός (i) και Δεξιός (i) επιστρέφουν αντίστοιχα 2i και 2i + 1. Ο αλγόριθμος της ταξινόμησης σωρού χρησιμοποιεί (τι άλλο!) μια σωρό. Για τον ορισμό και τις ιδιότητες μια σωρού ανατρέξτε στην βιβλιογραφία και στο διαδίκτιο. Η διαδικασία RestoreMaxHeap(A, 1) απαιτεί λογραιθμικό χρόνο και είναι εύκολο να δει κανείς πως καλείτε n φορές. Άρα συνολικά nlogn. Τόσο χρόνο απαιτεί και η εκτέλεση της διαδικασίας CreateMaxHeap(A) η οποία εκτελείται μόνο μια φορά. Τελικά λοιπόν έχουμε πως Τ(n) = O(nlogn) + nlogn = O(nlogn) 5

5. Γενικές Παρατηρήσεις: (αʹ) Εχει αποδειχθεί πως κάθε αλγόριθμος ταξινόμησης που χρησιμοποιεί συγκρίσεις πρέπει να πάρει χρόνο Ω(nlogn) (Είναι λίγο πιο προχωρημένο, αλλά είναι μέσα στις δυνατότητές σας να το αποδείξετε αυτό). Δηλαδή οι αλγόριθμοι MergeSort(A) και HeapSort(A) είναι βέλτιστοι! Αποκλείεται να βρεθεί αλγόριθμος πιο γρήγορος από αυτούς. (βʹ) Παρ όλα αυτά υπάρχουν κάποιοι αλγόριθμοι που λειτουργούν υπό ορισμένες προυποθέσεις και τρέχουν σε χρόνο γραμμικό. (γʹ) Οπως επανειλημμένα ειπώθηκε παραπάνω, για περισσότερες πληροφορίες και κατανόηση των αλγορίθμων αυτών ανατρέξτε σε παραδείγματα σε βιβλία και στο διαδίκτυο (και στις παραδόσεις του μαθήματος φυσικά!). 6