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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Τίτλος Μαθήματος: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

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

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

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

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

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

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

ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΤΥΠΩΝ. ΕΝΟΤΗΤΑ: Γραμμικές Συναρτήσεις Διάκρισης. ΔΙΔΑΣΚΟΝΤΕΣ: Βλάμος Π. Αυλωνίτης Μ. ΙΟΝΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Ποσοτικές Μέθοδοι στη Διοίκηση Επιχειρήσεων ΙΙ Σύνολο- Περιεχόμενο Μαθήματος

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

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

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

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

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

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

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

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

Μαθηματικά. Ενότητα 6: Ασκήσεις Ορίων Συνάρτησης. Σαριαννίδης Νικόλαος Τμήμα Λογιστικής και Χρηματοοικονομικής

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

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

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

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

Δομημένος Προγραμματισμός

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

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

Στατιστική Επιχειρήσεων

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

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

Δομές Δεδομένων. Ενότητα 13: B-Δέντρα/AVL-Δέντρα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων

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

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

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

ΣΤΑΤΙΣΤΙΚΗ ΕΠΙΧΕΙΡΗΣΕΩΝ

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

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

Προγραμματισμός Η/Υ. Αναζήτηση & Ταξινόμηση. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

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

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

Οικονομικά Μαθηματικά

Transcript:

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 7α: Μελέτη πολυπλοκότητας των Αλγόριθμων qucksort & mergesort Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creatve Commos. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Μακεδονίας» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Μαρία Σατρατζέμη 3

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

Γρήγορη Ταξινόμηση Η γρήγορη ταξινόμηση qucksort), που αλλιώς ονομάζεται και ταξινόμηση µε διαμερισμό και ανταλλαγή partto exchage sort), θεωρείται ένας από τους top-0 αλγορίθμους ως προς την πρακτική χρηστότητα και το ενδιαφέρον που προκάλεσαν από τη θεωρητική σκοπιά. Η γρήγορη ταξινόμηση αποτελεί ένα κλασικό παράδειγμα αλγορίθμου της οικογενείας Διαίρει και Βασίλευε. Όπως δηλώνει το πρώτο όνομα του αλγορίθμου, πρόκειται για µία πολύ αποτελεσματική μέθοδο ταξινόμησης πλην ελαχίστων εξαιρέσεων). Όπως δηλώνει το δεύτερο όνοµά του, τα βασικά χαρακτηριστικά του είναι δύο: η ανταλλαγή και ο διαμερισμός. 5

Γρήγορη Ταξινόμηση Πρώτον, δηλαδή, εκτελούνται ανταλλαγές μεταξύ των στοιχείων του πίνακα έτσι ώστε τα στοιχεία µε μικρότερες τιμές να μετακινηθούν προς τη µία πλευρά, ενώ τα στοιχεία µε μεγαλύτερες τιμές να μετακινηθούν προς την άλλη πλευρά του πίνακα. Έτσι, επακολουθεί η εφαρμογή του δεύτερου χαρακτηριστικού, δηλαδή του διαμερισμού του πίνακα σε δύο μικρότερους που ταξινομούνται ανεξάρτητα μεταξύ τους. Είναι προφανές ότι στους δύο υποπίνακες επιφυλάσσεται η ίδια αντιμετώπιση: ανταλλαγή και διαμερισμός. 6

Αλγόριθμος qucksort Δίνεται προς ταξινόμηση ένας πίνακας Α[.. ], που περιέχει ακεραίους αριθμούς. Το pvot αξονικό) είναι ένα στοιχείο του πίνακα, το οποίο παίρνει την τελική του θέση στον πίνακα, ώστε κατόπιν να γίνει ο διαμερισμός σε δύο υποπίνακες με μικρότερα και μεγαλύτερα στοιχεία από το pvot αντίστοιχα. Η επιλογή του pvot μπορεί να γίνει με πολλούς τρόπους. Δεχόμαστε ότι ως pvot λαμβάνεται το πρώτο στοιχείο του πίνακα. 7

