Παύλος Εφραιμίδης άλλος ένας αλγόριθμος ταξινόμησης πολυπλοκότητας O(n lgn) Ιδιαίτερα χαρακτηριστικά: χρησιμοποιεί μια δομή δεδομένων που ονομάζεται «σωρός» είναι επιτόπια: το πλήθος των στοιχείων της συστοιχίας εισόδου που είναι αποθηκευμένα εκτός της συστοιχίας αυτής ανά πάσα στιγμή δεν υπερβαίνει μια σταθερή ποσότητα σωρός (heap) οόροςheap ένα αντικείμενο τύπου συστοιχίας ή πίνακα (array) το οποίο μπορεί να θεωρηθεί ως σχεδόν πλήρες δυαδικό δέντρο κάθε κόμβος του δέντρου αντιστοιχεί σε ένα στοιχείο της συστοιχίας και περιέχει την τιμή αυτού το δέντρο είναι συμπληρωμένο σε όλα τα επίπεδα εκτός ίσως από το τελευταίο το οποίο είναι συμπληρωμένο από τα αριστερά μέχρι κάποιου σημείου σωρός (heap): δομή δεδομένων heap στο χώρο των λειτουργικών συστημάτων και των γλωσσών προγραμματισμού διαφορετικός όρος δεν σχετίζεται με τη δομή δεδομένων heap αναφέρεται στο χώρο δυναμικής δέσμευσης μνήμης συστοιχία Α για έναν σωρό το αντικείμενο συστοιχία Α που αντιπροσωπεύει έναν σωρό περιλαμβάνει τα ακόλουθα δύο πεδία μήκος [Α]: το πλήθος των στοιχείων της συστοιχίας μέγεθος-σωρού[α]: το πλήθος των στοιχείων του σωρού που είναι αποθηκευμένα εντός της συστοιχίας σωροί μια δομή δεδομένων που είναι ένα σχεδόν πλήρες δυαδικό δέντρο ικανοποιεί την ιδιότητα σωρού: A[parent()] A[] πχ. 0 Parent() { return } Left() { return } 0 Rght() { return +} 0 0
δυαδικό δέντρο δεν περιλαμβάνει κόμβο, ή ρίζα πχ. αριστερό υποδέντρο φύλλο: κόμβος χωρίς απογόνους σε πλήρες δυαδικό δέντρο: κάθε κόμβος έχει παιδιά ή κανένα παιδί όλα τα φύλλα έχουν το ίδιο βάθος όλοι οι εσωτερικοί κόμβοι έχουν παιδιά δεξί υποδέντρο ελαχίστου ή μεγίστου δύοείδηδυαδικώνσωρών: σωροί μεγίστου ιδιότητα: Α[ΠΑΤΡΙΚΟΣ()] A[] ρίζα: περιέχει το μεγαλύτερο στοιχείο σωροί ελαχίστου ιδιότητα: Α[ΠΑΤΡΙΚΟΣ()] A[] ρίζα: περιέχει το μικρότερο στοιχείο βασικές διαδικασίες αποκατάσταση ιδιότητας μεγίστου σωρού κατασκευή σωρού μεγίστου διαδικασίες εισαγωγή σε σωρό μεγίστου εξαγωγή μεγίστου σωρού αύξηση κλειδιού σωρού μέγιστο σωρού διατήρηση της ιδιότητας σωρού συνθήκη: το A[] μπορεί να έχει πάρει τιμή μικρότερη από (κάποιο από) τα παιδιά του A[] σωροί 0 αποκατάσταση ιδιότητας σωρού δίνεται: συστοιχία Α θέση κάποιου στοιχείου της συστοιχίας τα δυαδικά υπο-δέντρα απόγονοι του κόμβου είναι σωροί μεγίστου το A[] ενδέχεται να παραβιάζει την ιδιότητα σωρού μεγίστου λύση: γίνετε μετακύλιση της τιμής Α[] προς το κατάλληλο υποδέντρο Heapfy(A,): 0 0 Heapfy(A,): 0 0 Heapfy(A,): 0 0
ψευδοκώδικας Heapfy(A,) κατασκευή σωρού βασικές ιδέες: χρησιμοποιούμε τη μέθοδο αποκατάστασης σωρού προχωράμεμελογικήbottom-up (αναβιβαστικά) χρόνος: O(lg n), T(n) T(n/)+Θ() παράδειγμα κατασκευής σωρού 0 A 0 0 0 0 0 0 0 0 0 0 0 0 0 ανάλυση η διαίσθηση: O(nlgn) κάθε κλήση της Heapfy στοιχίζει Θ(lg n) γίνονται O(n) κλήσεις επομένως, η δημιουργία του σωρού στοιχίζει O(nlgn) πιο σφιχτή (tghter) ανάλυση: O(n) θεωρούμε n = k - και πλήρες δυαδικό δέντρο ο χρόνος που απαιτεί η Heapfy όταν εκτελείται για έναν κόμβο ύψους h είναι O(h) συνολικό κόστος = χρησιμοποιώντας (άσκηση) ότι: n h = k k- 0 lgn = k lg n lg n O ( h ) = O ( n ) = O ( n h + h h 0 = h = 0 h = h h= 0 h ) Έστω ότι έχουμε υλοποιημένη μια δομή δεδομένων σωρός. Πως μπορούμε να τη χρησιμοποιήσουμε για να ταξινομήσουμε μία ακολουθία στοιχείων;
αλγόριθμος heapsort ----O(n) ουρές προτεραιότητας πολυπλοκότητα χρόνου = O(nlgn) 0 ουρά προτεραιότητας (prorty queue) μια δομή δεδομένων για τη διαχείριση ενός συνόλου στοιχείων S κάθε στοιχείο στοιχείο χαρακτηρίζεται από μία τιμή που ονομάζεται κλειδί (key) εφαρμογή: χρονοδρομολόγηση εργασιών εξομοίωση λειτουργίες μιας ουράς προτεραιότητας: Insert(S,x) Maxmum(S) Implement wth a heap. Extract-Max(S) εισαγωγή στοιχείου εισαγωγή στοιχείου στο σωρό. επεκτείνουμε το σωρό κατά θέση. στην καινούργια θέση (που βρίσκεται στην τελευταία θέση) τοποθετούμε την ελάχιστη δυνατή τιμή, πχ. μείον άπειρο. εκτελούμε τη διαδικασία αύξησης της τιμής κλειδιού για το στοιχείο στην τελευταία θέση από την ελάχιστη δυνατή τιμή στην επιθυμητή τιμή: διαδικασία Heap-Increase-Key(A,,key)
κλειδί =, HeapInsert(A,κλειδί): A 0 0 0 0 0 0 0 0 Αναφορές/Πηγές Εισαγωγή στους αλγόριθμους, Κεφάλαιο