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

Σχετικά έγγραφα
Ενότητα 7 Ουρές Προτεραιότητας

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

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

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

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

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

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

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

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

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

Διοικητική Λογιστική

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 8: ΧΡΗΣΗ ΔΟΜΩΝ ΔΕΝΤΡΟΥ ΚΑΙ ΣΩΡΟΥ ΓΙΑ ΕΠΙΛΥΣΗ ΠΡΟΒΛΗΜΑΤΟΣ ΤΑΞΙΝΟΜΗΣΗΣ ΑΛΓΟΡΙΘΜΟΣ HEAPSORT

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

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

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Βάσεις Περιβαλλοντικών Δεδομένων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΔΕΝΤΡΑ

Δομές δεδομένων. Ενότητα 5η: Υλοποίηση Λεξικών με Ισοζυγισμένα Δένδρα Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

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

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

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

Εισαγωγή στους Υπολογιστές

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Κβαντική Επεξεργασία Πληροφορίας

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 3: Εφαρμογές Δικτυωτής Ανάλυσης (2 ο Μέρος)

Βάσεις Περιβαλλοντικών Δεδομένων

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Ψηφιακή Επεξεργασία Εικόνων

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Μάρκετινγκ Αγροτικών Προϊόντων

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

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

Κβαντική Επεξεργασία Πληροφορίας

Μηχανολογικό Σχέδιο Ι

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 6: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ: ΠΡΟΒΛΗΜΑ ΑΝΑΖΗΤΗΣΗΣ

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Αλγόριθμοι και πολυπλοκότητα Μελανέρυθρα δεντρα

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Βέλτιστος Έλεγχος Συστημάτων

Προσχολική Παιδαγωγική Ενότητα 2: Οργάνωση χρόνου και χώρου στα νηπιαγωγεία

Τεχνολογία Πολιτισμικού Λογισμικού

Εισαγωγή στους Υπολογιστές

Διοικητική Λογιστική

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

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος)

Πληροφορική ΙΙ Θεματική Ενότητα 5

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Διαφήμιση και Δημόσιες Σχέσεις Ενότητα 9: Σχέσεις διαφημιστή-διαφημιζόμενου

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

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος)

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

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

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

Διοίκηση Ολικής Ποιότητας & Επιχειρηματική Αριστεία Ενότητα 1.3.3: Μεθοδολογία εφαρμογής προγράμματος Ολικής Ποιότητας

Εφαρμογές πληροφορικής σε θέματα πολιτικού μηχανικού

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

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 6: Συμπίεση Έργου

Εκπαιδευτική Διαδικασία και Μάθηση στο Νηπιαγωγείο Ενότητα 1: Εισαγωγή

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Διοίκηση Ολικής Ποιότητας & Επιχειρηματική Αριστεία Ενότητα 1.3.2: Παραδοσιακή VS νέα προσέγγιση της ΔΟΠ

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Κβαντική Επεξεργασία Πληροφορίας

Τεχνικό Σχέδιο - CAD

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Κβαντική Επεξεργασία Πληροφορίας

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

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

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

ΘΕΡΜΟΔΥΝΑΜΙΚΗ Ι. Ενότητα 2: Θερμοδυναμικές συναρτήσεις. Σογομών Μπογοσιάν Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών

Μάρκετινγκ. Ενότητα 2: Αξία για τους Πελάτες

Βάσεις Περιβαλλοντικών Δεδομένων

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Transcript:

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

Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου 2

Ουρές Προτεραιότητας Θεωρούμε ένα χώρο κλειδιών U και έστω ότι με κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω ότι έχει ορισθεί μια διάταξη στα στοιχεία του U έτσι ώστε για κάθε ζεύγος στοιχείων x,y U, να ισχύει είτε x = y ή x < y ή x > y. Τα στοιχεία που είναι επιθυμητό να αποθηκευθούν στη δομή είναι ζεύγη της μορφής <Κ,Ι>. ΗΥ240 - Παναγιώτα Φατούρου 3

Ουρές Προτεραιότητας Μια ουρά προτεραιότητας είναι ένας αφηρημένος τύπος δεδομένων για ένα σύνολο με στοιχεία ζεύγη <Κ,Ι>, που υποστηρίζει τις ακόλουθες λειτουργίες: MakeEmptySet(): επιστρέφει το κενό σύνολο. IsEmptySet(S): Επιστρέφει true αν S =, false διαφορετικά Insert(K,I,S): Εισάγει το ζεύγος <Κ,Ι> στο S. FindMin(S): Eπιστρέφει το πεδίο I του ζεύγους <Κ,Ι>, όπου Κ είναι το μικρότερο κλειδί στο σύνολο. DeleteMin(S): Διαγράφει το ζεύγος <Κ,Ι>, όπου Κ είναι το μικρότερο κλειδί στο σύνολο, και επιστρέφει Ι. ΗΥ240 - Παναγιώτα Φατούρου 4