Ο πίνακας σαρώνεται από τα αριστερά προς τα δεξιά αναζητώντας το πρώτο στοιχείο µε τιμή μεγαλύτερη ή ίση από την τιμή του pvot. 'Υστερα, ο πίνακας σαρώνεται από τα δεξιά προς τα αριστερά αναζητώντας το πρώτο στοιχείο µε τιμή μικρότερη ή ίση από την τιµή του pvot. Όταν εντοπισθούν δύο τέτοια στοιχεία, τότε αυτά ανταλλάσσονται ώστε κατά το δυνατόν να τείνουν να πλησιάσουν προς την τελική τους θέση. Συνεχίζουμε τις σαρώσεις προσπαθώντας να εντοπίσουμε άλλα παρόμοια ζεύγη και να τα ανταλλάξουμε. Κάποια στιγμή οι δύο δείκτες σάρωσης διασταυρώνονται. Τότε η σάρωση σταματά και το pvot λαμβάνει την τελική του θέση εκτελώντας άλλη µία ανταλλαγή μεταξύ του pvot και του στοιχείου όπου σταμάτησε ο δείκτης της σάρωσης από δεξιά. Έτσι, η διαδικασία μπορεί να συνεχίσει στους δύο υποπίνακες κατά τα γνωστά. 8

Αλγόριθμος qucksorta, left, rght);. f left < rght the. lo left; h rght + ; pvot A[left]; 3. do 4. do lo lo+ whle A[lo] <= pvot; 5. do h h - whle A[h] >= pvot; 6. f lo < h the swapa[lo], A[h]); 7. whle h >= lo; 8. swapa[left], A[h]); 9. qucksorta, left, h-); 0. qucksorta, h+, rght) 9

Επιλογή Pvot Υπάρχουν διάφοροι τρόποι επιλογής του pvot. Στο παράδειγμα επιλέγεται το πρώτο στοιχείο: 40 0 0 80 60 50 7 30 00 0

Διαμερισμός πίνακα Δοθέντος του pvot διαμερίζουμε τα στοιχεία του πίνακα ώστε ο πίνακας που θα προκύψει να αποτελείται από:. Έναν υποπίνακα που περιέχει στοιχεία >= pvot. Έναν υποπίνακα που περιέχει στοιχεία < pvot Οι υποπίνακες αποθηκεύονται στον αρχικό πίνακα. Κατά το διαμοιρασμό γίνεται ανταλλαγή στοιχείων μικρότερων / μεγαλύτερων του pvot.

Ένα παράδειγμα pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h

4. do lo lo + whle A[lo] <= pvot pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 3

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 4

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 5

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 6

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 7

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) pvot dex = 40 0 0 80 60 50 7 30 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 8

Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 9

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 0

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 3

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 4

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 60 50 7 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 5

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 6

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 7

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 8

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 9

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 30

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 3

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 3

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 33

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 34

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 40 0 0 30 7 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 35

3. do Ένα παράδειγμα 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; 8. swapa[left], A[h]); pvot_dex = 5 7 0 0 30 40 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 36

Αποτέλεσμα διαμερισμού 7 0 0 30 40 50 60 80 00 [] [] [3] [4] [5] [6] [7] [8] [9] <= Α[pvot] > Α[pvot] 37

Αναδρομή: Qucksort Sub-arrays 7 0 0 30 40 50 60 80 00 [0] [] [] [3] [4] [5] [6] [7] [8] <= Α[pvot] > Α[pvot] 38

Qucksort: Χειρότερη περίπτωση Υποθέτουμε ότι το πρώτο στοιχείο επιλέγεται ως pvot. Υποθέτουμε ότι ο πίνακας είναι ήδη ταξινομημένος: pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 39

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 40

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 4

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 4

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 43

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 44

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; 8. swapa[left], A[h]); pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] lo h 45

