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

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

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

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

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

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

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

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

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

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

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

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

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

9. Κόκκινα-Μαύρα Δέντρα

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

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

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

έντρα ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη

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

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

4. Συνδεδεμένες Λίστες

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

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

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

Διδάσκων: Κωνσταντίνος Κώστα

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Ισοζυγισμένα υαδικά έντρα Αναζήτησης

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Ουρά Προτεραιότητας: Heap

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

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

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

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

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

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

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

Ενότητα 7 Ουρές Προτεραιότητας

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

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

Προγραμματιστικές Τεχνικές

Heapsort Using Multiple Heaps

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

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

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

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

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

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

Ουρά Προτεραιότητας: Heap

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

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

Ουρά Προτεραιότητας: Heap

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

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

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

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

Ουρές προτεραιότητας

p

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διάλεξη 18: B-Δένδρα

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

Κεφάλαιο 10 Ψηφιακά Λεξικά

Δομές Δεδομένων Ενότητα 4

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

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

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

JDSL Java Data Structures Library

Transcript:

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 02/12/2016

Ουρές Προτεραιότητας: Υπενθύμιση Μια ουρά προτεραιότητας είναι μια πιο εξειδικευμένη δομή δεδομένων σε σχέση με τη στοίβα ή την ουρά Όπως και στην ουρά, τα στοιχεία αφαιρώνται από την αρχή Όμως, τα στοιχεία ταξινομούνται (κατά την εισαγωγή) έτσι, ώστε το στοιχείο με το χαμηλότερο (ή το υψηλότερο) κλειδί να βρίσκεται πάντα μπροστά Δομές Δεδομένων, 3ο Εξάμηνο 2

Ουρές Προτεραιότητας: Υπενθύμιση Τα στοιχεία τοποθετούνται στην ουρά με βάση την σημαντικότητά τους Θεωρούμε ότι το στοιχείο με το μικρότερο (μεγαλύτερο) κλειδί έχει μεγαλύτερη προτεραιότητα Ο στόχος μας είναι να προσπελάσουμε το σημαντικότερο στοιχείο στη συλλογή απομακρύνουμε το στοιχείο από τη συλλογή Δομές Δεδομένων, 3ο Εξάμηνο 3

Λειτουργίες Μία ουρά προτεραιότητας είναι ένας αφηρημένος τύπος δεδομένων (abstract data type ADT) που προσφέρει μεθόδους που επιτρέπουν Απομάκρυνση στοιχείου με την ελάχιστη ή μέγιστη τιμή κλειδιού (στοιχείο στην αρχή της ουράς) Εισαγωγή Όπως και με τους άλλους ADT, η ουρά προτεραιότητας μπορεί να υλοποιηθεί με διάφορες υποκείμενες δομές Δομές Δεδομένων, 3ο Εξάμηνο 4

Υλοποίηση Υλοποίηση ουράς προτεραιότητας Ταξινομημένος πίνακας Απομάκρυνση του μεγαλύτερου στοιχείου γρήγορα Ο(1) Εισαγωγή διαρκεί περισσότερο χρόνο Ο(Ν) Πρέπει να μετακινηθούν τα μισά στοιχεία του πίνακα (κατά μέσο όρο) ώστε να εισαχθεί το νέο στοιχείο στη σωστή θέση Σωρός (είδος δέντρου) Εκτελεί εισαγωγή και διαγραφή σε χρόνο Ο(logN) Δομές Δεδομένων, 3ο Εξάμηνο 5

Δομές Δεδομένων, 3ο Εξάμηνο 6

Δομές Δεδομένων, 3ο Εξάμηνο 7

Δομές Δεδομένων, 3ο Εξάμηνο 8

Δομές Δεδομένων, 3ο Εξάμηνο 9

