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

Σχετικά έγγραφα
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

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

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

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

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

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

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

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

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

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

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

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

Πίνακες. Ι.Ε.Κ ΓΛΥΦΑΔΑΣ Τεχνικός Τεχνολογίας Internet Αλγοριθμική Ι (Ε) Σχολ. Ετος A Εξάμηνο

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ

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

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

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

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

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

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

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

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

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

Transcript:

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

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

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

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

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

Αλγόριθμος 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) 6

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

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

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

Ένα παράδειγμα 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 0

Ένα παράδειγμα 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. 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. 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 3

Ένα παράδειγμα 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 4

Ένα παράδειγμα 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 5

Ένα παράδειγμα 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 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 60 50 7 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 60 50 7 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 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 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 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 7 50 60 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; 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 33

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

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

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

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 37

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 38

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 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; 8. swapa[left], A[h]); 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; 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] 43

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

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

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

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

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

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

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

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 ) ) Θ Θ 5

5

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

Αλγόριθμος teratve_qucksortleft,rght);. do. whle left < rght) do 3. lo left ; h rght; pvot A[left]; pleft; qrght; 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) 54

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

Αλγόριθμος 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. 56

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

Αλγόριθμος 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] 58

Αλγόριθμος 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 59

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

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

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

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

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

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

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

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 67

68

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

Ανάλυση πολυπλοκότητας 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 b) cf ) Με βάση το Κύριο θεώρημα Master heorem) έχουμε a, b, f) Θ), τότε ) ) log Θ log log ) Θ 70

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

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

73

Mergesort Qucksort 74

75

76