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

Σχετικά έγγραφα
Ουρά Προτεραιότητας (priority queue)

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

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

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

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

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

1.1 Αλγόριθμοι Ένα ενδεικτικό πρόβλημα: συνδετικότητα Αλγόριθμοι ένωσης-εύρεσης Προοπτική Σύνοψη θεμάτων 46

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

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

Αντισταθμιστική ανάλυση

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

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

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

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

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

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

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

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης

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

Διαχρονικές δομές δεδομένων

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

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

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

Δοµές Δεδοµένων. 12η Διάλεξη Διάσχιση Δέντρων και Ουρές Προτεραιότητας. Ε. Μαρκάκης

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

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

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

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

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

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

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

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

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

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

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

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

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

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

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

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

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

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

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

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

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

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

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

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

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

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

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

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

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

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

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

Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών. Ένα στοιχείο γράφεται ως, όπου κάθε.

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

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

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

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

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

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

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

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

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

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

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

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

Κεφάλαιο 2. Η δοµή δεδοµένων Σωρός και η Ταξινόµηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.1, 12/05/2010

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

ταξινόμηση σωρού Παύλος Εφραιμίδης Δομές Δεδομένων και

Transcript:

Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει τις ακόλουθες λειτουργίες PQinsert : εισαγωγή στοιχείου PQdelmax : επιστροφή του στοιχείου με το μεγαλύτερο* κλειδί και διαγραφή του από τη δομή * Σε ορισμένες εφαρμογές θέλουμε να επιστρέφουμε γρήγορα το στοιχείο με το ελάχιστο κλειδί αντί για το μέγιστο. Αποτελεί γενίκευση των δομών της στοίβας και της ουράς. Εξαιρετικά χρήσιμη δομή δεδομένων με πολλές εφαρμογές. Π.χ. ταξινόμηση με χρήση ουράς προτεραιότητας.

Ουρά Προτεραιότητας (priority queue) Δομή δεδομένων που υποστηρίζει τις ακόλουθες λειτουργίες PQinsert : εισαγωγή στοιχείου PQdelmax : επιστροφή του στοιχείου με το μεγαλύτερο* κλειδί και διαγραφή του από τη δομή * Σε ορισμένες εφαρμογές θέλουμε να επιστρέφουμε γρήγορα το στοιχείο με το ελάχιστο κλειδί αντί για το μέγιστο. Σε πολλές εφαρμογές χρειαζόμαστε επιπλέον λειτουργίες κατασκευή ουράς προτεραιότητας για δεδομένα Ν στοιχεία αλλαγή κλειδιού ενός στοιχείου διαγραφή στοιχείου ένωση δύο ουρών προτεραιότητας σε μία