Σωρός (Εισαγωγή) Ένας σωρός είναι ένα δυαδικό δέντρο με τα εξής χαρακτηριστικά: Είναι πλήρες: είναι πλήρως συμπληρωμένο, αν κοιτάμε κάθε γραμμή από αριστερά προς δεξιά Όμως, η τελευταία γραμμή δε χρειάζεται να είναι συμπληρωμένη Κάθε κόμβος σ ένα σωρό ικανοποιεί τη συνθήκη σωρού, η οποία δηλώνει ότι κλειδί κάθε κόμβου >= κλειδιά των παιδιών του Συνήθως υλοποιείται ως πίνακας Δομές Δεδομένων, 3ο Εξάμηνο 10

Εικονικός κόμβος Πατέρας ρίζας Μπορεί να γίνει υλοποίηση και χωρίς τον εικονικό κόμβο Το δεξί παιδί τοποθετείται αμέσως μετά το αριστερό παιδί Ένα πλήρες δυαδικό δέντρο που αναπαριστά το σωρό και η υλοποίηση του με πίνακα Ο πίνακας αποθηκεύεται στη μνήμη και ο σωρός είναι μόνο μία βασική απεικόνιση Το δέντρο είναι πλήρες και η συνθήκη σωρού ικανοποιείται για όλους τους κόμβους Σαν συνέπεια της πληρότητας του δέντρου, ο πίνακας δεν έχει κενές θέσεις Δομές Δεδομένων, 3ο Εξάμηνο 11

Υλοποίηση Σωρού χωρίς τον Εικονικό Κόμβο Αν ο αριθμός δείκτη του κόμβου είναι index: Αριστερό παιδί:2*index + 1 εξιό παιδί: 2*index + 2 και ο γονέας του είναι: (index-1)/2 December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 12

Ουρές Προτεραιότητας & Σωροί Οι σωροί χρησιμοποιούνται κυρίως για να υλοποιούν ουρές προτεραιότητας Στη συνέχεια για την υλοποίηση ουράς προτεραιότητας με σωρό - θεωρούμε ότι το μέγιστο κλειδί βρίσκεται στην αρχή της ουράς class Node { private int idata;... } // end class Node Κόμβος σωρού Δομές Δεδομένων, 3ο Εξάμηνο 13

Κώδικας Σωρού class Heap{ private Node heaparray[]; } public void insert(node nd) { } public Node remove() { } class priorityqueue { private Heap theheap; public void insert(node nd) { theheap.insert(nd);} public Node remove() { return theheap.remove()} } Άρα, ο σωρός είναι μια πιο βασική δομή δεδομένων από μια ουρά προτεραιότητας Δομές Δεδομένων, 3ο Εξάμηνο 14

Σύγκριση με ΔΔΑ Ο σωρός είναι χαλαρά ταξινομημένος (weakly ordered) συγκριτικά με Α Στα Α, για οποιοδήποτε κόμβο, οι αριστεροί απόγονοι έχουν κλειδιά μικρότερα των δεξιών απογόνων Ως συνέπεια, σε ένα σωρό δεν είναι εύκολη η διάσχιση (traversal) με αύξουσα σειρά, διότι ο σωρός δεν είναι τόσο αυστηρά οργανωμένος όπως το Α Επίσης, πράξεις όπως αναζήτηση και διαγραφή στοιχείου με βάση την τιμή κλειδιού δεν μπορούν να υλοποιηθούν αποδοτικά Παρόλα αυτά, ο τρόπος οργάνωσης του σωρού επιτρέπει ακριβώς την αποδοτική απομάκρυνση στοιχείου με μέγιστη τιμή κλειδιού και εισαγωγή νέων στοιχείων Δομές Δεδομένων, 3ο Εξάμηνο 15

Σωρός: Διαγραφή (1) Απομάκρυνση (διαγραφή) στοιχείου Αφαίρεση του κόμβου με το μέγιστο κλειδί Ο κόμβος προς διαγραφή είναι πάντα η ρίζα maxnode = heaparray[0]; Με τη διαγραφή της ρίζα το δέντρο δεν θα είναι πλήρες κενό κελί Δομές Δεδομένων, 3ο Εξάμηνο 16