3. do 4. do lo lo + whle A[lo] <= pvot 5. do h h - whle A[h] >= pvot 6. f lo < h swapa[lo], A[h]) 7. whle h >= lo; 8. swapa[left], A[h]); pvot dex = 4 0 3 50 57 63 00 [] [] [3] [4] [5] [6] [7] [8] [9] <= A[pvot] > A[pvot] 46

Πρόταση. Η πολυπλοκότητα της γρήγορης ταξινόμησης είναι Θ ) στη χειρότερη περίπτωση. Απόδειξη Σε πίνακα μεγέθους, το επιλεγόμενο στοιχείο ως pvot στη χειρότερη περίπτωση είναι το μικρότερο ή το μεγαλύτερο ταξινομημένος πίνακας σε αύξουσα ή φθίνουσα διάταξη), και τα μεγέθη των δύο υποπινάκων που θα προκύψουν να είναι 0 και - αντίστοιχα αφού η µία θέση του πίνακα θα καταληφθεί από τον ίδιο τον pvot). Έτσι προκύπτει η ακόλουθη αναδρομική εξίσωση: ) Ο όρος του δεξιού σκέλους αντιστοιχεί στις συγκρίσεις που θα εκτελεσθούν κατά τη σάρωση του πίνακα εντολές 4-5) πριν επιτευχθεί μια διαμέριση. Για την αναδρομική εξίσωση διαδοχικά ισχύει: 3... 0 Με συνεχείς αντικαταστάσεις προς τα πίσω στην ) και Τ0) = 0 προκύπτει ότι: 3... 47

Πρόταση. Η πολυπλοκότητα της γρήγορης ταξινόμησης είναι Θlog ) στην καλύτερη περίπτωση. Απόδειξη Η καλύτερη περίπτωση συμβαίνει όταν κάθε φορά ως pvot επιλέγεται ένα στοιχείο που λαμβάνοντας την τελική του θέση υποδιαιρεί τον πίνακα σε δύο υποπίνακες ίσου μεγέθους. Επομένως ισχύει η αναδρομική εξίσωση: µε αρχικές συνθήκες Τ0) = 0. Για την ευκολία της ανάλυσης υποθέτουμε ότι = k, Οπότε: Ή η απόδειξη όπως το παράδειγμα, σελ. 3, 04_Recurrece Relatos.pdf 48

Αθροίζοντας τα αριστερά και δεξιά σκέλη αυτών των εξισώσεων προκύπτει ότι: Eχουμε: k )... log log Η αναδρομική εξίσωση ) είναι πλέον εύκολη υπόθεση καθώς ισχύει διαδοχικά: k φορές = k log =k) log log log... / 4 4 Απόδειξη με κανόνα ορίου) 49

Πρόταση 3. Η πολυπλοκότητα της γρήγορης ταξινόμησης είναι Θ log ) στη μέση περίπτωση. Απόδειξη Για να εξετάσουμε τη μέση περίπτωση θα υποθέσουμε ότι για στοιχεία, κάθε διάταξη των στοιχείων αυτών όπου! είναι το πλήθος των διατάξεων) είναι ισοπίθανη. Επομένως, το κάθε φορά επιλεγόμενο pvot τελικά επιλέγεται µε τυχαίο τρόπο και άρα όλα τα στοιχεία έχουν την ίδια πιθανότητα / να αποτελέσουν στοιχείο διαχωρισμού pvot). Ετσι καταλήγουμε σε τυχαίες διαμερίσεις του πίνακα, σε υποπίνακες μεγέθους k και -k-, όπου k=0,,, -. Θα χειρισθούμε τη μέση περίπτωση µε τη βοήθεια της επόμενης αναδρομικής εξίσωσης για : k0 k k µε αρχικές συνθήκες Τ0) = 0. 50