Ουρές Προτεραιότητας Υλοποίηση με Ισοζυγισμένα Δένδρα Μπορούμε να υλοποιήσουμε μια ουρά προτεραιότητας με ισοζυγισμένα δένδρα; AVL δένδρα, 2-3 δένδρα, κοκκινόμαυρα δένδρα: όλα παρέχουν αποτελεσματικές υλοποιήσεις ουρών προτεραιοτήτων. Δεδομένου ενός ισοζυγισμένου δένδρου, πως θα μπορούσαμε να υλοποιήσουμε μια ουρά προτεραιότητας; Ποια είναι η χρονική πολυπλοκότητα για τις λειτουργίες Insert(), FindMin() και DeleteMin(); Υπάρχουν άλλες λειτουργίες που να υποστηρίζονται αποδοτικά; (1) LookUp; (2) Delete; (3) FindMax DeleteMax; Μια ουρά προτεραιότητας που υποστηρίζει και τις λειτουργίες FindMax() και DeleteMax() ονομάζεται διπλή ουρά προτεραιότητας (ή ουρά προτεραιότητας με δύο άκρα). ΗΥ240 - Παναγιώτα Φατούρου 5

Ουρές Προτεραιότητας Ένα μερικώς διατεταγμένο δένδρο είναι ένα δυαδικό δένδρο του οποίου τα στοιχεία έχουν την εξής ιδιότητα: Το κλειδί κάθε κόμβου είναι μικρότερο ή ίσο εκείνου των παιδιών του κόμβου. Σχήμα 9.1: Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 Θεωρούμε ότι η προτεραιότητα ενός κόμβου καθορίζεται από το κλειδί του ως εξής: μικρό κλειδί -> μεγάλη προτεραιότητα και το αντίστροφο. Ποιος είναι ο κόμβος με τη μεγαλύτερη προτεραιότητα σε ένα μερικώς διατεταγμένο δένδρο; Σε κάθε μονοπάτι από τη ρίζα προς οποιοδήποτε κόμβο, οι κόμβοι που διατρέχουμε είναι φθίνουσας προτεραιότητας. Πως υλοποιούμε την FindMin() σε μερικώς διατεταγμένο δένδρο; ΗΥ240 - Παναγιώτα Φατούρου 6

Ουρές Προτεραιότητας Προκειμένου οι λειτουργίες που υποστηρίζονται από μια ουρά προτεραιότητας να υλοποιηθούν αποδοτικά, θα ήταν επιθυμητό το ύψος του δένδρου να είναι O(log n). DeleteMin() Δεν διαγράφουμε τη ρίζα, αλλά το δεξιότερο φύλλο του τελευταίου επιπέδου του δένδρου, αφού πρώτα αντιγράψουμε τα δεδομένα του στη ρίζα. Πρόβλημα που μπορεί να προκύψει Το προκύπτον δένδρο μπορεί να μην είναι μερικώς διατεταγμένο δένδρο. Παρατήρηση Η μερική διάταξη καταστρέφεται μόνο στη ρίζα. Σχήμα 9.2(α): Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 ΗΥ240 - Παναγιώτα Φατούρου 7

Μερικώς Διατεταγμένα Δένδρα Διαγραφή DeleteMin() - Επανόρθωση διάταξης 1. Έστω u η ρίζα του δένδρου και w o θυγατρικός κόμβος του u με το μικρότερο κλειδί. 2. Αν (w == nill OR κλειδί του u < κλειδί του w) ο αλγόριθμος τερματίζει; 3. Ανταλλάσσουμε τα δεδομένα <Κ,Ι> του u με τα δεδομένα <Κ,Ι > του w; 4. Θέτουμε (u = w) και (w = θυγατρικός κόμβος του u με το μικρότερο κλειδί); 5. Επιστρέφουμε στο βήμα 2; Ποια είναι πολυπλοκότητα της DeleteMin(); O(ύψος δένδρου) Σχήμα 9.2: Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 ΗΥ240 - Παναγιώτα Φατούρου 8