Σωρός: Διαγραφή (2) Βήματα για την απομάκρυνση του μεγίστου κόμβου Απομάκρυνση ρίζας Μετακίνηση του τελευταίου κόμβου στη ρίζα (ώστε να είναι πλήρης ο σωρός) Τελευταίος κόμβος δεξιότερος κόμβος στο τελευταίο κατειλημμένο επίπεδο του δέντρου Αντιγραφή κόμβου στη ρίζα heaparray[0] = heaparray[n-1]; N--; Καθοδική πορεία του τελευταίου κόμβου μέχρι να βρεθεί κάτω από έναν κόμβο με μεγαλύτερο κλειδί και πάνω από έναν κόμβο με μικρότερο (ώστε να ικανοποιείται η συνθήκη σωρού) Δομές Δεδομένων, 3ο Εξάμηνο 17

Απομάκρυνση του Μέγιστου Κόμβου (Ρίζα) December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 18

Αντιμετάθεση Κόμβου για Αποκατάσταση της Ιδιότητας του Σωρού μετά από Διαγραφή Αντιμετάθεση του κόμβου προορισμού με το μεγαλύτερο παιδί Αντιμετάθεση με μικρότερο θα οδηγούσε σε παραβίαση της ιδιότητας σωρού Το παιδί θα γίνει γονέας ενός μεγαλύτερου παιδιού Δομές Δεδομένων, 3ο Εξάμηνο 19

Σωρός: Εισαγωγή Ο κόμβος που θα εισαχθεί τοποθετείται στην πρώτη ανοιχτή θέση στο τέλος του πίνακα heaparray[n] = newnode; N++; Είναι πιθανό να παραβιαστεί η συνθήκη σωρού Κλειδί του νέου κόμβου > κλειδί νέου γονέα Ο νέος κόμβος θα πρέπει να κινηθεί προς τα πάνω μέχρι να βρεθεί κάτω από έναν κόμβο με μεγαλύτερο κλειδί και πάνω από έναν κόμβο με μικρότερο Δομές Δεδομένων, 3ο Εξάμηνο 20

Εισαγωγή Κόμβου Αν απομακρύνουμε έναν κόμβο και τον επαναεισάγουμε, το αποτέλεσμα δεν είναι απαραίτητα η αποκατάσταση του αρχικού σωρού Ένα δοθέν σύνολο κόμβων μπορεί να διευθετηθεί με πολλούς έγκυρους σωρούς, ανάλογα με τη σειρά εισαγωγής των κόμβων December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 21

Δε Γίνεται Αντιμετάθεση στην Πραγματικότητα 1 αντιμετάθεση 3 αντιγραφές Στο παράδειγμα (β): 5 αντιγραφές κάνουν τη δουλειά που κάνουν 3 αντιμεταθέσεις December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 22

Η Κλάση Node Δομές Δεδομένων, 3ο Εξάμηνο 23

Η Κλάση Heap Δομές Δεδομένων, 3ο Εξάμηνο 24

Η Μέθοδος insert() Δομές Δεδομένων, 3ο Εξάμηνο 25

Η Μέθοδος trickleup() Δομές Δεδομένων, 3ο Εξάμηνο 26

Η Μέθοδος remove() Δομές Δεδομένων, 3ο Εξάμηνο 27

Η Μέθοδος trickledown() December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 28

Απόδοση Λειτουργιών Σωρού Ο ανοδικός (trickleup) και ο καθοδικός (trickledown) αλγόριθμος αποτελούν το πιο χρονοβόρο κομμάτι των λειτουργιών Ο αριθμός των απαιτούμενων αντιγραφών περιορίζεται από το ύψος του μονοπατιού (π.χ. για 5 επίπεδα απαιτούνται 4 αντιγραφές) TrickleUp: 1 σύγκριση του νέου κόμβου με τον κόμβο στην τρέχουσα θέση TrickleDown: 2 συγκρίσεις μία για την εύρεση του μεγαλύτερου παιδιού και μία για τη σύγκριση του παιδιού με τον τελευταίο κόμβο Ο αριθμός των επιπέδων L είναι log (N+1) όπου Ν το πλήθος των κόμβων Οι δύο μέθοδοι απαιτούν L-1 επαναλήψεις του βρόχου τους Άρα η πολυπλοκότητα των δύο μεθόδων είναι Ο(logN) Δομές Δεδομένων, 3ο Εξάμηνο 29

