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

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

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

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

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

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

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

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

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

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

Συλλογές, Στοίβες και Ουρές

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

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

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

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων (Data Structures)

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Δοµές Δεδοµένων. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Ουρές Προτεραιότητας 2

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

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

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

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

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

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

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

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

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

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

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Οντοκεντρικός Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

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

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

Βασικές Δομές Δεδομένων

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

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

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

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

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

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1

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

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

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

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

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

Αλγόριθμοι Eλάχιστα μονοπάτια

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

Βασικές Έννοιες Δοµών Δεδοµένων

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

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

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

Δομές Δεδομένων (Data Structures)

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

Transcript:

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

Ουρά Προτεραιότητας (Priority Queue) Η δομή δεδομένων Ουρά (Queue) υποστηρίζει FIFO (firstin first-out) στρατηγική για εισαγωγές και διαγραφές στοιχείων. Σε διάφορες εφαρμογές, όμως, υπάρχει η ανάγκη επιλογής στοιχείων από κάποιο σύνολο σύμφωνα με κάποια σειρά προτεραιότητας (π.χ., σε λειτουργικά συστήματα). Σε ουρές προτεραιότητας κύρια σημασία έχει η προτεραιότητα του κάθε στοιχείου, πρώτο βγαίνει πάντα το στοιχείο με τη μεγαλύτερη προτεραιότητα. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Εφαρμογές Ουρών Προτεραιότητας Scheduling/Load Balancing in OS, Networks Interruption Handling Event management Data Compression: Huffman Coding Optimal paths: Dijkstra (stay tuned) A* Minimum Spanning Tree in Graphs (stay tuned) Hospitals and emergencies N-most valuable items in a data-stream ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Typical use of Priority Queue ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4 Discrete Simulation // Typical use while (simulation has not ended) { get next event from the priority queue; trigger that event;

Ουρά Προτεραιότητας (συν.) Ουρά Προτεραιότητας Ο ΑΤΔ ουρά προτεραιότητας ορίζεται ως μια ακολουθία στοιχείων συνοδευόμενη από τις πράξεις: Delete_Min*: Διαγράφει το ελάχιστο στοιχείο Θεωρούμε ότι το μικρότερο κλειδί έχει τη μεγαλύτερη προτεραιότητα Εναλλακτικά: Delete Max Insert: Εισάγει ένα καινούριο στοιχείο ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

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

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

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

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

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

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

Υλοποίηση Σωρού Ένας σωρός μπορεί να υλοποιηθεί ως μια εγγραφή Ηeap με τρία πεδία: 1. size (τύπου int): αποθηκεύει το μέγεθος του σωρού. 2. maxsize (τύπου int): το μέγιστο μέγεθος του πίνακα, 3. contents (τύπου πίνακα): τα στοιχεία του σωρού. Αυτή η δομή θα πρέπει να υποστηρίζει τις πράξεις: makeεmpty, isempty, isfull, insert, deletemin. public class Heap { private int contents[]; private int size; private int maxsize; public Heap(int n) { this.contents = new int[n]; this.size = 0; this.maxsize = n-1; public boolean isempty(){ return this.size==0; public boolean isfull(){ return this.size==this.maxsize; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14 Παράδειγμα 1: Εισαγωγή σε Σωρό Ελαχίστων (Min Heap) 32 29 32 29 44 42 Insert 3 44 42 3<29 Move 29 3 root=3 32 3< Move 32 44 42 29 44 42 29 0 1 2 3 4 5 6 7 0 3 32 44 42 29

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15 Σωρός με Στατική Δέσμευση Μνήμης: Υλοποίηση Συνάρτηση public void insert(int k); : public void insert(int k) { if (this.size < this.maxsize) { int index = this.size + 1; while (index > 1 && this.contents[(index / 2)] > k) { this.contents[index] = this.contents[(index / 2)]; index = index / 2; this.contents[index] = k; this.size++; this.contents[0] = this.size;

Παράδειγμα 2: Εισαγωγή σε Σωρό ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16 32 29 32 29 44 42 Insert 28 44 42 28<29 Move 29 32 28> Save 32 28 44 42 29 44 42 29 0 1 2 3 4 5 6 7 0 32 28 44 42 29

Διαγραφή Ελάχιστου Στοιχείου (Percolate Down, Sink) Το ελάχιστο στοιχείο βρίσκεται πάντοτε στην κορυφή και η διαγραφή του προκαλεί μια κενή θέση στη ρίζα. Θα πρέπει να κατεβάσουμε αυτή την κενή θέση προς τα κάτω και δεξιά Known as Percolate Down or Sink. Σε κάθε βήμα ελέγχουμε τα παιδιά της εκάστοτε κενής θέσης. Έστω ότι x είναι η κενή θέση: 1. Αν το κλειδί που βρίσκεται στην τελευταία θέση του σωρού είναι μικρότερο από τα κλειδιά των παιδιών του x τότε μεταφέρουμε το κλειδί αυτό στην κενή θέση και μειώνουμε το μέγεθος του σωρού contents [x] = contents [size]; size--; και τερματίζουμε τη διαδικασία. 2. Διαφορετικά, διαλέγουμε το παιδί u του x το οποίο έχει το μικρότερο κλειδί, μεταφέρουμε το κλειδί του u στο x και κάνουμε κενή θέση τη u: contents[x] = u; x = u 3. Eπαναλαμβάνουμε τη διαδικασία. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Παράδειγμα 3: Εξαγωγή από Σωρό 3 Delete Min Last 28 22< 22:Move up Last 28 22 22 22 44 26 28 Decrease Size 44 26 44 26 26<44, Last>26 26:Move up 22 22 26 26 44 Reached Leaf Set to last 44 28 0 1 2 3 4 5 6 0 22 26 44 28 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19 Σωρός με Στατική Δέσμευση Μνήμης: Υλοποίηση Συνάρτηση public int deletemin() : public int deletemin() { int min = 0, last; int x = 1, child = 0; if (!isempty()) { min = this.contents[1]; last = this.contents[this.size]; this.size--; this.contents[0] = this.size; while ((x * 2) <= this.size) { child = x * 2; if (child!= this.size && this.contents[child + 1] < this.contents[child]) child++; if (last > this.contents[child]) { this.contents[x] = this.contents[child]; x = child; else break; this.contents[x] = last; return min;

Παράδειγμα 4: Εξαγωγή από Σωρό 3 Delete Min Last 22< 22:Move up 22 Decrease Size 102 22 104 109 101 102 104 109 101 Last 102 22 22 104 109 101 104<109, Last<104 Last:Move up BREAK 102 104 109 101 0 1 2 3 4 5 6 0 22 102 104 109 101 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20

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

Priority Queues in the wild Java: Min-Heap implementation https://docs.oracle.com/javase/10/docs/api/java/util/priorityqueue.html import java.util.*; // Creating empty priority queue PriorityQueue<String> tolearn = new PriorityQueue<String>(); // Adding items to the pqueue using add() tolearn.add("c"); tolearn.offer("c++"); tolearn.add("java"); tolearn.add("python"); // Remove the element with min value tolearn.poll(); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22