ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δένδρα van Emde Boas TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μελετάμε την περίπτωση όπου αποθηκεύουμε.
Advertisements

Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Αλγόριθμοι Αναζήτησης
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Δομές Δεδομένων - Δυαδικά Δένδρα (binary trees)
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Αλγόριθμοι Ταξινόμησης
Ψηφιακά Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να χρησιμοποιήσουμε την παραπάνω αναπαράσταση.
Επιλογή Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
Εργασία Η υλοποίηση του αλγορίθμου συγχώνευσης θα πρέπει να χρησιμοποιεί την ιδέα των ροών (streams). Θα πρέπει να υπάρχουν δύο διαφορετικά είδη.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
Δυναμική Διατήρηση Γραμμικής Διάταξης Διατηρεί μια γραμμική διάταξη δυναμικά μεταβαλλόμενης συλλογής στοιχείων. Υποστηρίζει τις λειτουργίες: Έλεγχος της.
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων. Πίνακας Συμβόλων (Symbol Table) (Ι)  Είναι μια δομή στην οποία αποθηκεύονται τα ονόματα ενός προγράμματος και.
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Ισορροπημένα Δένδρα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μπορούμε να επιτύχουμε χρόνο εκτέλεσης για.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι12-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ο αλγόριθμος του Prim και ο αλγόριθμος του Kruskal.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
Ουρά Προτεραιότητας: Heap
ΘΠ06 - Μεταγλωττιστές Πίνακας Συμβόλων Φροντιστήριο - 30/04/2009.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Δομές Δεδομένων.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Αλγόριθμοι Ταξινόμησης
ΕΠΛ 223 Θεωρία και Πρακτική Μεταγλωττιστών7-1 Πίνακας Συμβόλων Πίνακας συμβόλων: δομή δεδομένων που χρησιμοποιείται για την αποθήκευση διαφόρων πληροφοριών.
Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος.
TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει.
Δομές Δεδομένων - Ισοζυγισμένα Δυαδικά Δένδρα (balanced binary trees)
Δομές Αναζήτησης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες:
Λεξικό, Union – Find Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Εισαγωγή στην Επεξεργασία Ερωτήσεων.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 8-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: 2-3 Δένδρα, Υλοποίηση και πράξεις Β-δένδρα B-Δένδρα.
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
EPL231 – Data Structures and Algorithms
Μέγιστη ροή TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση χωρητικότητας Κατευθυνόμενο γράφημα.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι13-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ο αλγόριθμος Dijkstra για εύρεση βραχυτέρων μονοπατιών.
Παράδειγμα B + -Tree Υποθέτουμε B + -Tree τάξης 3 (α=2, b=3)  Κάθε φύλλο θα έχει 2 ως 3 το πολύ στοιχεία  Κάθε εσωτερικός κόμβος θα έχει 2 ως 3 το πολύ.
1 ΤΜΗΜΑ ΜΠΕΣ Αλγόριθμοι Αναζήτησης Εργασία 1 Τυφλή Αναζήτηση.
Δομές Δεδομένων 1 Θέματα Απόδοσης. Δομές Δεδομένων 2 Οργανώνοντας τα Δεδομένα  Η επιλογή της δομής δεδομένων και του αλγορίθμου επηρεάζουν το χρόνο εκτέλεσης.
Θεωρία Γράφων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές TSP, Μέτρα κεντρικότητας, Dijkstra Data Engineering Lab.
Ελαφρύτατες διαδρομές TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Ευρετήρια.
Μέγιστη ροή TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A Συνάρτηση χωρητικότητας Κατευθυνόμενο γράφημα.
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
Γράφημα Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα:
Ευρετήρια Βάσεις Δεδομένων Ευαγγελία Πιτουρά.
Δυναμικός Κατακερματισμός
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Μέγιστη ροή Κατευθυνόμενο γράφημα 12 Συνάρτηση χωρητικότητας
9η Διάλεξη Ταξινόμηση Ε. Μαρκάκης
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Μέγιστη ροή Κατευθυνόμενο γράφημα 12 Συνάρτηση χωρητικότητας
EPL231 – Data Structures and Algorithms
Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε χρόνο εκτέλεσης
Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης
Ουρά Προτεραιότητας (priority queue)
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων όπου το κάθε στοιχείο έχει ένα κλειδί από ολικά διατεταγμένο σύνολο Θέλουμε να υποστηρίξουμε δύο.
19η Διάλεξη Εξωτερική Αναζήτηση και Β-δέντρα Ε. Μαρκάκης
(2,4) Trees 11/15/2018 8:56 PM (2,4) Δέντρα (2,4) Δέντρα.
Εξωτερική Αναζήτηση Ιεραρχία Μνήμης Υπολογιστή Εξωτερική Μνήμη
Δυναμικός Κατακερματισμός
Αναδρομή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:
Μεταγράφημα παρουσίασης:

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Σωροί Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί – υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Ουρά προτεραιότητας Η δομή δεδομένων ουρά υποστηρίζει FIFO (first in first out) στρατηγική για εισαγωγές και διαγραφές στοιχείων. Σε διάφορες εφαρμογές, όμως, υπάρχει η ανάγκη επιλογής στοιχείων από κάποιο σύνολο σύμφωνα με κάποια σειρά προτεραιότητας (π.χ. σε λειτουργικά συστήματα). Σε ουρές προτεραιότητας κύρια σημασία έχει η προτεραιότητα του κάθε στοιχείου, πρώτο βγαίνει πάντα το στοιχείο με τη μεγαλύτερη προτεραιότητα. Ουρά Προτεραιότητας Ο ΑΤΔ ουρά προτεραιότητας ορίζεται ως μια ακολουθία στοιχείων συνοδευόμενη από τις πράξεις Delete_Min*, και Insert. *Θεωρούμε ότι το μικρότερο κλειδί έχει τη μεγαλύτερη προτεραιότητα ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Ουρά προτεραιότητας Πιθανές υλοποιήσεις: συνδεδεμένη λίστα Insert: Ο(1), Delete_Min: O(n) ταξινομημένη συνδεδεμένη λίστα Insert: Ο(n), Delete_Min: O(1) δυαδικό δένδρο αναζήτησης Insert, Delete_Min: O(log n) Υπάρχει καλύτερη υλοποίηση; Ναι, μια ενδιαφέρουσα τάξη δυαδικών δένδρων, οι σωροί. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Σωρός Σωρός ελαχίστων (MinHeap) είναι ένα δυαδικό δένδρο που ικανοποιεί: δομική ιδιότητα: είναι πλήρες ιδιότητα σειράς: το κλειδί ενός κόμβου είναι μικρότερο από τα κλειδιά των παιδιών του Σε κάθε υπόδενδρο, το μικρότερο στοιχείο βρίσκεται στη ρίζα. Δεν υπάρχει καμιά σχέση μεταξύ κλειδιών αδελφών κόμβων. Ποια από τα πιο κάτω δένδρα είναι σωροί; 27 32 44 28 33 60 27 32 44 28 60 27 32 44 28 60 23 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Δυαδικά Δένδρα Ένα δυαδικό δένδρο είναι πλήρες (complete) αν έχει ύψος 0 και ένα κόμβο, έχει ύψος 1 και η ρίζα του έχει είτε δύο παιδιά είτε ένα αριστερό παιδί. έχει ύψος h και η ρίζα του έχει ένα τέλειο αριστερό υπόδενδρο ύψους h-1 και ένα πλήρες δεξιό υπόδενδρο ύψους h-1, ή ένα πλήρες αριστερό υπόδενδρο ύψους h-1 και ένα τέλειο δεξιό υπόδενδρο ύψους h-2. Παραδείγματα δυαδικών δένδρων ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Πλήρη Δυαδικά Δένδρα Σε ένα δυαδικό δένδρο, στο επίπεδο k υπάρχουν το πολύ 2k-1 κόμβοι. Σε ένα πλήρες δυαδικό δένδρο ύψους h όλα τα επίπεδα μέχρι το h-οστό είναι εντελώς γεμάτα, και το επίπεδο h+1 είναι γεμάτο από τα αριστερά στα δεξιά. Ο αριθμός των κόμβων μέχρι το επίπεδο h δίνεται από το άθροισμα Επομένως, ένα πλήρες δένδρο ύψους h έχει μεταξύ 2h και 2h+1 – 1 κόμβους, ή 2h  n  2h+1 – 1 Ένα πλήρες δένδρο με n κόμβους έχει ύψος Ο(log n). ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Υλοποίηση με πίνακες Ένα πλήρες δυαδικό δένδρο μπορεί να αποθηκευτεί σε πίνακα ως εξής: στη θέση 1 βάζουμε το στοιχείο της ρίζας αν κάποιος κόμβος u βρίσκεται στη θέση i, τότε τοποθετούμε το αριστερό του παιδί στη θέση 2i, και το δεξιό του παιδί στη θέση 2i +1. Ο πατέρας ενός κόμβου στη θέση i (εκτός από τη ρίζα) βρίσκεται στη θέση i/2. Πλεονέκτημα: Δεν χρειάζονται δείκτες, έτσι εξοικονομούμε μνήμη και έχουμε πιο απλές και πιο αποδοτικές διαδικασίες. Μειονέκτημα: πρέπει να γνωρίζουμε από την αρχή το μέγιστο μέγεθος του σωρού. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα αναπαράστασης σωρού (1) 27 32 44 28 42 Θέση 1 2 3 4 5 6 Στοιχείο 27 32 28 44 42 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα αναπαράστασης σωρού (2) Α Β Γ Δ Ε Ζ Η Θ Ι Κ Θέση 1 2 3 4 5 6 7 8 9 10 Στοιχείο A B Γ Δ Ε Ζ Η Θ Ι Κ ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Υλοποίηση Σωρού Ένας σωρός μπορεί να υλοποιηθεί ως μια εγγραφή heap με τρία πεδία size, τύπου int, όπου αποθηκεύεται το μέγεθος του σωρού. maxSize, τύπου int, που δηλώνει το μέγεθος του πίνακα, και contents, τύπου πίνακα, όπου αποθηκεύουμε τα στοιχεία του σωρού.   Αυτή η δομή θα πρέπει να υποστηρίζει τις πράξεις: ΜakeΕmpty, Ιnsert, DeleteMin, IsEmpty, IsFull. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Εισαγωγή κόμβου Σε ένα πλήρες δυαδικό δένδρο υπάρχει μία μόνο θέση όπου μπορεί να εισαχθεί κόμβος και η εισαγωγή να διατηρήσει το δένδρο πλήρες. Αυτή η θέση είναι η πιο δεξιά στο τελευταίο επίπεδο του δένδρου, και αντιστοιχεί στη θέση size+1 του πίνακα. Για να εισάγουμε ένα κλειδί k σε ένα σωρό σκεφτόμαστε ως εξής: Πιθανόν το k να μην μπορεί να μπει στην κενή θέση size+1, γιατί μια τέτοια εισαγωγή να παραβιάζει τη δεύτερη ιδιότητα του σωρού. Έστω ότι η κενή θέση είναι η x, o πατέρας αυτής της θέσης είναι ο u, και k΄ είναι το κλειδί του u. Τότε εφαρμόζουμε τα εξής: αν k>k΄, ή, η θέση x αντιστοιχεί στη ρίζα, τότε contents[x] = k αν k<k΄, τότε βάλε το k΄ στη θέση x, και ανάλαβε να γεμίσεις τη θέση u, δηλαδή contents[x] =k΄; x=u; και επανάλαβε τη διαδικασία. Αυτή η διαδικασία σύγκρισης με τον πατρικό κόμβο και αναρρίχησης μπορεί να συνεχιστεί μέχρι τη ρίζα του δένδρου. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα: Εισαγωγή του 33 27 32 31 44 42 33 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα: Εισαγωγή του 28 27 32 31 44 42 28 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα: Εισαγωγή του 3 27 32 31 44 42 3 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Διαδικασία Εισαγωγής   Insert(int k, heap E){ check heap.size < heap.maxsize; int x = heap.size + 1; while(x>1 && contents[x/2]>k){ contents[x] = contents[x/2]; x = x/2; } contents[x] = k; Heap.size++ ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Διαγραφή του ελάχιστου στοιχείου Το ελάχιστο στοιχείο βρίσκεται πάντοτε στην κορυφή και η διαγραφή του προκαλεί μια κενή θέση στη ρίζα. Θα πρέπει να κατεβάσουμε αυτή την κενή θέση προς τα κάτω και δεξιά. Σε κάθε βήμα ελέγχουμε τα παιδιά της εκάστοτε κενής θέσης. Έστω ότι x είναι η κενή θέση, Αν το κλειδί που βρίσκεται στην τελευταία θέση του σωρού είναι μικρότερο από τα κλειδιά των παιδιών του x τότε μεταφέρουμε το κλειδί αυτό στην κενή θέση και μειώνουμε το μέγεθος του σωρού contents [x] = contents [size]; size–- και τερματίζουμε τη διαδικασία. Διαφορετικά, διαλέγουμε το παιδί u του x το οποίο έχει το μικρότερο κλειδί, μεταφέρουμε το κλειδί του u στο x και κάνουμε κενή θέση τη u: contents[x] = contents[u]; x = u και επαναλαμβάνουμε τη διαδικασία.  ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα: Διαγραφή του 3 22 27 44 26 28 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Διαδικασία Διαγραφής ελάχιστου στοιχείου int Delete_Min(heap E) if IsEmpty(E) report error; return; min = elements[1]; last = elements[size]; size=size-1; x=1;   while(x*2 <= size){ child = x*2; if (child!= size && elements[child+1]<elements[child]) child++;  if (last>elements[child]) elements[x]=elements[child]; x=child; else break; } elements[x] = last; return min; ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Μερικά Σχόλια Ο χρόνος εκτέλεσης των διαδικασιών Insert και Delete_min είναι της τάξης O(h) δηλαδή Ο(log n). (h: ύψος, n: αριθμός κόμβων) Ποιο είναι το όφελος της δομής σε σύγκριση με δυαδικά δένδρα αναζήτησης; Οι σωροί χρησιμοποιούνται ευρέως σε λειτουργικά συστήματα, συστήματα όπου γίνεται διαμερισμός του χρόνου του υπολογιστή σε > 1 εργασίες (task scheduling) και σε μεταγλωττιστές. Συμμετρικά, μπορούμε να ορίσουμε τη δομή maxHeap, όπου η ρίζα περιέχει το μέγιστο στοιχείο και υποστηρίζεται η DeleteMax. Εκτός από δυαδικούς σωρούς, μπορούμε να ορίσουμε τους δ-σωρούς (d-heaps), όπου κάθε κόμβος έχει d παιδιά. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Διαδικασία Καθόδου Έστω ένας πίνακας Α[1..n] και μια τιμή i, θα ορίσουμε διαδικασία PercoladeDown(i), η οποία μετακινεί το στοιχείο Α[i] μέσα στον σωρό προς τα κάτω όσο χρειάζεται. Έστω ότι Α[i] = k. Θεωρούμε πως η i είναι άδεια θέση. Αν η άδεια θέση έχει παιδί που περιέχει στοιχείο μικρότερο του k και x είναι το μικρότερο τέτοιο παιδί, τότε μετακινούμε το στοιχείο του x στην κενή θέση και μετακινούμε την κενή θέση στο x. Επαναλαμβάνουμε την ίδια διαδικασία μέχρι τη στιγμή που η κενή θέση δεν έχει παιδιά με στοιχεία μικρότερα του k. Τότε αποθηκεύουμε το k στην θέση αυτή. Ο χρόνος εκτέλεσης είναι ανάλογος του ύψους του κόμβου που αντιστοιχεί στη θέση i του σωρού. Δηλαδή, στη χείριστη περίπτωση, όπου i=n, Ο(lg n). ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Διαδικασία Καθόδου Μη αναδρομική διαδικασία PercolateDown   PercolateDown(int A[],int n,int i){ int k = A[i]; while (2*i <= n) { j = 2*i; if (j<n && A[j+1]<A[j]) j++;  if (k > A[j]) A[i] = A[j]; i=j; else break; } A[i] = k; ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα PercoladeDown Δεδομένα Εισόδου: i = 2, n = 9, A = [ - , 13, 8, 15, 4, 7, 20, 18, 5, 2] 13 if (j<n && A[j+1]<A[j]) j++; if (k > A[j]) A[i] = A[j]; i=j; k= 8 8 15 if (k > A[j]) A[i] = A[j]; i=j; A[i] = k; 4 7 20 18 5 2 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Διαδικασία DeleteMin (2) Αφαιρούμε το στοιχείο της ρίζας (είναι το μικρότερο κλειδί του σωρού). Μεταφέρουμε το τελευταίο κλειδί στη ρίζα, και εφαρμόζουμε τη διαδικασία PercoladeDown(A, n, 1): int DeleteMin2(heap A){   check that size > 0;   return (contents[1]);   swap(contents[1],contents[size]); size = size – 1;   PercoladeDown(contents, size, 1); }   Χρόνος Εκτέλεσης: O(h) = Ο(log n) ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Παράδειγμα: Διαγραφή του 3 22 27 k= 44 26 28 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Από πίνακες σε σωρούς Έστω πίνακας Α[1..n]. Μπορούμε να θεωρήσουμε τον πίνακα ως ένα πλήρες δυαδικό δένδρο με n κόμβους. Αν για μια τιμή i το αριστερό και το δεξί υπόδενδρο του i ικανοποιούν τις ιδιότητες ενός σωρού, τότε, αν καλέσουμε τη διαδικασία PercolateDown(A, n, i) θα έχουμε σαν αποτέλεσμα το υπόδενδρο που ριζώνει στη θέση i να ικανοποιεί τις ιδιότητες ενός σωρού.   i PercolateDown(i)  σωρός σωρός σωρός ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Κτίσιμο σωρού από ένα πίνακα Μπορούμε να μετατρέψουμε ένα πίνακα Α[1..n] σε ένα σωρό με διαδοχική εφαρμογή της διαδικασίας PercoladeDown() από κάτω προς τα πάνω. Παρατήρηση: οι θέσεις > n/2 αντιστοιχούν σε φύλλα. Διαδικασία BuildHeap:   BuildHeap( int A[], int n) { for (i=n/2; i>0; i--) PercoladeDown(A,n,i); } Ορθότητα. Αποδεικνύεται με τη μέθοδο της επαγωγής: μετά από την εφαρμογή της διαδικασίας PercoladeDown(A,n,i), τα υπόδενδρα που ριζώνουν στις θέσεις i, ..., n, ικανοποιούν τις ιδιότητες του σωρού. Ανάλυση του Χρόνου Εκτέλεσης. Ο ολικός χρόνος εκτέλεσης είναι ανάλογος του αθροίσματος των υψών όλων των εσωτερικών κόμβων, το οποίο είναι Ο(n). ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Τι κάνει ο πιο κάτω αλγόριθμος; mystery (int A[], int n) {  BuildHeap(A, n);  for (i=n ; i>1; i--){   swap (A[1], A[i]); PercoladeDown(A, i-1, 1); }   ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Παράδειγμα Εκτέλεσης Μετά από την τρίτη επανάληψη του for-loop: [34, 57, 64, 32, 21, 8] Μετά από τη δεύτερη επανάληψη του for-loop: [32, 34, 64, 57, 21, 8] Μετά από την τέταρτη επανάληψη του for-loop: [57, 64, 34, 32, 21, 8] Μετά από την πέμπτη επανάληψη του for-loop: [64, 57, 34, 32, 21, 8] Μετά από την πρώτη επανάληψη του for-loop: [21, 32, 64, 57, 34, 8] Δεδομένα Εισόδου: A = [ - , 34, 8, 64, 57, 32, 21] Δεδομένο Εξόδου Μετά από εφαρμογή της BuildHeap 8 32 34 21 57 8 1 1 1 1 1 1 k= k= 64 64 34 2 2 2 2 2 2 32 34 32 32 57 64 21 64 21 k= 3 3 3 k= 3 3 3 4 4 57 32 57 57 57 5 5 32 21 21 21 34 8 8 5 34 34 8 8 64 64 6 6 4 4 4 4 5 5 5 6 6 6 6 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι HeapSort H διαδικασία mystery ταξινομεί ένα πίνακα σε φθίνουσα σειρά. Αρχικά δημιουργεί ένα σωρό σε χρόνο Ο(n). Στη συνέχεια επαναλαμβάνει το εξής: αφαιρεί το μικρότερο στοιχείο (της ρίζας του σωρού) και το μετακινεί στο τέλος (εκτελεί την PercolateDown). Κάθε εκτέλεση της PercoladeDown χρειάζεται χρόνο της τάξης Ο(log n). Ολικός Χρόνος Εκτέλεσης: Ο(nlog n) O αλγόριθμος ονομάζεται Heapsort. Μπορούμε εύκολα να αλλάξουμε τον κώδικα ώστε να επιστρέφεται η λίστα σε αύξουσα σειρά. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

Άλλες διαδικασίες σε σωρούς Παρόλο που εύρεση του ελάχιστου κλειδιού σε ένα σωρό μπορεί να πραγματοποιηθεί σε σταθερό χρόνο, η εύρεση τυχαίου στοιχείου στη χειρότερη περίπτωση επιβάλλει διερεύνηση ολόκληρης της δομής (δηλαδή, είναι της τάξης Ο(n)). Αν όμως γνωρίζουμε τη θέση στοιχείων με κάποιο άλλο τρόπο, διαδικασίες σε σωρούς πραγματοποιούνται εύκολα, π.χ. οι πιο κάτω εκτελούνται σε χρόνο λογαριθμικό. Increase_Key(P,Δ), αυξάνει την προτεραιότητα του κλειδιού P, κατά Δ. Χρησιμοποιείται από χειριστές λειτουργικών συστημάτων για αύξηση της προτεραιότητας σημαντικών διεργασιών. Η συμμετρική διαδικασία Decrease_Key(P,Δ) συχνά εκτελείται αυτόματα σε λειτουργικά συστήματα σε περίπτωση που κάποια δουλειά χρησιμοποιεί υπερβολικά μεγάλη ποσότητα χρόνου του CPU. Remove(I), αφαιρεί τον κόμβο της θέσης Ι (χρήσιμη σε περίπτωση τερματισμού διαδικασίας). ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Παραλλαγές Σωρών Leftist Heaps Ένα δυαδικό δένδρο Τ είναι leftist heap, αν για κάθε κόμβο u του Τ nullpath(u.left)  nullpath(u.right) όπου nullpath(v) είναι η μικρότερη απόσταση του κόμβου v από κόμβο που έχει το πολύ ένα παιδί. Ο ορισμός αυτός επιτρέπει μη-ισοζυγισμένα δένδρα που είναι πιο βαθιά προς τα αριστερά. Ένα leftist heap Τ ικανοποιεί την πιο κάτω σημαντική ιδιότητα: αν το Τ έχει n κόμβους τότε το δεξί του μονοπάτι έχει το πολύ log(n+1) κόμβους. Το πλεονέκτημα αυτής της δομής είναι ότι επιτρέπει το συνδυασμό δύο σωρών σε ένα (διαδικασία Merge) σε χρόνο λογαριθμικό. Οι υπόλοιπες διαδικασίες (DeleteMin, Insert) επίσης πραγματοποιούνται σε λογαριθμικό χρόνο. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Παραλλαγές Σωρών Διωνυμικές Ουρές Προτεραιότητας (Binomial Queues) Η δομή Binomial queue είναι ένα δάσος που αποτελείται από ένα αριθμό δένδρων τα οποία ονομάζονται διωνυμικά δένδρα (binomial trees). Ένα διωνυμικό δένδρο ύψους 0 έχει ένα κόμβο. Ένα διωνυμικό δένδρο ύψους k, Βk, κτίζεται από ένα διωνυμικό δένδρο ύψους k-1, με την εισαγωγή στη ρίζα του δένδρου ενός διωνυμικού υποδένδρου ύψους k-1. Β0 Β1 Β2      ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι Παραλλαγές Σωρών Μια διωνυμική ουρά είναι ένα δάσος από διωνυμικά δένδρα Τ1, … , Τn που ικανοποιούν την ιδιότητα σειράς ενός σωρού (δηλ. το στοιχείο κάθε κόμβου είναι μεγαλύτερο από αυτό των παιδιών του), και για κάθε i, j, height(Ti) = height(Tj)  i=j.   π.χ. Μια ουρά προτεραιότητας μήκους 6, μπορεί να αναπαρασταθεί ως το δάσος που αποτελείται από τα δένδρα Β1 και Β2. Μια διωνυμική ουρά προτεραιότητας υποστηρίζει τις διαδικασίες DeleteMin, και Merge σε χρόνο λογαριθμικό και επιπλέον τη διαδικασία Insert σε σταθερό χρόνο μέσης περίπτωσης. ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι