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

Σχετικά έγγραφα
Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

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

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

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

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

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

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

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

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

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

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

Εργαστήριο 2: Πίνακες

Αλγόριθμοι και Πολυπλοκότητα Φώτης Ε. Ψωμόπουλος, Περικλής Α. Μήτκας

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

Πληροφορική 2. Αλγόριθμοι

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

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

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Έστω ένας πίνακας με όνομα Α δέκα θέσεων : 1 η 2 η 3 η 4 η 5 η 6 η 7 η 8 η 9 η 10 η

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

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

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

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

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

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

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

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

Αλγόριθμοι και πολυπλοκότητα Διαίρει και Κυρίευε

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

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

Θέματα Προγραμματισμού Η/Υ

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

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

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

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

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

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

Μεθόδων Επίλυσης Προβλημάτων

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

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

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

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

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

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

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

Αλγόριθµοι Divide-and- Conquer

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

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

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

p

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

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

Διάλεξη 17: Επανάληψη για την ενδιάμεση εξέταση. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

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

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

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

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

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

Transcript:

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης: Α. SelectoSort Ταξινόμηση με Επιλογή Β. IsertoSort Ταξινόμηση με Εισαγωγή Γ. MergeSort Ταξινόμηση με Συγχώνευση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1

Αλγόριθμοι ταξινόμησης Δοθέντων μιας συνάρτησης f (orderg fucto) και ενός συνόλου στοιχείων η ταξινόμηση συνίσταται στη μετάθεση των στοιχείων ώστε να μπουν σε μια σειρά η οποία να ικανοποιεί ή f ( x k 1 ) f ( xk ) f ( xk ) 2 f x ( k x x,..., 1, 2 1 x, x k 2 k ) 2,...,... x... f ( x 1 x αύξουσα σειρά φθίνουσα σειρά Ταξινόμηση Ονομάτων: f( Mara ) < f( Mchals ), δηλαδή η συνάρτηση f συγκρίνει τις δυο λέξεις αλφαριθμητικά. k f Θα εξετάσουμε αλγόριθμους ταξινόμησης με κύριο γνώμονα την αποδοτικότητά τους (χρόνος εκτέλεσης, χρήση μνήμης). ( x k k ) ) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

A. Ταξινόμηση με Επιλογή Selecto Sort Η Ταξινόμηση με Επιλογή (Selecto Sort) βασίζεται στα ακόλουθα τρία βήματα: 1. επιλογή του ελάχιστου στοιχείου 2. ανταλλαγή με το οστό στοιχείο ( είναι μια μεταβλητή που αυξάνεται κατά ένα). 3. επανάληψη των βημάτων 1 και 2 για τα υπόλοιπα στοιχεία. Το ελάχιστο μεταξύ στοιχείων μπορεί να βρεθεί με τη χρήση ενός whle loop, σε χρόνο Ο(). Άρα ο χρόνος εκτέλεσης του Selecto Sort είναι: 1 1 O( 2 ) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Ταξινόμηση με επιλογή: SelectoSort SelectoSort: ο αλγόριθμος αυτός ταξινομεί μία λίστα με στοιχεία. Σε κάθε βήμα βρίσκει το οστό πιο μικρό στοιχείο και το τοποθετεί στην θέση. Παράδειγμα: t x = {4, 8, 2, 1, 3, 5; swap Βήμα 1 0 1 2 3 4 5 4 8 2 1 3 5 Βήμα 2 Βήμα 3 Βήμα 4 Βήμα 5 Βήμα 6 1 8 2 4 3 5 1 2 8 4 3 5 1 2 3 4 8 5 1 2 3 4 8 5 1 2 3 4 5 8 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4

Ταξινόμηση με επιλογή: SelectoSort (συν.) Πρότυπο Συνάρτησης vod selectosort(t x[], //ο πίνακας t legth) //το μέγεθος του x Αλγόριθμος Αρχικοποίησε μία μεταβλητή m_dex η οποία θα αποθηκεύει τη θέση του ελάχιστου αριθμού Με ένα βρόγχο for που θα ελέγχει ένα ένα τα στοιχεία του πίνακα (<legth) κάνε τα εξής: Θέσε σαν m_dex το Ψάξε ένα ένα τα στοιχεία με ένα δεύτερο εσωτερικό βρόγχο αρχίζοντας από j= Αν το στοιχείο που βρίσκεται στη θέση j είναι μικρότερο από το στοιχείο που βρίσκεται στη θέση m_dex τότε θέσε m_dex = j Με την έξοδο από το βρόγχο, αντάλλαξε τα στοιχεία που βρίσκονται στη θέση με το στοιχείο που βρίσκεται στη θέση m_dex ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

SelectoSort: Παράδειγμα Εκτέλεσης Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 33 Με =0 8 34 64 51 32 33 m_dex Στοιχείο που θα εισαχθεί στην θέση Με =1 8 32 64 51 34 33 Με =2 8 32 33 51 34 64 Με =3 8 32 33 34 51 64 Με =4 8 32 33 34 51 64 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

SelectoSort: Υλοποίηση vod SelectoSort(t A[]) { t = A.legth; t m_dex; t tmp; for(t =0; < 1; ++){ m_dex = ; for(t j=+1; j<; j++){ f(a[j]<a[m_dex]) m_dex=j; Αρχικοποίηση θέσης μικρότερου στοιχείου Βρες το μικρότερο στοιχείο tmp = A[]; A[] = A[m_dex]; A[m_dex]=tmp; Αντάλλαξε το μικρότερο στοιχείο με το τρέχον στοιχείο στη θέση [] ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

SelectoSort: Ανάλυση Χρόνου Εκτέλεσης vod SelectoSort(){ for (=0; < 1; ++){ for (j=+1; j<; j++){ sum++; Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος Εσωτερικός Βρόγχος: Εξωτερικός Βρόγχος: IL j 1 1) ( 1 1 1 0 IL OL 2 0 ) ( 2 1 1 2 0 0 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

B. Ταξινόμηση με Εισαγωγή Iserto Sort Η Ταξινόμηση με Εισαγωγή (IsertoSort) εισάγει έναένα τα στοιχεία του συνόλου που εξετάζεται, στη σωστή τους θέση. Στη φάση : 1. υποθέτουμε πως ο πίνακας A[0..( 1)] είναι ταξινομημένος, 2. εισάγουμε το στοιχείο Α[] στην ακολουθία Α[0..( 1)] στη σωστή θέση. Αυτό επιτυγχάνεται μετακινώντας όλα τα στοιχεία που είναι μεγαλύτερα του Α[] μια θέση δεξιά. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

B. Ταξινόμηση με Εισαγωγή Iserto Sort (συν.) Στη φάση : 1. υποθέτουμε πως ο πίνακας A[0..( 1)] είναι ταξινομημένος, 2. εισάγουμε το στοιχείο Α[] στην ακολουθία Α[0..( 1)] στη σωστή θέση. Αυτό επιτυγχάνεται μετακινώντας όλα τα στοιχεία που είναι μεγαλύτερα του Α[] μια θέση δεξιά. 1 sorted { A[] 7 17 9 25 otsorted 7 11 sorted 9 2 3 7 17 25 7 11 { A[] otsorted A[] 9 7 17 sorted 25 otsorted 7 11 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

IsertoSort: Παράδειγμα Εκτέλεσης Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 21 Με =1 8 34 64 51 32 21 m_dex Στοιχείο που θα εισαχθεί στην θέση Με =2 8 34 64 51 32 21 Με =3 8 34 51 64 32 21 Με =4 8 32 34 51 64 21 Με =5 8 21 32 34 51 64 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

IsertoSort: Υλοποίηση vod IsertoSort(t A[]){ t = x.legth; t dex,, j; for (=1; < ; ++) { dex = A[]; for (j=; j>0; j ){ Τρέχον στοιχείο εισαγωγής μετακίνηση στοιχείων προς δεξιά f (A[j 1] <= dex) { break; A[j] = A[j 1]; θέλουμε να μετακινήσουμε μόνο τα A[j 1] > dex A[j] = dex; τοποθέτηση στοιχείου dex=9 A[j 1] j= ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Iserto Sort: Παράδειγμα Εκτέλεσης 2 BEFORE:[8,4,8,43,3,5,2,] (Το κόκκινο δείχνει τα ταξινομημένα στοιχεία) :1(dex:4) >8 ( > Δείχνει τις μετακινήσεις) [4,8,8,43,3,5,2,] (Νέος Πίνακας) :2(dex:8) (Τίποτα δεν μετακινείται) [4,8,8,43,3,5,2,] :3(dex:43) (Τίποτα δεν μετακινείται) [4,8,8,43,3,5,2,] :4(dex:3) >43>8>8>4 [3,4,8,8,43,5,2,] :5(dex:5) >43>8>8 [3,4,5,8,8,43,2,] :6(dex:2) >43>8>8>5>4>3 [2,3,4,5,8,8,43,] AFTER:[2,3,4,5,8,8,43,] ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

IsertoSort: Ανάλυση Χρόνου Εκτέλεσης vod IsertoSort(){ for (=1; <; ++){ for (j=; j>0; j ){ sum++; Εσωτερικός Βρόγχος Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος: Εξωτερικός Βρόγχος: IL OL j 0 1 1 IL 1 2 1 2 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Σύγκριση IsertoSort και SelectoSort Υπάρχουν δυο κριτήρια: Βήματα (μέχρι να βρω ένα στοιχείο) και Μετακινήσεις (όταν το βρω, πόσα swap κάνω). Ο αλγόριθμος Selecto sort απαιτεί πάντα Ο(²) βήματα (δεν είναι δυνατή η γρήγορη έξοδος από τους βρόχους), έτσι η βέλτιστη περίπτωση είναι η ίδια με τη χείριστη περίπτωση. Στον αλγόριθμο Iserto Sort, είναι δυνατό να βγούμε από το δεύτερο βρόχο γρήγορα. Στη βέλτιστη περίπτωση (ο πίνακας είναι ήδη ταξινομημένος), ο χρόνος εκτέλεσης είναι της τάξης Ω() βήματα. Παρά τούτου, το Selecto Sort είναι πιο αποδοτικός αν κρίνουμε τους αλγόριθμους με βάση τον αριθμό των μετακινήσεων (swaps) που απαιτούν: το selecto sort απαιτεί Ο() μετακινήσεις, το serto sort, απαιτεί Ο(²) μετακινήσεις (στη χείριστη περίπτωση όπου ο αρχικός πίνακας είναι ταξινομημένος σε φθίνουσα σειρά). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Γ. Ταξινόμηση με Συγχώνευση (Merge sort) Η ταξινόμηση με συγχώνευση είναι διαδικασία διαίρει και βασίλευε ( Dvde ad Coquer: αναδρομική διαδικασία όπου το πρόβλημα μοιράζεται σε μέρη τα οποία λύνονται ξεχωριστά, και μετά οι λύσεις συνδυάζονται. ) Περιγραφή του Mergesort 1.Διαίρεση: Αναδρομικά μοιράζουμε τον πίνακα στα δύο μέχρι να φτάσουμε σε πίνακες μεγέθους ένα (DIVIDE) 2.Συγχώνευση: Ταξινομούμε αναδρομικά τους πίνακες αυτούς με την συγχώνευση γειτονικών πινάκων (χρησιμοποιώντας βοηθητικό πίνακα). (CONQUER) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

MergeSort: Βασική Ιδέα (#στοιχείων αριστερά) =7 (#στοιχείων δεξιά) 7 7 4 3 2 2 2 2 Dvde (splt) Coquer (merge) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Συγχώνευση 2 Λιστών Υποθέστε ότι θέλετε να συγχωνεύσετε 2 ταξινομημένες λίστες L1, L2 και να δημιουργήσετε μια νέα ταξινομημένη λίστα TEMP Διαδικασία 1. Τοποθέτησε τους δείκτες, j στην κεφαλή κάθε λίστας. 2. Διάλεξε το μικρότερο από την λίστα L1 και L2 και τοποθέτησε τον στον πίνακα TEMP στην θέση κ 3. Προχώρησε τον δείκτη (αν το μικρότερο στοιχείο ήταν από την λίστα L1) ή τον δείκτη j στην αντίθετη περίπτωση. 4. Επανέλαβε τα βήματα 2 4 μέχρι να εισαχθούν όλα τα στοιχεία στον TEMP Μέτα από 6 εκτελέσεις: κ (Το,j ξεκινάνε από την αρχή της κάθε λίστας) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

MergeSort: Υλοποίηση vod MergeSort(t A[], t temp[], t l, t r){ // η συνθήκη τερματισμού της ανάδρομης f (l==r) retur; t md = (l+r)/2; // για ελαχιστοποίηση overflow(για μεγάλα l,r) // t md = l + ((r l) / 2); // μοιράζουμε αναδρομικά τον πίνακα MergeSort(A, temp, l, md); MergeSort(A, temp, md+1, r); DIVIDE // συνεχίζεται ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19

MergeSort: Υλοποίηση (συν.) // Τώρα οι πίνακες [l..md] και [md+1..r] είναι // ταξινομημένοι Η διαδικασία συγχώνευσης t k=l, =l, j=md+1; // συγχώνευση στον temp μέχρι μια από // τις λίστες αδειάσει whle ((<=md) && (j<=r)) { f (A[]<A[j]){ temp[k] = A[]; ++; else { temp[k] = A[j]; j++; k++; // συνεχίζεται MERGE ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20

MergeSort: Υλοποίηση (συν.) // copy όλων των υπόλοιπων στοιχείων λίστας L1 whle (<=md) { temp[k] = A[]; k++;++; // copy όλων των υπόλοιπων στοιχείων λίστας L2 whle (j<=r) { temp[k] = A[j]; k++;j++; // αντιγραφή όλων των στοιχείων από TEMP > A for (=l; <=r; ++) { A[] = temp[]; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21

Παράδειγμα Εκτέλεσης Merge Sort BEFORE:[8,4,8,43,3,5,2,1,10] Idex: 0 1 2 3 4 5 6 7 8 0,8: [8,4,8,43,3, 5,2,1,10] 0,4: [8,4,8,43,3] 0,2: [8,4,8] 0,1: [8,4] 0,0: [8] 1,1: [4] Mergg: [A0,A0] [A1,A1] => [4,8,] 2,2: [8] Mergg: [A0,A1] [A2,A2] => [4,8,8,] 3,4: [43,3] 3,3: [43] 4,4: [3] dvde dvde dvde Mergg: [A3,A3] [A4,A4] => [3,43] Mergg: [A0,A2] [A3,A4] => [3,4,8,8,43] 5,8: [5,2,1,10] 5,6: [5,2] 5,5: [5] 6,6: [2] dvde Mergg: [A5,A5] [A6,A6] => [2,5] 7,8: [1,10] dvde 7,7: [1] 8,8: [10] Mergg: [A7,A7] [A8,A8] => [1,10] Mergg: [A5,A6] [A7,A8] => [1,2,5,10] Mergg: [A0,A4] [A5,A8] => [1,2,3,4,5,8,8,10,43] AFTER:[1,2,3,4,5,8,8,10,43] ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22

MergeSort: Ανάλυση Χρ. Εκτέλ. Αναδρομή Το πρόβλημα μοιράζει αναδρομικά σε δυο μέρη την λίστα που θέλουμε να ταξινομήσουμε. Όταν φτάσουμε στην λίστα που έχει μέγεθος 1 τότε σταματά η αναδρομή και το πρόγραμμα αρχίζει να συνδυάζει (merge) τις επιμέρους λίστες. Παρατηρούμε ότι πάνω σε μια λίστα μεγέθους Ν η αναδρομή εκτελείται 2log 2 φορές. Δηλαδή ο πίνακας μοιράζεται ως εξής:, /2, /4,, 2, 1 vod MergeSort(t A[], t temp[], t l, t r){ f (l==r) retur; t md = (l+r)/2; MergeSort(A, temp, l, md); MergeSort(A, temp, md+1, r); Θ(log) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23

MergeSort: Ανάλυση Χρ. Εκτέλ. Συγχώνευση Σε κάθε επίπεδο της ανάδρομης περνάμε μια φορά από το κάθε στοιχείο. Επομένως η συγχώνευση των στοιχείων σε κάθε επίπεδο της εκτέλεσης χρειάζεται γραμμικό χρόνο Θ(). Σημειώστε ότι η διαδικασία απαιτεί τη χρήση βοηθητικού πίνακα. Μπορούμε να χρησιμοποιούμε τον ίδιο βοηθητικό πίνακα temp για όλες τις (αναδρομικές) κλήσεις του ΜergeSort. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24

MergeSort: Ανάλυση Χρ. Εκτέλ. Συνολικός Η αντιγραφή και η συγχώνευση παίρνουν χρόνο Θ() και η αναδρομή παίρνει χρόνο Θ(log ). Συνολικά Θ( log ). Ο χρόνος εκτέλεσης εκφράζεται και από την αναδρομική εξίσωση Τ(0) = Τ(1) = 1 Τ() = 2T(/2) + η οποία μπορεί να λυθεί με το Master Theorem ή με την μέθοδο της αντικατάστασης. Πλεονέκτημα MergeSort: O συνολικός χρόνος εκτέλεσης είναι Θ( log ) (σε αντίθεση με το SelectoSort (Θ( 2 )) και το IsertoSort (Ο( 2 )) Μειονέκτημα: Απαιτεί τη χρήση βοηθητικού πίνακα (δηλαδή χρειάζεται διπλάσιο χώρο αποθήκευσης για την εκτέλεση του). Αυτό δεν καθιστά την μέθοδο πολύ εύχρηστη. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25