k0 k k µε αρχικές συνθήκες Τ0) = 0. Λόγω ισομετρίας και των αρχικών συνθηκών, η προηγούμενη αναδρομική εξίσωση μετασχηματίζεται σε: k 0 k k 0) )... ) 0 ) )... ) ) 0... ) 0 ) )... ) 0)... ) ) )... ) k k k) k) k k k άρα k 5

Τη σχέση πολλαπλασιάζουμε επί και προκύπτει Επίσης στην ίδια σχέση αντικαθιστούμε το με - και πολλαπλασιάζουμε με -, οπότε προκύπτει: Αφαιρώντας τα αντίστοιχα σκέλη των δυο τελευταίων εκφράσεων: ) k k k k ) προκύπτει k k k k ) k k ) ) k k k k ) k k k k ) ) ) ) 5

) ) ) ) ) ) ) ) 3 ) ) ) ) 5 3) ) 3 3 ) 3 ) Με διαδοχικές αντικαταστάσεις του με - με ) προκύπτει: Αθροίζοντας αντίστοιχα τα αριστερά και δεξιά σκέλη και απλοποιώντας προκύπτει : ) ) 3 ) 3 ) 3 3... ) 3 ) ) 3 ) ) 3 Επομένως πρέπει να υπολογίσουμε το άθροισμα του δεξιού σκέλους: ) ) ) ) ) ) ) ) ) 53

H H 3 3 3 H H H H 3 7 3 3 3 3 H H H 3 ) 7 ) ) 3 7 ) H H 3 7 ) 3 ) 7 ) ) H H 3 ) ) 3 H l log H H... 3 log log ) ) 54

55

Qucksort: χώρος αποθήκευσης Η γρήγορη ταξινόμηση δεν είναι επιτόπιος αλγόριθμος, δηλαδή δεν αρκείται στο χώρο του συγκεκριμένου πίνακα αλλά χρειάζεται επιπλέον χώρο. Ο χώρος αυτός δεν φαίνεται καθαρά στον ανωτέρω κώδικα αλλά απαιτείται από το μεταγλωττιστή κατά την αναδρομή. Εύλογα προκύπτει η ερώτηση σχετικά µε το μέγεθος αυτού του απαιτούμενου χώρου. Στη χειρότερη περίπτωση το μέγιστο βάθος της αναδρομής θα είναι - κλήσεις, αριθμός υπερβολικός. Για το λόγο αυτό έχει σχεδιάσει µια επαναληπτική εκδοχή της γρήγορης ταξινόμησης, δηλαδή µια εκδοχή που υλοποιεί την απαραίτητη στοίβα, όπου τοποθετούνται τα όρια του μικρότερου υποπίνακα, όπως φαίνεται στην επόμενη διαδικασία teratve_qucksort. 56

Αλγόριθμος teratve_qucksortleft,rght);. do. whle left < rght) do 3. lo left ; h rght+; pvot A[left]; p=left; q=rght; 4. do 5. do lo + whle A[lo]<=pvot; 6. do h h- whle A[h]>=pvot; 7. f lo<h the swapa[lo], A[h]); 8. whle h>=lo; 9. swapa[left], A[h]); 0. f h - p) < q - h)) the. pushh+); pushq); q h-;. else 3. pushp); pushh-); p h+; 4. f stack s empry the retur; 5. popq); popp); 6. whle true) 57

Ταξινόμηση µε Συγχώνευση Με τον όρο συγχώνευση mergg) εννοούμε την πράξη της δημιουργίας ενός νέου ταξινομημένου πίνακα που περιέχει όλα τα στοιχεία δύο ή και περισσοτέρων) πινάκων, που είναι ήδη ταξινομημένοι. Η διαδικασία Merge που ακολουθεί υλοποιεί τη συγχώνευση δύο ταξινομημένων πινάκων Α και Β µε και m ακεραίους αντίστοιχα) στον πίνακα C. Θεωρείται ότι οι δύο πίνακες έχουν και µία επιπλέον θέση που χρησιμεύει για την αποθήκευση ενός φρουρού setel). 58

Αλγόριθμος merge;. ; j ;. Α[+] maxt; Β[m+] maxt; 3. for k to +m do 4. f Α[] < Β[j] the 5. C[k] Α[]; + 6. else 7. C[k] Β[j]; j j+ Από το βρόχο της εντολής 3, είναι προφανές ότι η πολυπλοκότητα της συγχώνευσης είναι Θ+m), θεωρώντας φραγμένο από επάνω το κόστος της ερώτησης της εντολής 4-6. 59

Merge sort H ταξινόμηση µε ευθεία συγχώνευση straght merge sort) κατά καιρούς έχει υλοποιηθεί µε πλήθος τρόπων, όπως επαναληπτικά ή αναδρομικά, για λίστες ή πίνακες κοκ. Στη συνέχεια ακολουθεί µία εκδοχή της για πίνακες, η oποία αποτελείται από δύο τρήματα: την αναδρομική merge_sort και τη merge. Στις εντολές 6-8 της merge_sort βρίσκεται το μεσαίο στοιχείο του πίνακα και εκτελούνται κλήσεις στους δύο υποπίνακες που προκύπτουν. Από εδώ προκύπτει ότι η μέθοδος ανήκει στην οικογένεια των αλγορίθμων Διαίρει και Βασίλευε. Η διαδικασία merge που καλείται όταν προκύψουν στοιχειώδεις υποπίνακες αναλαμβάνει τις συγκρίσεις των στοιχείων και τα τακτοποιεί µε τη βοήθεια ενός βοηθητικού πίνακα Β 60

Αλγόριθμος mergea, left, mddle, rght);. frst left; secod mddle +; temp left;. whle frst <= mddle) ad secod <= rght) do 3. f A[frst] <= A[secod] the 4. Β[temp] A[frst]; frst frst +; 5. else 6. Β[temp] A[secod]; secod secod + ; 7. temp temp+ 8. f frst<= mddle the 9. for k frst to mddle do 0. Β[temp] A[k]; temp temp +. else. for k secod to rght do 3. Β[temp] A[k]; temp temp + 4. for k left to rght do A[k] B[k] 6

Αλγόριθμος merge_sorta, left, rght); 5. f left < rght the 6. mddle left + rght)/ ; //dvde step 7. merge_sorta, left, mddle); //coquer step 8. merge_sorta, mddle+,rght); //coquer step 9. mergea, left, mddle, rght) //combe step 6

Σχήμα : Σειρά κλήσεων merge_sort Σχήμα : Σειρά κλήσεων merge Αν εφαρμόσουμε τις ανωτέρω διαδικασίες σε πίνακα Α=[5,, 7, 56, 5, 0, 9, 90, 45} µε τα 9 κλειδιά, τότε η mergesort θα κληθεί 7 φορές µε τη σειρά που απεικονίζεται επάνω από κάθε κόμβο του σχήματος, ενώ μέσα σε κάθε κόμβο φαίνονται τα ορίσματα της αντίστοιχος κλήσης. Στο Σχήµα φαίνονται 8 κλήσεις της merge, µε την αντίστοιχη τάξη εκτός του κόμβου και τα ορίσματα εντός του κόμβου. Και στις δύο περιπτώσεις η διάσχιση του δένδρου ακλουθεί τη λογική της αναζήτησης µε προτεραιότητα βάθους dfs). 63

Ένα παράδειγμα 64

Ένα παράδειγμα 65