Ουρά Προτεραιότητας (priority queue) Στοιχειώδης υλοποίηση με μη διατεταγμένο πίνακα static int N; static int *pq; void PQinit(int maxn) { pq = malloc(maxn*sizeof(int)); N = 0;} void exch(int *a, int i, int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } int PQempty() { return N==0;} void PQinsert(int v) { pq[n++]=v; } [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 18 12 20 11 15 9 5 N maxn-1 int PQdelmax() { int j, max = 0; for (j = 1; j < N; j++) if (pq[max] < pq[j]) max = j; exch(pq,max,n-1); // ανταλλαγή pq[max] και pq[n-1] return pq[--n]; }

Ουρά Προτεραιότητας (priority queue) Άλλες στοιχειώδεις υλοποιήσεις Διατεταγμένος πίνακας: Το μέγιστο στοιχείο στην τελευταία μη κενή θέση [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] 5 9 11 12 15 18 20 N maxn-1 Μη διατεταγμένη λίστα head 18 12 20 11 15 9 5 Διατεταγμένη λίστα: Το μέγιστο στοιχείο στην αρχή της λίστας head 20 18 15 12 11 9 5

Ουρά Προτεραιότητας (priority queue) εισαγωγή διαγραφή μέγιστου διαγραφή ( * ) εύρεση μέγιστου αλλαγή προτεραιότητας ένωση διατεταγμένος πίνακας διατεταγμένη λίστα μη διατεταγμένος πίνακας μη διατεταγμένη λίστα σωρός διωνυμική ουρά καλύτερος θεωρητικά ( * ) Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται

Ουρά Προτεραιότητας (priority queue) εισαγωγή διαγραφή μέγιστου διαγραφή ( * ) εύρεση μέγιστου αλλαγή προτεραιότητας ένωση διατεταγμένος πίνακας διατεταγμένη λίστα μη διατεταγμένος πίνακας μη διατεταγμένη λίστα σωρός διωνυμική ουρά καλύτερος θεωρητικά ( ** ) ( ** ) ( ** ) ( * ) Υποθέτει ότι γνωρίζουμε τη θέση του στοιχείου που διαγράφεται ( ** ) Απαιτεί πιο σύνθετη συνδεδεμένη λίστα, π.χ. διπλή λίστα

Δομή Δεδομένων Σωρού (heap) Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας. Αναπαράσταση ως πλήρες δυαδικό δένδρο: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. 20 18 12 11 15 9 5 4 2 7 13 6

Δομή Δεδομένων Σωρού (heap) Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας. Σωρός μέγιστου: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. Σωρός ελάχιστου: κάθε κόμβος έχει κλειδί μεγαλύτερο ή ίσο με το κλειδί του γονέα του. 20 2 18 12 5 4 11 15 9 5 11 9 6 7 4 2 7 13 6 20 18 13 15 12 σωρός μέγιστου : γρήγορη εξαγωγή μέγιστου στοιχείου σωρός ελάχιστου : γρήγορη εξαγωγή ελάχιστου στοιχείου

Δομή Δεδομένων Σωρού (heap) Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας. Αναπαράσταση ως πλήρες δυαδικό δένδρο: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. 20 18 12 η ρίζα έχει το μέγιστο κλειδί. ύψος lgn 11 15 9 5 4 2 7 13 6

Δομή Δεδομένων Σωρού (heap) Υποστηρίζει αποδοτικά τις λειτουργίες μιας ουράς προτεραιότητας. Αναπαράσταση ως πλήρες δυαδικό δένδρο: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 η ρίζα έχει το μέγιστο κλειδί. [2] [3] 18 12 ύψος lgn [8] [4] [5] 11 15 [9] [10] 4 2 7 13 [11] [6] 6 9 [12] 5 [7] Υλοποίηση με πίνακα: το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 20 18 12 11 15 9 5 4 2 7 13 6

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 18 12 [4] [5] 11 15 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 18 12 [4] [5] 11 15 [6] 9 5 [7] [8] [9] [10] 4 2 19 13 [11] 6 [12] παραβίαση της συνθήκης σωρού

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 18 12 [4] [5] 11 19 [6] 9 5 [7] [8] [9] [10] 4 2 15 13 [11] 6 [12] αντιμετάθεση με το γονέα

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 19 12 [4] [5] 11 18 [6] 9 5 [7] [8] [9] [10] 4 2 15 13 [11] 6 [12] αντιμετάθεση με το γονέα

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. η συνθήκη σωρού αποκαταστάθηκε [1] 20 [2] [3] 19 12 [4] [5] 11 18 [6] 9 5 [7] [8] [9] [10] 4 2 15 13 [11] 6 [12] αντιμετάθεση με το γονέα

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 19 12 fixup(int *a, int k) { while (k>1 && (a[k/2]<a[k])) { exch(a,k,k/2); k=k/2; } } void exch(int *a, int i, int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } [4] [5] 11 18 [6] 9 5 [7] [8] [9] [10] 4 2 15 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 [2] [3] 18 12 [4] [5] 11 15 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. παραβίαση της συνθήκης σωρού [1] 14 [2] [3] 18 12 [4] [5] 11 15 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. αντιμετάθεση με μεγαλύτερο παιδί [1] 18 [2] [3] 14 12 [4] [5] 11 15 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. αντιμετάθεση με μεγαλύτερο παιδί [1] 18 [2] [3] 15 12 [4] [5] 11 14 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. αντιμετάθεση με μεγαλύτερο παιδί [1] 18 [2] [3] 15 12 [4] [5] 11 14 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12] η συνθήκη σωρού αποκαταστάθηκε

Αλγόριθμοι σε Σωρούς Συνθήκη σωρού: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 18 [2] [3] 15 12 fixdown (int *a, int k, int N) { int j; while (2*k <= N) { j=2*k; if ((j<n) && (a[j]<a[j+1])) j++; if (a[k] > a[j]) break; exch(a,k,j); k=j; } } void exch(int *a, int i, int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } [4] [5] 11 14 [6] 9 5 [7] [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } [1] 18 [2] 15 [3] 12 [4] 11 [5] 14 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 18 [2] 15 [3] 12 [4] 11 [5] 14 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 13 [11] 6 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 6 [2] 15 [3] 12 [4] 11 [5] 14 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 13 [11] 18 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 15 [2] 6 [3] 12 [4] 11 [5] 14 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 13 [11] 18 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 15 [2] 14 [3] 12 [4] 11 [5] 6 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 13 [11] 18 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 15 [2] 14 [3] 12 [4] 11 [5] 13 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 6 [11] 18 [12]

Αλγόριθμοι σε Σωρούς Ουρά προτεραιότητας βασισμένη σε σωρό static int N; int pq[maxn]; int PQempty() { return N==0;} void PQinsert(int v) { pq[++n]=v; fixup(pq,n); } διαγραφή μέγιστου [1] 15 [2] 14 [3] 12 [4] 11 [5] 13 [6] 9 5 [7] int PQdelmax() { exch(pq,1,n); fixdown(pq,1,n-1); return pq[n--]; } [8] [9] [10] 4 2 7 6 [11] 18 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με ουρά προτεραιότητας void PQsort(int *a, int N) { int k; PQinit(); for (k=1; k<=n; k++) PQinsert(a[k]); for (k=n; k>=1; k--) a[k]=pqdelmax(); }

Αλγόριθμοι σε Σωρούς Ταξινόμηση με ουρά προτεραιότητας void PQsort(int *a, int N) { int k; PQinit(); for (k=1; k<=n; k++) PQinsert(a[k]); for (k=n; k>=1; k--) a[k]=pqdelmax(); } Διαδοχική εισαγωγή των στοιχείων στην ουρά O(N logn) χρόνος

Αλγόριθμοι σε Σωρούς Ταξινόμηση με ουρά προτεραιότητας void PQsort(int *a, int N) { int k; PQinit(); for (k=1; k<=n; k++) PQinsert(a[k]); for (k=n; k>=1; k--) a[k]=pqdelmax(); } Διαδοχική εισαγωγή των στοιχείων στην ουρά O(N logn) χρόνος Διαδοχική εξαγωγή μέγιστου στοιχείου O(N logn) χρόνος

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 13 [6] 5 14 [7] [8] [9] [10] 7 2 6 15 [11] 12 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 13 [6] 5 14 [7] [8] [9] [10] 7 2 6 15 [11] 12 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 15 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 15 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 15 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 15 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 15 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 4 18 [4] [5] 9 15 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 15 18 [4] [5] 9 4 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 15 18 [4] [5] 9 4 [6] 12 14 [7] [8] [9] [10] 7 2 6 13 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 15 18 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 11 [2] [3] 15 18 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 18 [2] [3] 15 11 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 18 [2] [3] 15 11 [4] [5] 9 13 [6] 12 14 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 18 [2] [3] 15 14 [4] [5] 9 13 [6] 12 11 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος [1] 18 [2] [3] 15 14 [4] [5] 9 13 [6] 12 11 [7] [8] [9] [10] 7 2 6 4 [11] 5 [12]

Αλγόριθμοι σε Σωρούς Ταξινόμηση με σωρό void heapsort(int *a, int N) { int k; for (k=n/2; k>=1; k--) fixdown(a,k,n); while (N>1) { exch(a,1,n); fixdown(a,1,--n); } } Τακτοποίηση σωρού (αντικαθιστά τη διαδοχική εισαγωγή των στοιχείων στην ουρά) O(N) χρόνος Απόδειξη για Ο αριθμός των αντιμεταθέσεων είναι το πολύ

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Οι αλγόριθμοι ταξινόμησης που μελετάμε στο μάθημα βασίζονται σε συγκρίσεις ανά δύο των στοιχείων της ακολουθίας: a[i] > a[j] OXI NAI Οποιοσδήποτε τέτοιος αλγόριθμος μπορεί να αναπαρασταθεί με ένα δένδρο απόφασης Θα δείξουμε ότι ο χρόνος εκτέλεσης στη χειρότερη περίπτωση είναι

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης a[i]<a[j]? a[b]<a[c]? a[d]<a[e]? a[f]<a[g]? a[h]<a[i]? a[j]<a[k]? a[l]<a[m]?

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης Π.χ. για n=3 a[1]<a[2]? a[1]<a[3]? a[1]<a[3]? a[2]<a[3]? a[3]< a[1]< a[2] a[2]< a[1]< a[3] a[2]<a[3]? a[1]< a[2]< a[3] a[1]< a[3]< a[2] a[2]< a[3]< a[1] a[3]< a[2]< a[1] Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης Π.χ. για n=3 a[1]<a[2]? Για a=[1,2,3] a[1]<a[3]? a[1]<a[3]? a[2]<a[3]? a[3]< a[1]< a[2] a[2]< a[1]< a[3] a[2]<a[3]? a[1]< a[2]< a[3] a[1]< a[3]< a[2] a[2]< a[3]< a[1] a[3]< a[2]< a[1] Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης Π.χ. για n=3 a[1]<a[2]? Για a=[2,1,3] a[1]<a[3]? a[1]<a[3]? a[2]<a[3]? a[3]< a[1]< a[2] a[2]< a[1]< a[3] a[2]<a[3]? a[1]< a[2]< a[3] a[1]< a[3]< a[2] a[2]< a[3]< a[1] a[3]< a[2]< a[1] Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης a[i]<a[j]? a[b]<a[c]? a[d]<a[e]? a[f]<a[g]? a[h]<a[i]? a[j]<a[k]? a[l]<a[m]? Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n! φύλλα Ο αριθμός των συγκρίσεων που πραγματοποιεί μια εκτέλεση του αλγόριθμου στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

Αλγόριθμοι Ταξινόμησης Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις Δένδρο απόφασης a[i]<a[j]? Ύψος δυαδικού δένδρου με n! φύλλα = a[b]<a[c]? a[d]<a[e]? a[f]<a[g]? a[h]<a[i]? a[j]<a[k]? a[l]<a[m]? Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο υπάρχουν n! φύλλα Ο αριθμός των συγκρίσεων που πραγματοποιεί μια εκτέλεση του αλγόριθμου στη χειρότερη περίπτωση είναι ίσος με το ύψος του δένδρου

δ-σωρός Αποτελεί άμεση γενίκευση του δυαδικού σωρού : Κάθε κόμβος έχει το πολύ παιδιά και οι νέοι κόμβοι προστίθενται στο τελευταίο επίπεδο από τα αριστερά προς τα δεξιά 3-σωρός ελάχιστου [1] 2 [2] 6 [3] [4] 4 14 [5] [6] [7] [8] 15 8 7 5 9 [9] Εισαγωγή : Διαγραφή : χρόνος χρόνος

Διωνυμικές ουρές (binomial queues) Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου. Σωρός δύναμης του 2 Δένδρο αριστερά διατεταγμένο σε σωρό, στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες. 12 16 18 20 8 14 7 5

Διωνυμικές ουρές (binomial queues) Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου. Σωρός δύναμης του 2 Δένδρο αριστερά διατεταγμένο σε σωρό, στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες. 12 16 18 20 8 14 7 5 Διωνυμικό δένδρο 20 Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιού αδελφού δίνει σωρό δύναμης του 2. 16 12 14 18 7 5 8

Διωνυμικές ουρές (binomial queues) Υλοποίηση 20 20 16 16 18 5 12 18 12 14 7 8 14 7 5 Δυαδικό δένδρο 8 Νοητή αναπαράσταση: Διωνυμικό δένδρο διατεταγμένο σε σωρό 20 16 12 18 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμικά δένδρα

Διωνυμικές ουρές (binomial queues) Διωνυμικά δένδρα Το διωνυμικό δένδρο έχει κόμβους : κόμβους στο επίπεδο

Διωνυμικές ουρές (binomial queues) Δυαδικά δένδρα αριστερά διατεταγμένα σε σωρό Το κλειδί κάθε κόμβου είναι μεγαλύτερο ή ίσο από όλα τα κλειδιά του αριστερού υποδένδρου αυτού του κόμβου. Σωρός δύναμης του 2 Δένδρο αριστερά διατεταγμένο σε σωρό, στο οποίο το δεξί υποδένδρο της ρίζας είναι κενό και το αριστερό υποδένδρο είναι πλήρες. 20 16 8 12 14 18 7 5 Διωνυμικό δένδρο 20 Δένδρο που με την αντιστοίχηση αριστερού παιδιού και δεξιού αδελφού δίνει σωρό δύναμης του 2. 16 12 14 18 7 5 8 Το πλήθος των κόμβων σε ένα σωρό δύναμης του 2 είναι δύναμη του 2 Κανένας κόμβος δεν έχει κλειδί μεγαλύτερο από το κλειδί της ρίζας Τα διωνυμικά δέντρα είναι διατεταγμένα σε σωρό

Διωνυμικές ουρές (binomial queues) 20 20 15 15 16 11 11 16 12 18 9 13 9 13 12 18 8 14 7 5 6 10 3 4 6 10 3 4 8 14 7 5 16 12 14 8 20 18 7 5 11 9 10 6 15 13 3 4 11 9 10 6 15 13 3 4 16 12 14 8 20 18 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Παράδειγμα: διωνυμική ουρά μεγέθους 13 = (1101) 2 20 11 15 16 9 12 18 6 10 8 14 7 5 Μια διωνυμική ουρά με σωρούς δύναμης του 2 κλειδιά αποτελείται από το πολύ

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 11 15 16 9 12 18 6 10 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 16 20 9 11 15 3 1101 + 0001 12 18 6 10 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 15 3 1101 + 0001 0 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 3 15 1101 + 0001 1110 κρατούμενο 0

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 12 16 18 20 6 9 10 11 3 15 13 1110 + 0001 1111 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 16 20 9 11 3 15 13 4 1111 + 0001 12 18 6 10 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 3 15 13 4 1111 + 0001 0 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 3 15 4 13 1111 + 0001 0 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 3 15 4 13 1111 + 0001 00 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 4 13 3 15 1111 + 0001 00 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 16 8 12 14 18 7 5 6 9 10 11 4 13 3 15 1111 + 0001 000 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 12 16 18 20 9 11 13 15 1111 + 0001 000 8 14 7 5 6 10 4 3 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 12 16 18 20 9 11 13 15 1111 + 0001 0000 8 14 7 5 6 10 4 3 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Εισαγωγή στοιχείου 20 9 11 13 15 12 16 18 1111 + 0001 10000 κρατούμενο 0 6 10 4 3 8 14 7 5 Χρόνος =

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Διαγραφή μέγιστου από σωρό δύναμης του 2 15 20 11 16 9 13 12 18 6 10 4 3 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Διαγραφή μέγιστου από σωρό δύναμης του 2 15 11 16 9 13 12 18 6 10 4 3 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Διαγραφή μέγιστου 21 11 16 9 13 12 18 6 10 4 3 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Διαγραφή μέγιστου 11 16 Πρέπει να ενώσουμε δύο ουρές 9 13 12 18 6 10 4 3 8 14 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 12 16 18 13 111 + 011 8 14 7 5 9 11 κρατούμενο 0

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 12 16 18 13 111 + 011 0 8 14 7 5 9 11 κρατούμενο 1

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 12 16 18 13 111 + 011 10 8 14 7 9 κρατούμενο 1 11 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 12 16 111 + 011 10 8 14 18 κρατούμενο 1 13 11 9 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 12 16 111 + 011 010 8 14 18 κρατούμενο 1 13 11 9 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Ένωση δύο διωνυμικών ουρών 111 + 011 1010 16 18 κρατούμενο 0 12 13 11 Χρόνος = 8 14 9 7 5

Διωνυμικές ουρές (binomial queues) Διωνυμική ουρά Σύνολο σωρών δύναμης του 2 οι οποίοι δεν έχουν το ίδιο μέγεθος. Η δομή της καθορίζεται από τη δυαδική αναπαράσταση του αριθμού των κόμβων της. Κατασκευή διωνυμικής ουράς με κλειδιά Η κατασκευή μιας διωνυμικής ουράς με ουρά απαιτεί χρόνο διαδοχικές εισαγωγές σε αρχικά κενή Για κάθε εισαγωγή έχουμε μια πράξη ένωσης σωρών δύναμης του δύο για κάθε bit που αλλάζει από 1 σε 0 στη δυαδική αναπαράσταση του αριθμού των κόμβων της ουράς

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 ο ψηφίο από το τέλος: αλλάζει με κάθε επαύξηση

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 2 ο ψηφίο από το τέλος: αλλάζει με κάθε δεύτερη επαύξηση

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 3 ο ψηφίο από το τέλος: αλλάζει με κάθε τέταρτη επαύξηση

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 4 ο ψηφίο από το τέλος: αλλάζει με κάθε όγδοη επαύξηση

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις. Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει συνολικά φορές Σύνολο αλλαγών για όλα τα ψηφία =

Διωνυμικές ουρές (binomial queues) Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις. Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει συνολικά φορές Σύνολο αλλαγών για όλα τα ψηφία =

Πλεονάζον αριθμητικό σύστημα Ο χρόνος εισαγωγής μπορεί να βελτιωθεί χρησιμοποιώντας ένα πιο ευέλικτο αριθμητικό σύστημα Επιτρέπουμε κάποια ψηφία να λάβουν την τιμή 2 με ελεγχόμενο τρόπο. H ίδια τιμή μπορεί να αντιστοιχεί σε περισσότερες ακολουθίες ψηφίων. Για παράδειγμα Κανονικές ακολουθίες Μια ακολουθία στο πλεονάζον αριθμητικό σύστημα είναι κανονική εάν τα 2 και τα 0 εναλλάσσονται (δηλαδή ανάμεσα από διαδοχικά 2 μεσολαβεί κάποιο 0 και αντιστρόφως).

Σωρός Fibonacci Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί 23 7 3 17 24 πλήθος κόμβων 18 52 38 30 26 46 39 41 35 Αντισταθμιστικοί χρόνοι εκτέλεσης εισαγωγή, ένωση, εύρεση ελάχιστου, μείωση κλειδιού διαγραφή, εξαγωγή ελάχιστου

Σωρός Fibonacci Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί 23 7 3 17 24 πλήθος κόμβων 18 52 38 30 26 46 39 41 35 Κάθε κόμβος αποθηκεύει εκτός από το κλειδί του τα παρακάτω δεδομένα γονέας αριθμός παιδιών αριστερός αδερφός δεξιός αδερφός bit επισήμανσης παιδί (οποιοδήποτε)

Σωρός Fibonacci Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί 23 7 3 17 24 πλήθος κόμβων 18 52 38 30 26 46 39 41 35 Κάθε κόμβος αποθηκεύει εκτός από το κλειδί του τα παρακάτω δεδομένα γονέας αριθμός παιδιών αριστερός αδερφός δεξιός αδερφός bit επισήμανσης παιδί (οποιοδήποτε)

Σωρός Fibonacci Βασίζεται στο διωνυμικό σωρό (δηλαδή αποτελεί μια συλλογή από δένδρα) αλλά έχει πιο χαλαρή δομή δείκτης στον κόμβο (ρίζα) με ελάχιστο κλειδί 23 7 3 17 24 πλήθος κόμβων 18 52 38 30 26 46 39 41 35 Κάθε κόμβος αποθηκεύει εκτός από το κλειδί του τα παρακάτω δεδομένα γονέας αριθμός παιδιών αριστερός αδερφός δεξιός αδερφός bit επισήμανσης παιδί (οποιοδήποτε)

Σωρός Fibonacci Μέγιστος βαθμός Σε ένα σωρό Fibonacci με είναι κλειδιά ο μέγιστος βαθμός που μπορεί να έχει οποιοσδήποτε κόμβος Δυναμικό σωρού Για την αντισταθμιστική ανάλυση των λειτουργιών ενός σωρού Fibonacci ορίζουμε το δυναμικό του όπου το πλήθος των δένδρων το πλήθος των επισημασμένων κόμβων σταθερά Για να απλοποιήσουμε την ανάλυση θέτουμε σε κάποια σταθερή ποσότητα εργασίας και υποθέτουμε ότι μια μονάδα δυναμικού αντιστοιχεί

Σωρός Fibonacci Μέγιστος βαθμός Σε ένα σωρό Fibonacci με είναι κλειδιά ο μέγιστος βαθμός που μπορεί να έχει οποιοσδήποτε κόμβος Δυναμικό σωρού Για την αντισταθμιστική ανάλυση των λειτουργιών ενός σωρού Fibonacci ορίζουμε το δυναμικό του όπου το πλήθος των δένδρων το πλήθος των επισημασμένων κόμβων

Σωρός Fibonacci Μέγιστος βαθμός Σε ένα σωρό Fibonacci με είναι κλειδιά ο μέγιστος βαθμός που μπορεί να έχει οποιοσδήποτε κόμβος Δυναμικό σωρού Για την αντισταθμιστική ανάλυση των λειτουργιών ενός σωρού Fibonacci ορίζουμε το δυναμικό του όπου το πλήθος των δένδρων το πλήθος των επισημασμένων κόμβων 23 7 3 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εύρεση ελάχιστου κόμβου Επιστρέφει τον κόμβο με ελάχιστο κλειδί 23 7 3 18 52 38 39 41 17 30 24 26 46 35 Το πραγματικό κόστος της εύρεσης είναι Πρέπει επίσης να φράξουμε το αντισταθμιστικό κόστος. Το δυναμικό της δομής μετά την πράξη είναι Άρα το αντισταθμιστικό κόστος είναι

Σωρός Fibonacci Εισαγωγή κόμβου Δημιουργείται νέο δένδρο με μόνο ένα κόμβο και εισάγεται στη λίστα των ριζών δίπλα από το Αν το εισαγόμενο κλειδί είναι το ελάχιστο τότε ο δείκτης δείχνει στο νέο κόμβο 23 7 3 18 52 38 17 30 24 26 46 εισαγωγή(8) 39 41 35 23 7 8 3 17 24 18 52 38 30 26 46 39 41 35

Σωρός Fibonacci Εισαγωγή κόμβου Δημιουργείται νέο δένδρο με μόνο ένα κόμβο και εισάγεται στη λίστα των ριζών δίπλα από το Αν το εισαγόμενο κλειδί είναι το ελάχιστο τότε ο δείκτης δείχνει στο νέο κόμβο 23 7 3 18 52 38 17 30 24 26 46 εισαγωγή(2) 39 41 35 23 7 2 3 17 24 18 52 38 30 26 46 39 41 35

Σωρός Fibonacci Εισαγωγή κόμβου Δημιουργείται νέο δένδρο με μόνο ένα κόμβο και εισάγεται στη λίστα των ριζών δίπλα από το Αν το εισαγόμενο κλειδί είναι το ελάχιστο τότε ο δείκτης δείχνει στο νέο κόμβο Το πραγματικό κόστος της εισαγωγής είναι Πρέπει επίσης να φράξουμε το αντισταθμιστικό κόστος. Το δυναμικό της δομής μετά την πράξη είναι Άρα το αντισταθμιστικό κόστος εισαγωγής είναι

Σωρός Fibonacci Ένωση δύο σωρών Fibonacci Ενώνει τις αντίστοιχες λίστες ριζικών κόμβων χρησιμοποιώντας τους δείκτες και Ο δείκτης δείχνει στον κόμβο με το ελάχιστο κλειδί μεταξύ των και 23 7 3 17 24 2 5 18 52 38 30 26 46 12 33 39 41 35 53 ένωση 23 7 2 5 3 17 24 12 33 18 52 38 30 26 46 53 39 41 35

Σωρός Fibonacci Ένωση δύο σωρών Fibonacci Ενώνει τις αντίστοιχες λίστες ριζικών κόμβων χρησιμοποιώντας τους δείκτες και Ο δείκτης δείχνει στον κόμβο με το ελάχιστο κλειδί μεταξύ των και Το πραγματικό κόστος της ένωσης είναι Το δυναμικό της δομής μετά την πράξη είναι Άρα το αντισταθμιστικό κόστος ένωσης είναι

Σωρός Fibonacci Εξαγωγή ελάχιστου Διαγράφει τον κόμβο με το ελάχιστο κλειδί και ενοποιεί δένδρα στο ριζικό επίπεδο 23 7 21 3 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Διαγράφει τον κόμβο με το ελάχιστο κλειδί και ενοποιεί δένδρα στο ριζικό επίπεδο

Σωρός Fibonacci Εξαγωγή ελάχιστου Διαγράφει τον κόμβο με το ελάχιστο κλειδί και ενοποιεί δένδρα στο ριζικό επίπεδο 23 7 21 3 1 ο βήμα διαγραφής μέγιστου 18 52 38 39 41 17 30 24 26 46 35 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών Πριν την ενοποίηση θέτουμε

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 23 7 21 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 17 24 23 39 41 30 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 17 24 23 39 41 30 26 46 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 24 17 23 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 24 17 23 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 24 17 23 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 24 17 23 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 52 38 24 17 23 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 21 18 38 24 17 23 52 39 41 26 46 30 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 18 38 24 17 23 21 39 41 26 46 30 52 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 0 1 2 3 7 18 38 24 17 23 21 39 41 26 46 30 52 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Η ρουτίνα ενοποίησης (consolidate) χρησιμοποιεί ένα βοηθητικό πίνακα δεικτών 7 18 38 24 17 23 21 39 41 26 46 30 52 35

Σωρός Fibonacci Εξαγωγή ελάχιστου Το πραγματικό κόστος της εξαγωγής είναι Το δυναμικό της δομής πριν την πράξη είναι Το δυναμικό της δομής μετά την πράξη είναι Άρα η μεταβολή του δυναμικού είναι Το αντισταθμιστικό κόστος εξαγωγής είναι

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. Για να μειώσουμε το κλειδί του κόμβου από σε εκτελούμε

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. 7 18 38 24 17 23 21 39 41 26 46 30 52 μείωση του 46 σε 15 35 15 7 18 38 24 17 23 21 39 41 26 30 52 35

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. 15 7 18 38 24 17 23 21 39 41 26 30 52 μείωση του 35 σε 5 35 15 5 7 18 38 θα εκτελεστεί κλιμακωτή αποκοπή (cascading cut) 24 26 17 30 23 21 52 39 41

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. 15 35 7 18 38 θα εκτελεστεί κλιμακωτή αποκοπή (cascading cut) 24 26 17 30 23 21 52 39 41 15 5 26 7 18 38 θα εκτελεστεί κλιμακωτή αποκοπή (cascading cut) 24 17 30 23 21 52 39 41

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. 15 35 26 7 18 38 θα εκτελεστεί κλιμακωτή αποκοπή (cascading cut) 24 17 30 23 21 52 39 41 15 5 26 24 7 18 38 η κλιμακωτή αποκοπή τερματίζεται 17 30 23 21 52 39 41

Σωρός Fibonacci Μείωση κλειδιού Η εκτέλεση αυτής της πράξης έχει ως αποτέλεσμα τα δένδρα του σωρού Fibonacci να μην παραμένουν διωνυμικά. 15 5 26 24 7 18 38 17 23 21 39 41 30 52

Σωρός Fibonacci Μείωση κλειδιού Έστω ότι η διαδικασία κλιμακωτής αποκοπής εκτελέστηκε φορές Το πραγματικό κόστος της μείωσης είναι Το δυναμικό της δομής πριν την πράξη είναι Το δυναμικό της δομής μετά την πράξη είναι η αποκοπή του δημιούργησε 1 δένδρο οι κλιμακωτές αποκοπές δημιούργησαν δένδρα

Σωρός Fibonacci Μείωση κλειδιού Έστω ότι η διαδικασία κλιμακωτής αποκοπής εκτελέστηκε φορές Το πραγματικό κόστος της μείωσης είναι Το δυναμικό της δομής πριν την πράξη είναι Το δυναμικό της δομής μετά την πράξη είναι οι κλιμακωτές αποκοπές έσβησαν την επισήμανση η τελική κλιμακωτή αποκοπή ίσως επισήμανε ένα κόμβο κόμβων

Σωρός Fibonacci Μείωση κλειδιού Έστω ότι η διαδικασία κλιμακωτής αποκοπής εκτελέστηκε φορές Το πραγματικό κόστος της μείωσης είναι Το δυναμικό της δομής πριν την πράξη είναι Το δυναμικό της δομής μετά την πράξη είναι Άρα η μεταβολή του δυναμικού είναι Το αντισταθμιστικό κόστος εξαγωγής είναι

Σωρός Fibonacci Διαγραφή κόμβου Έστω ο κόμβος που θέλουμε να διαγράψουμε. Η διαγραφή γίνεται σε δύο βήματα 1. Μειώνουμε το κλειδί του σε 2. Εκτελούμε εξαγωγή ελάχιστου Το αντισταθμιστικό κόστος της διαγραφής είναι

Σωρός Fibonacci Μέγιστος βαθμός Σε ένα σωρό Fibonacci με είναι κλειδιά ο μέγιστος βαθμός που μπορεί να έχει οποιοσδήποτε κόμβος Χωρίς την πράξη μείωσης κλειδιού τα δένδρα ενός σωρού Fibonacci είναι διωνυμικά, άρα Με τη μείωση κλειδιού το παραπάνω φράγμα δεν ισχύει. Θα δείξουμε όμως ότι όπου Ακολουθία Fibonacci

Σωρός Fibonacci Μέγιστος βαθμός Σε ένα σωρό Fibonacci με είναι κλειδιά ο μέγιστος βαθμός που μπορεί να έχει οποιοσδήποτε κόμβος Χωρίς την πράξη μείωσης κλειδιού τα δένδρα ενός σωρού Fibonacci είναι διωνυμικά, άρα Με τη μείωση κλειδιού το παραπάνω φράγμα δεν ισχύει. Θα δείξουμε όμως ότι όπου Ακολουθία Fibonacci Ισχύει

Σωρός Fibonacci Μέγιστος βαθμός Λήμμα Έστω το πλήθος των απογόνων του κόμβου δένδρο που τον περιέχει. Αν τότε 23 7 21 3 18 52 38 39 41 17 30 24 26 46 35

Σωρός Fibonacci Μέγιστος βαθμός Λήμμα Έστω το πλήθος των απογόνων του κόμβου δένδρο που τον περιέχει. Αν τότε Τότε αν ο έχει μέγιστο βαθμό έχουμε

Σωρός Fibonacci Μέγιστος βαθμός Λήμμα Έστω το πλήθος των απογόνων του κόμβου δένδρο που τον περιέχει. Αν τότε Παρατήρηση : Έστω τα παιδιά του με τη σειρά με την οποία τα απέκτησε από το πιο παλιό στο πιο πρόσφατο. Τότε και Ισχύει γιατί όταν συνδέθηκε ο με τον τότε αφού ο είχε ήδη παιδιά τους. Από εκείνη τη στιγμή ο μπορεί να έχασε το πολύ ένα παιδί.

Σωρός Fibonacci Μέγιστος βαθμός Λήμμα Έστω το πλήθος των απογόνων του κόμβου δένδρο που τον περιέχει. Αν τότε Έστω ο ελάχιστος δυνατός αριθμός απογόνων ενός κόμβου με βαθμό Ας υποθέσουμε ότι και ότι ο έχει παιδιά Από την προηγούμενη παρατήρηση ισχύει και Δείχνουμε με επαγωγή ότι. Η βάση της επαγωγής ισχύει αφού Επομένως