HeapSort Αλγόριθμος Ταξινόμησης ημιουργία σωρού Εισαγωγή στοιχείων 7, 1, 8, 0, 6, 2, 9, 4 σε σωρό Απομάκρυνση στοιχείου από το σωρό (άρα σε ταξινομημένη σειρά) και εισαγωγή σε πίνακα ιαγραφή πάντα από ρίζα Πολυπλοκότητα: O(N*logN) for (j=0 ; j < size ; j++) theheap.insert( anarray[j] ); // from unsorted array for (j=0 ; j < size ; j++) anarray[j] = theheap.remove(); // to sorted array Δομές Δεδομένων, 3ο Εξάμηνο 30

Αναδρομή Δομές Δεδομένων, 3ο Εξάμηνο 31

Ιδιότητες Αναδρομικών Μεθόδων Ιδιότητες Μια αναδρομική μέθοδος καλεί τον εαυτό της Όταν καλεί τον εαυτό της, το κάνει για να λύσει ένα μικρότερο πρόβλημα Υπάρχει κάποια εκδοχή του προβλήματος που είναι ιδιαίτερα απλή και μπορεί να λυθεί χωρίς η μέθοδος να καλέσει τον εαυτό της Σε κάθε διαδοχική κλήση μιας αναδρομικής μεθόδου, το όρισμα γίνεται μικρότερο (δηλαδή το πρόβλημα γίνεται μικρότερο ή ευκολότερο) Όταν το όρισμα φτάσει σε μια ελάχιστη τιμή, ενεργοποιείται μια συνθήκη (γνωστή και ως βάση αναδρομής ή βασική περίπτωση) και η μέθοδος επιστρέφει χωρίς να καλέσει τον εαυτό της Δομές Δεδομένων, 3ο Εξάμηνο 32

Αναλογία με Μαθηματικά Η αναδρομή είναι το προγραμματιστικό αντίστοιχο της μαθηματικής επαγωγής (ένας τρόπος για να ορίζουμε κάτι χρησιμοποιώντας το ίδιο) Τριγωνικοί Αριθμοί tri(n) = 1 αν n = 1 tri(n) = n + tri(n-1) αν n > 1 Παραγοντικό factorial(n) = 1 αν n = 1 factorial(n) = n * factorial(n-1) αν n> 1 Δομές Δεδομένων, 3ο Εξάμηνο 33

Παράδειγμα Ι: Ύψωση Αριθμού σε Δύναμη 1 x x n x n-1 if if n n 0 0 public double power(double x, int n) { if (n == 0) return 1.0; else return x * power(x, n-1); } Βάση αναδρομής Αναδρομική κλήση Δομές Δεδομένων, 3ο Εξάμηνο 34

Παράδειγμα ΙΙ: Παραγοντικό ενός Αριθμού Υπολογισμός παραγοντικού ενός φυσικού αριθμού public long factorial (int n) { if (n==0) return 1; return n*factorial(n-1); } 0!=1 n! = n*(n-1)! Αναδρομική βάση αλγορίθμου: Η τιμή για n== 0 Δομές Δεδομένων, 3ο Εξάμηνο 35