Μερικώς Διατεταγμένα Δένδρα Σχήμα 9.3: Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 Insert() Εισάγουμε το νέο στοιχείο ως δεξιότερο φύλλο του δένδρου. Η ιδιότητα της μερικής διάταξης ίσως καταστρέφεται άλλα μόνο για τον πατέρα του φύλλου αυτού. ΗΥ240 - Παναγιώτα Φατούρου 9

Μερικώς Διατεταγμένα Δένδρα Insert() - Επανόρθωση διάταξης 1. Έστω u ο κόμβος φύλλο στον οποίο γίνεται η εισαγωγή και w o πατρικός κόμβος του u. 2. Αν (w == nill OR κλειδί του w < κλειδί του u) ο αλγόριθμος τερματίζει; 3. Ανταλλάσσουμε τα δεδομένα <Κ,Ι> του u με τα δεδομένα (<Κ,Ι >) του w; 4. Θέτω (u = w) και (w = πατρικός κόμβος του u); 5. Επιστρέφουμε στο βήμα 2; Σχήμα 9.3: Lewis & Denenberg, Data Structures & Their Algorithms, Addison-Wesley, 1991 Ποια είναι η χρονική πολυπλοκότητα της Insert(); Ο(ύψος δένδρου) ΗΥ240 - Παναγιώτα Φατούρου 10

Μερικώς Διατεταγμένα Δένδρα Υλοποίηση ως Πλήρη Δυαδικά Δένδρα 0 1 2 3 4 5 6 7 8 9 10 11 5 8 9 16 12 10 56 18 20 22 44 Υλοποιούμε το μερικώς διατεταγμένο δένδρο χρησιμοποιώντας πλήρη δυαδικά δένδρα. Το δεξιότερο φύλλο με μέγιστο βάθος στο δένδρο είναι το τελευταίο στοιχείο του πίνακα. Η θέση του πίνακα που περιέχει αυτό τον κόμβο μπορεί να καθοριστεί αν γνωρίζουμε το πλήθος των στοιχείων και τη διεύθυνση του πρώτου στοιχείου του πίνακα. Η διαγραφή του φύλλου αυτού δεν επηρεάζει την μερική διάταξη του δένδρου, ενώ το δένδρο εξακολουθεί να είναι πλήρες. ΗΥ240 - Παναγιώτα Φατούρου 11

Μερικώς Διατεταγμένα Δένδρα Υλοποίηση ως Πλήρη Δυαδικά Δένδρα Ένα μερικώς διατεταγμένο δένδρο υλοποιημένο με στατικό τρόπο (δηλαδή με πίνακα), ονομάζεται σωρός. Το ύψος οποιουδήποτε πλήρους δυαδικού δένδρου είναι O(logn) Πολυπλοκότητα HeapInsert() και HeapDeleteMin() = O(logn). 0 1 2 3 4 5 6 7 8 9 10 11 5 8 9 16 12 10 56 18 20 22 44 Ο σωρός είναι μια εξαιρετικά αποδοτική δομή για την υλοποίηση ουρών προτεραιότητας! ΗΥ240 - Παναγιώτα Φατούρου 12

Υλοποίηση Πλήρων Δυαδικών Δένδρων A 0 Υπάρχει μόνο ένα πλήρες δυαδικό δένδρο με n κόμβους και το υλοποιούμε με ένα πίνακα N στοιχείων. Αριθμούμε τους κόμβους με αριθμούς στο διάστημα {0,...,n-1} και αποθηκεύουμε τον κόμβο i στο στοιχείο Τ[i] του πίνακα. Θέλουμε να κάνουμε την αρίθμηση με τέτοιο τρόπο ώστε να πετύχουμε την εκτέλεση Αρίθμηση χρήσιμων λειτουργιών στο δένδρο σε σταθερό 1 3 G D 4 5 K X 6 B O M Y S 7 8 i 9 1 11 2i+1 0 0 1 2 3 4 5 6 7 8 9 10 11 Α C E G D K X B O M Y s Η χρόνο. ρίζα είναι ο κόμβος 0. Το αριστερό παιδί του κόμβου i αριθμείται ως κόμβος 2i+1, ενώ το δεξί παιδί του ως κόμβος 2i+2. Υλοποίηση Λειτουργιών IsLeaf(i): return (2i+1 n); LeftChild(i): if (2i+1 < n); return (2i+1) else return nill; Χρονική RightChild(i): if (2i+2<n) return(2i+2); else return nill; πολυπλοκότητα LeftSibling(i): if (i!= 0 and i not odd) return (i-1); κάθε λειτουργίας: RightSibling(i): if (i!= n-1 and i not even) return(i+1); Θ(1) ΗΥ240 - Παναγιώτα Φατούρου 13 Parent(i): if (i!= 0) return( (i-1)/2 ); C E 2

