Ταξινόμηση με συγχώνευση Merge Sort 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 Πληροφορικής 1
Διαίρει και Βασίλευε Η μέθοδος του «Διαίρει και Βασίλευε» είναι μια γενική αρχή σχεδιασμού αλγορίθμων : Divide: Διαίρεσε τα δεδομένα εισόδου S σε 2 ή περισσότερα ανεξάρτητα σύνολα S 1, S 2, Recur: λύσε το υποπροβλήματα που σχετίζονται με τα S 1 και S 2 Conquer: συνδύασε τις λύσεις για S 1 και S 2 σε μια λύση για τοs Η βασική περίπτωση για την αναδρομή είναι υποπροβλήματα μεγέθους 0 ή 1 Ο Merge-sort είναι ένας αλγόριθμος ταξινόμησης βασισμένος στην αρχή του «Διαίρει και Βασίλευε» Όπως και ο heap-sort Χρησιμοποιεί συγκριτή Έχει χρόνο εκτέλεσης O(n log n) Αντίθετα με τον heap-sort Δε χρησιμοποιεί βοηθητική ουρά προτεραιότητας Αποκτά πρόσβαση στα δεδομένα σειριακά (κατάλληλα για ταξινόμηση στοιχείων σε δίσκο) Πληροφορικής 2
Merge-Sort Ο Merge-sort σε ακολουθία εισόδου S με n στοιχεία αποτελείται από 3 βήματα: Divide: χώρισε το S σε 2 ακολουθίες S 1 και S 2 περίπου n 2 στοιχείων η καθεμία Recur: ταξινόμησε αναδρομικά τα S 1 και S 2 Conquer: συνένωσε τα S 1 και S 2 σε μια μοναδική ταξινομημένη ακολουθία Αλγόριθμος mergesort(s, C) Είσοδος ακολουθία S με n στοιχεία, συγκριτής C Έξοδος ακολουθία S ταξινομημένη σύμφωνα με τοc if S.size() > 1 (S 1, S 2 ) partition(s, n/2) mergesort(s 1, C) mergesort(s 2, C) S merge(s 1, S 2 ) Πληροφορικής 3
Συγχώνευση Σημαντικό ρόλο στη λειτουργία της ταξινόμησης συγχώνευση παίζει η συνάρτηση Merge που συγχωνεύει δύο ταξινομημένες ακολουθίες σε μια ακολουθία επίσης ταξινομημένη. Η συγχώνευση εξελίσσεται σε φάσεις. Σε κάθε φάση συγκρίνουμε τα μικρότερα στοιχεία των δύο υποακολουθιών που δεν έχουν ακόμη μεταφερθεί στην τελική ακολουθία (την ακολουθία που θα αποτελέσει το αποτέλεσμα της συγχώνευσης). Το μικρότερο από τα δύο στοιχεία μεταφέρεται στην τελική ακολουθία και η φάση ολοκληρώνεται. Πληροφορικής 4
Συγχώνευση δύο ταξινομημένων ακολουθιών Το βήμα conquer του merge-sort αποτελείται από τη συνένωση των ταξινομημένων A και B σε μια ταξινομημένη ακολουθία S που περιέχει την ένωση των στοιχείων των A και B Συγχωνεύοντας δύο ταξινομημένες ακολουθίες με n 2 στοιχεία και εφαρμόζοντας τεχνική διπλά συνδεδεμένης λίστας απαιτείται O(n) χρόνος Αλγόριθμος merge(a, B) Είσοδος ακολουθίες A και B με n 2 στοιχεία η καθεμία Έξοδος ταξινομημένη ακολουθία του A B S empty sequence while A.isEmpty() B.isEmpty() if A.first().element() < B.first().element() S.insertLast(A.remove(A.first())) else S.insertLast(B.remove(B.first())) while A.isEmpty() S.insertLast(A.remove(A.first())) while B.isEmpty() S.insertLast(B.remove(B.first())) return S Πληροφορικής 5
Δένδρο Merge-Sort Μια εκτέλεση του merge-sort απεικονίζεται από ένα δυαδικό δένδρο Κάθε κόμβος αναπαριστά μια αναδρομική κλήση του merge-sort και αποθηκεύει Μη ταξινομημένη ακολουθία πριν την εκτέλεση και το διαχωρισμό της Ταξινομημένη ακολουθία στο τέλος της εκτέλεσης Η ρίζα είναι η αρχική κλήση Τα φύλλα είναι κλήσεις σε υποακολουθίες μεγέθους 0 ή 1 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 Πληροφορικής 6
Παράδειγμα Εκτέλεσης Διαχωρισμός 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 7
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση, διαχωρισμός 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 8
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση, διαχωρισμός 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 9
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση, βασική περίπτωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 10
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση, βασική περίπτωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 11
Παράδειγμα Εκτέλεσης (συνέχεια) Συνένωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 12
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση,, βασική περίπτωση, συνένωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 13
Παράδειγμα Εκτέλεσης (συνέχεια) Συνένωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 8 6 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 14
Παράδειγμα Εκτέλεσης (συνέχεια) Αναδρομική κλήση,, συνένωση, συνένωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 15
Παράδειγμα Εκτέλεσης (συνέχεια) Συνένωση 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 Πληροφορικής 16
Ανάλυση του Merge-Sort Το ύψος h του δένδρου του merge-sort είναι O(log n) Σε κάθε αναδρομική κλήση διαιρούμε την ακολουθία στα 2, Η συνολική δουλειά που γίνεται στους κόμβους βάθους i είναι O(n) Διαχωρίζουμε και συνενώνουμε 2 i ακολουθίες μεγέθους n 2 i Εκτελούμε 2 i 1 αναδρομικές κλήσεις Ο συνολικός χρόνος εκτέλεσης του merge-sort είναι O(n log n) βάθος #ακολ. μέγεθος 0 1 n 1 2 n 2 i 2 i n 2 i Πληροφορικής 17
Παράδειγμα A. Εκτελέστε αναζήτηση mergesort (συγχώνευσης) στον πίνακα Α=[5, 2, 4, 6, 1, 3, 2, 6]. Β. Επηρεάζεται η απόδοση του αλγορίθμου mergesort όταν ο πίνακας Α είναι: α. ταξινομημένος στην επιθυμητή σειρά; β. ταξινομημένος σε αντίθετη σειρά από την επιθυμητή; Δικαιολογείστε την απάντησή σας. Πληροφορικής 18
Εκτελέστε αναζήτηση mergesort (συγχώνευσης) στον πίνακα Α=[5, 2, 4, 6, 1, 3, 2, 6]. Πληροφορικής 19
Παράδειγμα Επηρεάζεται η απόδοση του αλγορίθμου mergesort όταν ο πίνακας Α είναι: α. ταξινομημένος στην επιθυμητή σειρά; β. ταξινομημένος σε αντίθετη σειρά από την επιθυμητή; Δικαιολογείστε την απάντησή σας. Η διαδικασία merge κοστίζει το ίδιο ανεξάρτητα αν τα δεδομένα είναι ήδη ταξινομημένα (φθίνοντα ή αύξοντα). Πληροφορικής 20
Περίληψη Αλγορίθμων Ταξινόμησης Αλγόριθμος Χρόνος Παρατηρήσεις selection-sort O(n 2 ) insertion-sort O(n 2 ) heap-sort O(n log n) merge-sort O(n log n) αργός in-place για μικρά σύνολα εισόδου (< 1K) αργός in-place για μικρά σύνολα εισόδου (< 1K) ταχύς in-place για μεγάλα σύνολα εισόδου (1K 1M) ταχύς σειριακή πρόσβαση δεδομένων για πολύ μεγάλα σύνολα εισόδου (> 1M) Πληροφορικής 21