Η Απόδοση της Αναδρομής Η κλήση μιας μεθόδου επιφέρει κάποια καθυστέρηση Επίσης, τα ορίσματα στη μέθοδο και η διεύθυνση στην οποία η μέθοδος πρέπει να επιστρέψει εισάγονται σε μια εσωτερική στοίβα Μπορεί η αναδρομή να επιφέρει μια επιβάρυνση στο χρόνο εκτέλεσης Η αναδρομή χρησιμοποιεί επιπλέον μνήμη για την αποθήκευση των ορισμάτων και των τιμών επιστροφής στην εσωτερική στοίβα Εάν η ποσότητα των δεδομένων είναι μεγάλη, μπορεί να συμβεί υπερχείλιση στοίβας Η αναδρομή χρησιμοποιείται επειδή απλοποιεί ένα πρόβλημα, όχι επειδή είναι πιο αποτελεσματική Δομές Δεδομένων, 3ο Εξάμηνο 36

υαδική Αναζήτηση Δομές Δεδομένων, 3ο Εξάμηνο 37

Δυαδική Αναζήτηση με Αναδρομή December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 38

Περιπτώσεις μη Αποδοτικής Αναδρομής (1) Fibonacci (0) = 0 Fibonacci(1) = 1 Fibonacci(n) = Fibonacci(n-1)+ Fibonacci(n-2) public static long fib(int n) { if (n<=1) return n else return fib(n-1)+fib(n-2) } Πλεονάζοντες υπολογισμοί με τη χρήση αναδρομής Υπολογίζουμε το fib(n) υπολογίζοντας το fib(n-1) Όταν η αναδρομική κλήση επιστρέψει υπολογίζουμε το fib(n-2) χρησιμοποιώντας μία άλλη αναδρομική κλήση. Ωστόσο το fib(n-2) έχει υπολογιστεί κατά τον υπολογισμό του fib(n-1) Δομές Δεδομένων, 3ο Εξάμηνο 39

Περιπτώσεις μη Αποδοτικής Αναδρομής (2) Ποτέ μη διπλασιάζετε τη δουλειά λύνοντας το ίδιο πρόβλημα σε διαφορετικές αναδρομικές κλήσεις Λύση: υναμικός Προγραμματισμός Δομές Δεδομένων, 3ο Εξάμηνο 40

Αλγόριθμοι Διαίρει και Βασίλευε (Divide and Conquer) Η αναδρομική δυαδική αναζήτηση είναι ένα παράδειγμα της προσέγγισης διαίρει και βασίλευε ιαιρούμε το πρόβλημα σε δύο μικρότερα και λύνουμε καθένα ξεχωριστά Η λύση σε κάθε μικρότερο πρόβλημα είναι η ίδια ιαιρούμε το πρόβλημα σε δύο ακόμα μικρότερα προβλήματα και τα λύνουμε Τελικά, φτάνουμε στη βασική συνθήκη, η οποία λύνεται εύκολα, χωρίς περαιτέρω διαίρεση στη μέση Δομές Δεδομένων, 3ο Εξάμηνο 41

Ταξινόμηση Σύζευξης (MergeSort) Η ταξινόμηση σύζευξης είναι πολύ αποδοτικότερη από τους αλγόριθμους ταξινόμησης που έχουμε δει ως τώρα Έχει πολυπλοκότητα O(N*logN) Οι αλγόριθμοι που έχουμε δει ως τώρα έχουν O(N 2 ) Είναι σχετικά απλή στην υλοποίησή της Μειονέκτημα εν κάνει επί τόπου (in-place) ταξινόμηση Απαιτεί έναν επιπλέον πίνακα στη μνήμη, ίσο σε μέγεθος με αυτόν που ταξινομείται Η AVLSort απαιτεί δομή δέντρου AVL για την υλοποίησή της Η HeapSort απαιτεί δομή σωρού για την υλοποίησή της Δομές Δεδομένων, 3ο Εξάμηνο 42

Βασική Ιδέα: Σύζευξη Ταξινομημένων Πινάκων Α 23 42 87 99 C 0 1 2 3 4 5 6 7 8 12 21 23 42 55 77 87 92 99 Β 12 21 55 77 92 Η σύζευξη δύο ταξινομημένων πινάκων A και B δημιουργεί έναν τρίτο πίνακα C, που περιέχει όλα τα στοιχεία των A και B ταξινομημένα Υποθέστε ότι αρχικά ο C είναι κενός Το σχήμα δείχνει τον C μετά τη διαδικασία συγχώνευσης Δομές Δεδομένων, 3ο Εξάμηνο 43