Σωροί Ψευδοκώδικας για HeapInsert() Ο σωρός υλοποιείται από έναν πίνακα A (τύπου HeapTable) και έναν ακέραιο size που υποδηλώνει το πλήθος των στοιχείων του σωρού. procedure HeapInsert(HeapTable A, int size, Key K, Type I) { /* Εισαγωγή του ζεύγους <K,I> στο σωρό <A,size> */ } if (size == N) then error; /* Heap is full */ m = size; // o m είναι ακέραιος που χρησιμοποιείται ως δείκτης // στους κόμβους ενός μονοπατιού του δένδρου. // Αρχικά, δείχνει στη θέση που θα εισαχθεί το νέο στοιχείο while (m > 0 and K < Α[ (m-1)/2 ]->Key) { // όσο δεν έχω φθάσει στη ρίζα και // o πατρικός κόμβος του m έχει μικρότερο κλειδί από το K Α[m]->key = Α[ (m-1)/2 ]->Key; Α[m]->data = Α[ (m-1)/2 ]->data; // του m αντιγράφονται στον m m = (m-1)/2 ; // η διαδικασία επαναλαμβάνεται με m = πατρικός κόμβος του m } Α[m]->Key = K; Α[m]->data = I; size++; 1 // το κλειδί και τα δεδομένα του πατρικού κόμβου 5 9 0 1 2 3 4 5 6 7 8 9 10 11 5 8 9 16 12 10 56 18 20 22 44 10 Παράδειγμα: Εισαγωγή 1 ΗΥ240 - Παναγιώτα Φατούρου 14 7 1 3 4 8 9 m = 11, 5, 2, 0 10 0 5 2 6

Σωροί Ψευδοκώδικας για HeapDeleteMin() Type HeapDeleteMin(HeapTable A, int size) { // διαγραφή του στοιχείου με τη μεγαλύτερη προτεραιότητα και επιστροφή της τιμής του if (size == 0) then error; // Κενός σωρός I = A[0]->data; // Στοιχείο που θα επιστραφεί K = A[size-1]->Key; // τιμή κλειδιού που θα μετακινηθεί προς τη ρίζα } size--; // νέο μέγεθος σωρού if (size == 1) then return; // ο σωρός περιέχει μόνο τη ρίζα μετά τη διαγραφή m = 0; /* ο m είναι ακέραιος που δεικτοδοτεί τους κόμβους ενός μονοπατιού while ((2m+1 < size AND K > A[2m+1]->Key) OR // αν υπάρχει αριστερό παιδί και έχει μικρότερο κλειδί (2m+2 < size AND K > A[2m+2]->Key)) { // ή αν υπάρχει δεξιό παιδί και έχει μικρότερο κλειδί if (2m +2 < size) { // o m έχει δύο θυγατρικούς κόμβους if (A[2m+1]->Key < A[2m+2]->Key) p = 2m+1; // ο p δείχνει στο θυγατρικό του m με το μεγαλύτερο κλειδί 0 else p = 2m+2; 1 2 } else p = size-1; A[m]->Key = A[p]->Key; 3 4 5 6 A[m]->data = A[p]->data; m = p; } A[m]->Key = K; A[m]->data = A[size]->data; return I; 1 7 8 9 10 44 8 12 22 0 1 2 3 4 5 6 7 8 9 10 11 5 8 9 16 12 10 56 18 20 22 44 Παράδειγμα: DeleteMin ΗΥ240 - Παναγιώτα Φατούρου 15 m = 0, 1, 4, 9

Αναφορές Το υλικό της ενότητας αυτής περιέχεται στo ακόλουθo βιβλίo: Harry Lewis and Larry Denenberg, Data Structures and Their Algorithms, Harper Collins Publishers, Inc., New York, 1991 Chapter 9: Sets with special operations ΗΥ240 - Παναγιώτα Φατούρου 16

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Κρήτης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-nd/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί..

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Κρήτης, Παναγιώτα Φατούρου. «Δομές δεδομένων. Ενότητα 7η: Ουρές Προτεραιότητας». Έκδοση: 1.0. Ηράκλειο/Ρέθυμνο 2013. Διαθέσιμο από τη δικτυακή διεύθυνση: http://www.csd.uoc.gr/~hy240/