Πρόταση 5. Η πολυπλοκότητα της merge_sort είναι Θ log ) στη χειρότερη περίπτωση. Απόδειξη Από τον αλγόριθμο merge_sort εξάγουμε την επόμενη αναδρομική εξίσωση: µε αρχική συνθήκη Τ) =, ενώ οι τρεις όροι του δεξιού σκέλους αντιστοιχούν στις εντολές 7-9. Συγκεκριμένα το κόστος σε συγκρίσεις της εντολής 9 προκύπτει από όσα αναφέρθησαν προηγουμένως για τη διαδικασία συγχώνευσης πινάκων. Για την ευκολία της ανάλυσης υποθέτουμε ότι = k, έτσι ώστε το κάθε βήμα διαμερισμού οδηγεί σε υποπροβλήματα ακριβώς μεγέθους /. Από την αναδρομική εξίσωση ισχύει διαδοχικά: 66

4 4 3 4 4 8 8 4 8 3 3 k k k k k = k log =k log log 67 Απόδειξη με κανόνα ορίου)

Η μέθοδος ταξινόμησης µε ευθεία συγχώνευση αξίζει την προσοχή µας γιατί είναι πολύ ευσταθής stable) μέθοδος, δηλαδή ανεξάρτητα από τη φύση των δεδομένων θα εκτελέσει τον ίδιο αριθμό συγκρίσεων στη μέση και τη χειρότερη περίπτωση. Το χαρακτηριστικό αυτό έρχεται σε αντίθεση µε το μειονέκτημα της γρήγορης ταξινόμησης, που διακρίνεται από πολυπλοκότητα Θ ) για τη χειρότερη περίπτωση. Ωστόσο, το συμπέρασμα αυτό προκύπτει γιατί στην ανάλυση λάβαμε υπόψη µας µόνο το πλήθος των εκτελούμενων συγκρίσεων. Σε µία πραγματική υλοποίηση, η χρήση του βοηθητικού πίνακα Β και οι εκτελούμενες καταχωρήσεις είναι επίσης πράξεις µη αμελητέου χρονικού κόστους, οι οποίες επιβαρύνουν τη συνολική επίδοση. Τελικώς, αν και η ταξινόμηση µε συγχώνευση δεν είναι ίσως η καλύτερη μέθοδος ταξινόμησης στην κύρια μνήμη, εν τούτοις αποτελεί τη βάση για μεθόδους εξωτερικής ταξινόμησης. 68

Ο αλγόριθμος merge μπορεί να μπορεί να εκφραστεί εναλλακτικά με τη χρήση βοηθητικών πινάκων L και R όπου αντιγράφονται τα στοιχεία του πίνακα Α, συγκεκριμένα τα A[left.. mddle] αντιγράφονται στον L[.. ] και A[mddle +.. rght ] αντιγράφονται στον R[.. ] όπου = mddle left + και = rght mddle. Χρησιμοποιούμε μια τιμή φρουρό την τιμή ) και την τοποθετούμε στη θέση L[+] και R[+], έτσι δε χρειάζεται να ελέγξουμε αν κάποιος από τους πίνακες είναι κενός. 69

merge A, left, mddle, rght ). mddle left +. rght mddle 3. Create arrays L[.. + ] ad R[.. + ] 4. for to do 5. L[] A[left + ] 6. for j to do 7. R[j] A[rght + j ] 8. L[ + ] 9. R[ + ] 0.. j. for k left to rght do 3. f L[ ] R[ j] the 4. A[k] L[] 5. + 6. else A[k] R[j] 7. j j + 70

7