Η Μέθοδος Συγχώνευσης December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 44

Παράδειγμα MergeSort December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 45

Κώδικας MergeSort Υπάρχει ένας πίνακας thearray με τα στοιχεία προς ταξινόμηση ημιουργείται ένας βοηθητικός πίνακας (πίνακας εργασίας) workspace ίσου μεγέθους, που θα χρησιμοποιηθεί για την προσωρινή αποθήκευση των δευτερευόντων πινάκων που δημιουργούνται Δομές Δεδομένων, 3ο Εξάμηνο 46

Κλήση: recmergesort(workspace, 0, nelems-1) Δομές Δεδομένων, 3ο Εξάμηνο 47

Τροποποιημένη merge() December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 48

Απόδοση Ταξινόμησης Σύζευξης Αριθμός αντιγραφών Ανάλογος του N*logN Για ταξινόμηση Ν στοιχείων χρειαζόμαστε logn επίπεδα και σε κάθε επίπεδο N αντιγραφές Π.χ. για Ν=8: 8*log8 = 8*3 = 24 Συνολικός αριθμός αντιγραφών = 2*N*logN Αριθμός συγκρίσεων Είναι πάντα λίγο μικρότερος από τον αριθμό των αντιγραφών Για κάθε κλήση της merge() απαιτούνται τουλάχιστον Ν/2 και το πολύ Ν-1 συγκρίσεις, όπου Ν το πλήθος των στοιχείων που συγχωνεύονται Δομές Δεδομένων, 3ο Εξάμηνο 49

Προχωρημένη Ταξινόμηση Δομές Δεδομένων, 3ο Εξάμηνο 50

Τι Ξέρουμε Μέχρι Τώρα; Απλές μέθοδοι ταξινόμησης (BubbleSort, SelectionSort, InsertionSort) Κόστος O(N 2 ) Απλές στην υλοποίηση Με χρήση αναδρομής (MergeSort) Κόστος O(N*logN) Όμως απαιτεί διπλάσιο χώρο του αρχικού πίνακα Θα εξετάσουμε μία νέα μέθοδο ταξινόμησης που έχει κόστος O(N*logN) και δεν απαιτεί επιπλέον χώρο Quicksort είναι η γρηγορότερη ταξινόμηση Δομές Δεδομένων, 3ο Εξάμηνο 51

Ταξινόμηση QuickSort H QuickSort στηρίζεται στην έννοια του διαχωρισμού (ή αλλιώς διαμέριση) partition Ο διαχωρισμός δεδομένων είναι η διαίρεσή τους σε ομάδες ώστε όλα τα στοιχεία με τιμή κλειδιού μικρότερη (μεγαλύτερη) από μια συγκεκριμένη τιμή να ανήκουν σε μια (άλλη) ομάδα Το στοιχείο με τη συγκεκριμένη τιμή λέγεται pivot Δομές Δεδομένων, 3ο Εξάμηνο 52

Αλγόριθμος Διαχωρισμού Χρησιμοποιεί δύο δείκτες, έναν σε κάθε άκρη του πίνακα Ο δείκτης στα αριστερά (leftptr) κινείται προς τα δεξιά, ενώ ο δείκτης στα δεξιά (rightptr) κινείται προς τα αριστερά Όσο ο leftptr (rightptr) συναντά στοιχεία με τιμή κλειδιού μικρότερη (μεγαλύτερη) από του pivot, συνεχίζει να κινείται δεξιά (αριστερά) Όταν ο leftptr (rightptr) βρει στοιχείο με μεγαλύτερη (μικρότερη) τιμή σταματάει Εκεί συμβαίνει αντιμετάθεση (swap) των στοιχείων Η διαδικασία συνεχίζεται μέχρι να συναντηθούν οι δείκτες leftptr και rightptr Δομές Δεδομένων, 3ο Εξάμηνο 53

low low high Pivot, high Low σταματά στο μεγαλύτερο στοιχείο 8 high σταματά στο μικρότερο στοιχείο 2 Τα στοιχεία 2 και 8 αντιμετατίθενται low high Low σταματά στο μεγαλύτερο στοιχείο 9 high σταματά στο μικρότερο στοιχείο 5 Τα στοιχεία 5 και 9 αντιμετατίθενται Οι δείκτες low και high διασταυρώνονται high low Αντιμετάθεση του στοιχείου pivot με αυτό στη θέση low Δομές Δεδομένων, 3ο Εξάμηνο 54

Δομές Δεδομένων, 3ο Εξάμηνο 55

Απόδοση του Αλγόριθμου Διαχωρισμού Χρόνος εκτέλεσης: O(N) Αριθμός συγκρίσεων: Ν+1 ή N+2 Αριθμός αντιμεταθέσεων: <= Ν/2 (χειρότερη περίπτωση) Κατά μέσο όρο για τυχαία δεδομένα γίνονται περίπου οι μισές του μέγιστου αριθμού αντιμεταθέσεων Δομές Δεδομένων, 3ο Εξάμηνο 56

QuickSort Ο αλγόριθμος QuickSort διαχωρίζει έναν πίνακα σε δύο υποπίνακες και καλεί τον εαυτό του για να ταξινομήσει τον κάθε υποπίνακα Επιλογή του pivot Η τιμή του πρέπει να είναι τιμή κλειδιού ενός υπαρκτού στοιχείου Μπορεί να επιλεγεί με τυχαίο τρόπο (για λόγους απλότητας ας υποθέσουμε ότι επιλέγεται πάντα το στοιχείο στο δεξιότερο άκρο του υποπίνακα που έχει διαχωρισθεί) Μετά το διαχωρισμό, αν το pivot τοποθετηθεί μεταξύ του αριστερού και του δεξιού υποπίνακα, θα βρίσκεται στην τελική του θέση Δομές Δεδομένων, 3ο Εξάμηνο 57

Πηγή: https://cs.nyu.edu/courses/fall02/v22.0310-002/lectures/lecture-22.html Δομές Δεδομένων, 3ο Εξάμηνο 58

Δομές Δεδομένων, 3ο Εξάμηνο 59

December 2, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 60

Η Επιλογή του Pivot Για αντίστροφα ταξινομημένο πίνακα και εάν ως pivot επιλέγεται το στοιχείο στο δεξιότερο άκρο του υποπίνακα Η απόδοση είναι O(N 2 ) Το πρόβλημα είναι η επιλογή του pivot Ιδανικά, το pivot θα έπρεπε να είναι το μεσαίο των στοιχείων που ταξινομούνται Αυτό θα κατέληγε σε διαχωρισμό του πίνακα σε δύο υποπίνακες ίσου μεγέθους Αυτή είναι η ιδανική περίπτωση για την QuickSort Χειρότερη περίπτωση: διαχωρισμός σε 1 και Ν-1 στοιχεία Άλλοι τρόποι επιλογής pivot Μέσος εκ των τριών (αριστερό, μεσαίο και δεξιό στοιχείο) Δομές Δεδομένων, 3ο Εξάμηνο 61

Απόδοση της QuickSort Για ομοιόμορφα τυχαία διάταξη των στοιχείων εισόδου, η QuickSort έχει αναμενόμενο χρόνο εκτέλεσης O(N*logN) Αριθμός συγκρίσεων: (Ν+2)*logN Αριθμός αντιμεταθέσεων: <= (N/2)*logN Στη γενικότερη περίπτωση, έχει πολυπλοκότητα Ο(Ν 2 ) Η QuickSort χρησιμοποιείται ευρύτατα στην πράξη(!) Δομές Δεδομένων, 3ο Εξάμηνο 62