Ανάλυση πολυπλοκότητας Merge sort με Κύριο θεώρημα Τα πρώτα for loops γραμμή 4 και 6) χρειάζονται Θ + ) = Θ) χρόνο. Το τελευταίο for loop γραμμή ) εκτελεί επαναλήψεις, κάθε μια απαιτεί σταθερό χρόνο. Συνεπώς ο συνολικός χρόνος είναι Θ). Για απλότητα θεωρούμε το ως δύναμη του έτσι ώστε το βήμα διαμοιρασμού να οδηγεί σε υποπροβλήματα ιδίου μεγέθους /. Η βασική περίπτωση συμβαίνει για =. Για, ο χρόνος για την εκτέλεση των βημάτων του merge sort:. Διαίρει Dvde): Υπολογισμός του mddle ως μέσος όρος των left και rght που απαιτεί σταθερό χρόνο Θ).. Κυρίευε Coquer): Αναδρομική επίλυση των υποπροβλημάτων, καθένα μεγέθους /, δηλαδή /). 3. Συνδύασε Combe): Συγχώνευση σε ένα πίνακα με -στοιχεία απαιτεί Θ) χρόνο. Αθροίζοντας τα παραπάνω ) & 3) δίνουν μια συνάρτηση που είναι γραμμικού χρόνου, δηλαδή Θ). Προσθέτοντας τον όρο /) από το βήμα «κυρίευε» ) καταλήγουμε στην παρακάτω αναδρομική σχέση Αρα η αναδρομική σχέση για το merge sort είναι: 7

Ανάλυση πολυπλοκότητας Merge sort με Κύριο θεώρημα Η αναδρομική σχέση για το merge sort είναι: Με βάση το κεντρικό θεώρημα έχουμε: Εστω a, και b > σταθερές, f) μια συνάρτηση και Τ) μια συνάρτηση που ορίζεται επί των μη αρνητικών ακεραίων από την αναδρομική σχέση a b f Όπου /b εννοείται είτε b είτε b. Στην περίπτωση αυτή το Τ) μπορεί να φραγεί ασυμπτωτικά ως εξής: f f f log O a log a log a b b b log a log a log για κάποια σταθερά ε > 0, τότε τότε για κάποια σταθερά ε > 0, και αν b για κάποια σταθερά ε < και για όλα τα από κάποια τιμή και πάνω, τότε af f b cf b Με βάση το Κύριο θεώρημα Master heorem) έχουμε a =, b =, f) = Θ), τότε log log log 73

Η η εικόνα δείχνει ότι για το αρχικό πρόβλημα έχουμε κόστος c και επιπλέον δυο υποπροβλήματα που το καθένα κοστίζει /). Η η εικόνα δείχνει ότι για καθένα από τα υποπροβλήματα μεγέθους-/, έχουμε κόστος c/, και επιπλέον υποπροβλήματα που το καθένα κοστίζει /4). Και συνεχίζουμε με την επέκταση του δένδρου μέχρις ότου η διάσταση του κάθε υποπροβλήματος να γίνει. Στο δένδρο αναδρομής κάθε επίπεδο έχει κόστος c. Το ο επίπεδο έχει κόστος c. Το επόμενο επίπεδο έχει υποπροβλήματα με κόστος το καθένα c/. Το επόμενο επίπεδο έχει 4 υποπροβλήματα με κόστος το καθένα c/4. Κάθε φορά που κατεβαίνουμε επίπεδο το πλήθος των υποπροβλημάτων διπλασιάζεται αλλά το κόστος κάθε υποπροβλήματος μειώνεται στο μισό. log

Δένδρο αναδρομής Αθροίζοντας τα κόστη σε κάθε επίπεδο του δένδρου, έχουμε: Στο υψηλότερο επίπεδο έχουμε c/) + c/) = c Στο επόμενο αυτού : c/4) + c/4) c/4) + c/4) = c.. Γενικά στο επίπεδο που απέχει βαθμίδες από την κορυφή έχει κόμβους καθένας συνεισφέρει στο κόστος μια ποσότητα c/ ). Επομένως το επίπεδο αυτό έχει συνολικό κόστος c/ ) = c. Στο χαμηλότερο επίπεδο υπάρχουν κόμβοι, καθένας από τους οποίους συνεισφέρει κόστος c, οπότε το συνολικό κόστος του επιπέδου αυτού είναι c Συνεπώς το κόστος σε κάθε επίπεδο παραμένει το ίδιο. Το ύψος του δένδρου αναδρομής είναι log και έχει log + επίπεδα. log

76

Mergesort Qucksort 77

Τέλος Ενότητας