Εργασία Η υλοποίηση του αλγορίθμου συγχώνευσης θα πρέπει να χρησιμοποιεί την ιδέα των ροών (streams). Θα πρέπει να υπάρχουν δύο διαφορετικά είδη από ροές: ροές εισόδου και ροές εξόδου. Μία ροή εισόδου θα πρέπει να υποστηρίζει τουλάχιστον μία διαδικασία open (εκκίνηση μίας υπάρχουσας ροής για ανάγνωση), μία διαδικασία read_next (ανάγνωση του επόμενου στοιχείου από τη ροή) και μία διαδικασία end_of_stream (επιστρέφει TRUE αν έχουμε φτάσει στο τέλος της ροής). Μία ροή εξόδου θα πρέπει να υποστηρίζει τις πράξεις create (δημιουργία μίας νέας ροής), write (εγγραφή ενός στοιχείου στη υπάρχουσα ροή) και close (τερματισμός της ροής). Υλοποιήστε τις ροές με τέσσερις διαφορετικούς τρόπους χρησιμοποιώντας τους παρακάτω διαφορετικούς μηχανισμούς για I/O. Και στις τέσσερις περιπτώσεις τα πραγματικά δεδομένα της ροής θα πρέπει να αποθηκευτούν σε ένα απλό αρχείο. Η ανάγνωση και η εγγραφή γίνεται για ένα στοιχείο τη φορά χρησιμοποιώντας τις διαδικασίες read και write. Η ανάγνωση και η εγγραφή γίνεται με χρήση των fread και fwrite συναρτήσεων από τη βιβλιοθήκη stdio (αυτές οι συναρτήσεις υλοποιούν δικούς τους μηχανισμούς ενδιάμεσης μνήμης – buffering). Η ανάγνωση και η εγγραφή γίνεται όπως στο (a) με τη διαφορά ότι η ροή έχει μία ενδιάμεση μνήμη μεγέθους B στην κύρια μνήμη. Όταν η ενδιάμεση αυτή μνήμη γίνει άδεια/γεμάτη τότε τα επόμενα B στοιχεία θα αναγνωστούν/εγγραφούν από/προς το αρχείο. Η ανάγνωση και η εγγραφή γίνεται αντιστοιχώντας και ακυρώνοντας αυτή την αντιστοίχηση ενός μέρους του αρχείου μεγέθους B στην κύρια μνήμη με χρήση των συναρτήσεων mmap και munmap αντίστοιχα.
Εργασία 2 2 Πειραματιστείτε με κάθε μία υλοποίηση ροής από τις παραπάνω. Για παράδειγμα, προσπαθήστε να ανοίξετε k ροές και και αναγνώστε/εγγράψτε Ν στοιχεία από/προς κάθε ροή. Προσπαθήστε να πειραματιστείτε με μεγάλα N και για k=1,2,3,8,…,MAX, όπου MAX είναι το μέγιστο πλήθος ροών που επιτρέπει το λειτουργικό σύστημα. Για τις περιπτώσεις ενδιάμεσης μνήμης (c) και (d) δοκιμάστε για διάφορες τιμές του B (ακόμα και αρκετά μεγάλες). Για κάθε μία από τις παραπάνω τέσσερις υλοποιήσεις ροών, βρείτε τις ιδιότητές τους και τους περιορισμούς τους και προσπαθήστε να βρείτε ποια υλοποίηση είναι η καλύτερη. Στην αναφορά θα πρέπει να έχετε μία συζήτηση όλων των αποτελεσμάτων που πήρατε. προσπαθήστε να εξηγήσετε ό,τι ανακαλύπτετε για κάθε υλοποίηση.
Εργασία Υλοποιήστε έναν συγχωνευτή d-δρόμων, στον οποίο θα δίνονται d ταξινομημένες ροές εισόδου ακεραίων μήκους 32 bit και θα φτιάχνει μία ροή εξόδου που θα περιλαμβάνει όλα τα στοιχεία από τις ροές εισόδου ταξινομημένες. Η συγχώνευση θα πρέπει να βασιστεί την ουρά προτεραιότητας Heap (έτοιμος κώδικας από τον παραπάνω σύνδεσμο). 3. Υλοποιήστε έναν αλγόριθμο συγχώνευσης εξωτερικής μνήμης (Μergesort) για την ταξινόμηση ακεραίων μήκους 32 bit. Το πρόγραμμα θα πρέπει να παίρνει τις παραμέτρους N, M και d και θα ταξινομεί ως εξής: Θα διαβάζει το αρχείο εισόδου και θα το σπάει σε ροές, όπου η κάθε μία θα έχει μέγεθος ≤ M. Κάθε παραγόμενη ροή θα ταξινομείται στην κύρια μνήμη με χρήση της QuickSort πριν γραφεί πάλι στο δίσκο. Αποθηκεύστε τις αναφορές (δείκτες;) στις ροές σε μία ουρά (αν χρειάζεται να την αποθηκεύσετε και αυτή στον δίσκο). Να επαναλάβετε την συγχώνευση των d (ή λιγότερων) πρώτων ροών στην ουρά και αποθηκεύστε την παραγόμενη ροή στο τέλος της ουράς. Αυτή η διαδικασία θα τερματίσει όταν στη ουρά παραμείνει μία μοναδική ροή (θα είναι όλο το αρχείο ταξινομημένο).
Εργασία Εκτελέστε πειράματα με τον υλοποιημένο αλγόριθμο συγχώνευσης χρησιμοποιώντας και τους τέσσερις τρόπους υλοποίησης των ροών ξεκινώντας με ένα μεγάλο αρχείο που θα περιέχει τυχαίους 32-bit ακεραίους. Δοκιμάστε για διαφορετικές τιμές των N, M και d και δείξτε ποιος είναι ο κατάλληλος συνδυασμός των δύο τελευταίων παραμέτρων για διάφορες τιμές του N. Προσπαθήστε στην αναφορά να ερμηνεύσετε όλα τα αποτελέσματα που βρήκατε. 5. Υλοποιήστε τον απλό αλγόριθμο Quicksort για κύρια μνήμη, για ταξινόμηση ενός πίνακα με N ακεραίους 32-bit (τον οποίο θα τον προσπελάσετε από ένα αρχείο με κύρια μνήμη M << Ν). 6. Να συγκρίνετε την καλύτερη υλοποίηση του Mergesort (ως προς τις διαφορετικές υλοποιήσεις του μηχανισμού των ροών) με τον αλγόριθμο Quicksort.
ΑΝΑΖΗΤΗΣΗ 5
Το Πρόβλημα του Λεξικού – Λύσεις Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά: 1. Εύρεση ενός στοιχείου στο σύνολο 2. Ένθεση ενός νέου στοιχείου στο σύνολο 3. Διαγραφή ενός υπάρχοντος στοιχείου από το σύνολο ΚατακερματισμόςΔέντρα 6 Λύνουν και το πρόβλημα του προηγούμενου στοιχείου (predecessor)
Δενδρικές Δομές - Παραλλαγές
8 Εύρεση σε Ο(log 2 N) χρόνο Δυαδικό Δέντρο Εύρεσης: –Μέθοδο εύρεσης σε σύνολο N στοιχείων –Υποθέτουμε ότι τα στοιχεία είναι στα φύλλα –Η εύρεση αφορά ένα μονοπάτι από τη ρίζα σε φύλλο Δέντρα Εύρεσης Εσωτερικής Μνήμης
Δένδρα Εύρεσης Εξωτερικής Μνήμης Κατά πλάτος διαπέραση για μπλοκ: –Ύψος ως προς μπλοκ: Ο(log 2 N)/Ο(log 2 B)=O(log B N) –Τα κλειδιά εξόδου εξάγονται σε μπλοκ Ερωτήσεις διαστήματος σε O(log B N + Τ/Β) Βέλτιστο: O(N/B) χώρο και O(log B N + Τ/Β) ερώτηση 9
Διατήρηση των κατά πλάτους (BFS) μπλοκ σε ενημερώσεις ; Επαναζυγίζουμε με περιστροφές Φαίνεται δύσκολο να διατηρήσεις το BFS κατά την περιστροφή Επιπλέον η έξοδος θα πρέπει να είναι σε μορφή μπλοκ! Δένδρα Εύρεσης Εξωτερικής Μνήμης x y x y 10
B-δέντρα Τα μπλοκ κατά BFS αντιστοιχούν σε δέντρο με βαθμό Θ(B) Τα B-δέντρα επιτρέπουν την διακύμανση του βαθμού Επαναζύγιση: Διάσπαση, Συγχώνευση και Διαμοίραση 11
Παράδειγμα 12 8,15 3,512,1419,22,32 1,24,45,6,7 15,1820,21 23,29,30 32, ,31 19,22,29, ,32 8,15, 22
Β-δέντρα (a,b)-δέντρα T είναι ένα (a,b)-δέντρο (a≥2 και b≥2a-1) Όλα τα φύλλα στο ίδιο επίπεδο (περιέχουν μεταξύ a και b στοιχεία) Εκτός της ρίζας, όλοι οι κόμβοι έχουν βαθμό μεταξύ a και b Η ρίζα έχει βαθμό μεταξύ 2 και b Το (a,b)-δέντρο χρησιμοποιεί γραμμικό χώρο και έχει ύψος Ο(log α Ν) (2,4)–δέντρο 13
Ένθεση ενός Στοιχείου Βρες και ένθεσε το νέο στοιχείο στο φύλλο v Έστω ότι ο v έχει b+1 στοιχεία/παιδιά Διάσπαση v: δημιουργούμε κόμβους v΄ και v΄΄ με και στοιχεία και ένθεσε το νέο στοιχείο στον πατέρας(v) (φτιάξε νέα ρίζα αν είναι απαραίτητο) v=πατέρας(v) v’v’’ v 14 Κόστος;
Διαγραφή ενός Στοιχείου Εύρεση και διαγραφή του στοιχείου από το v Έστω ότι το v έχει a-1 στοιχεία/παιδιά Συγχώνευση v με αδερφό v΄: μετακίνηση παιδιών του v΄ στο v Διαγραφή στοιχείου από πατέρας(v) (διαγραφή ρίζας αν απαραίτητο) Αν ο v έχει >b (και ≤ a+b-1<2b) παιδιά τότε διάσπαση v v=πατέρας(v) v v 15 Κόστος;
Αν b≤2a-1 κάθε ενημέρωση προκαλεί πολλές επαναζυγίσεις Αν b≥2a οι ενημερώσεις έχουν Ο(1) επιμερισμένο κόστος Αν b>2a επιμερισμένες επαναζυγιστικές πράξεις Δεν θα αποδείξουμε τίποτα μιας και είναι λίγο δύσκολα Ιδιότητες των (a,b)-δένδρων ένθεση διαγραφή (2,3)-δένδρο 16
Το B-δένδρο B-δένδρα: (a,b)-δένδρα όπου a,b = Θ(Β) O(N/B) χώρος O(log B N+T/B) ερώτηση O(log B N) ενημέρωση Τα B-δένδρα όπου τα στοιχεία είναι στα φύλλα μόνο ονομάζονται B + -δένδρα Κατασκευή του δένδρου σε I/Oς Ταξινομούμε τα στοιχεία και κατασκευάζουμε τα φύλλα Χτίζουμε το δένδρο από κάτω προς τα πάνω (ανά επίπεδο) 17
Συμπεράσματα: B-δένδρο B-δένδρο με παράμετρο διακλάδωσης b και παράμετρο φύλλων k (b,k≥8) Όλα τα φύλλα στο ίδιο επίπεδο και περιέχουν μεταξύ 1/4k και k στοιχεία Εκτός της ρίζας, όλοι οι κόμβοι έχουν βαθμό μεταξύ 1/4b και b Η ρίζα έχει βαθμό μεταξύ 2 και b B-δένδρο με παράμετρο φύλλων k=Ω(Β) O(N/B) χώρος Ύψος Ο(log b (N/B)) O(1/k) επιμερισμένες επαναζυγίσεις φύλλων Ο((1/bk)log b (N/B)) επιμερισμένες επαναζυγίσεις εσωτερικών κόμβων B-tree με παράμετρο διακλάδωσης B c, 0<c≤1, και παράμετρο φύλλων B O(N/B) χώρος Ο(log B N) κόστος ενημερώσεων Ο(log B N+Τ/Β) κόστος ερωτήσεων 18
Δευτερεύουσες (όχι μνήμη) Δομές Όταν χρησιμοποιούνται δευτερεύουσες δομές, η επαναζύγιση του v απαιτεί συχνά O(w(v)) I/Oς (w(v) είναι το βάρος του v) Αν Ω(w(v)) ενθέσεις πρέπει να γίνουν κάτω από τον v μεταξύ διαδοχικών επαναζυγίσεων του v O(1) επιμερισμένο κόστος διάσπασης Ο(log B N) επιμερισμένο κόστος ένθεσης Οι κόμβοι του B-δένδρου δεν έχουν αυτή την ιδιότητα (2,4)-δένδρο 19
2D Ερωτήσεις Περιοχής Πως ανακαλύπτουμε αποδοτικά τα σημεία εντός του ορθογωνίου; Ορθογώνιο Ερώτημα Περιοχής ([x 1, x 2 ], [y 1,y 2 ]): βρες όλα τα σημεία (x, y) έτσι ώστε x 1 <x<x 2 και y 1 <y<y 2 x y x1x1 x2x2 y1y1 y2y2
Δένδρα Περιοχής Το σύνολο P(v) ενός κόμβου v σε ένα BST είναι το σύνολο των σημείων που αποθηκεύονται στο υποδένδρο του v Το δένδρο περιοχής είναι μία πολλαπλών επιπέδων δομή: Η κύρια δομή είναι ένα BST T στις x- συντεταγμένες των σημείων Κάθε κόμβος v του T αποθηκεύει ένα δείκτη στο BST T y (v) (συσχετισμένη δομή του v), που αποθηκεύει το P(v) ως προς την y-συντεταγμένη Τα 2D σημεία αποθηκεύονται στα φύλλα. BST ως προς y P(v)P(v) Ty(v)Ty(v) T P(v)P(v) v BST ως προς x
22 Δένδρα Περιοχής TxTx v P( v ) Ty(v)Ty(v) p1p1 p2p2 p3p3 p4p4 p5p5 p6p6 p7p7 p1p1 p2p2 p3p3 p4p4 p5p5 p6p6 p7p7 v T4T4 p7p7 p5p5 p6p6 Ty(v)Ty(v) xy p112.5 p221 p330 p444 p54.53 p p76.52
Κόστος Ερώτησης: Η ερώτηση για 1D-δένδρο απαιτεί O(log n+k) χρόνο. Πόσα 1D δένδρα (συσχετισμένες δομες) πρέπει να ρωτήσουμε; Ερώτηση : [x,x’] x x’ Το πολύ 2 ύψος του T = 2 log n Κάθε 1D ερώτημα απαιτεί O(log n+k’) χρόνο. Χρόνος ερώτησης = O(log 2 n + k) Απάντηση = Ένωση των επιμέρους απαντήσεων: k = ∑k’. Δένδρα Περιοχής
24 Τι γίνεται όταν το δένδρο γίνεται δυναμικό; Πώς υλοποιούνται οι επαναζυγιστικές πράξεις και ποια η επίπτωσή τους στις συσχετισμένες δομές;
Το BB[ ]-δένδρο (κύρια μνήμη) Στην κύρια μνήμη το BB[ ]-δένδρο έχει αυτή την ιδιότητα Ορίζεται χρησιμοποιώντας περιορισμούς βάρους Ο λόγος μεταξύ του βάρους του αριστερού παιδιού και του πατέρα του να είναι μεταξύ του και 1- ( <1) Ύψος O(log N) Αν η επαναζύγιση μπορεί να γίνει με περιστροφές Δύσκολη η αποδοτική Ι/Ο υλοποίηση των BB[ ]-δένδρων x y x y 25
Βαροζυγισμένο B-δένδρο Ιδέα: Συνδυασμός B-δένδρου και BB[ ]-δένδρου Περιορισμοί βάρους στους κόμβους και όχι περιορισμοί στο βαθμό Η επαναζύγιση γίνεται με διασπάση/συγχώνευση όπως στο B-δένδρο Βαροζυγισμένα B-δένδρα με παραμέτρους b και k (b>8, k≥8) Όλα τα φύλλα στο ίδιο επίπεδο και περιέχουν μεταξύ k/4 και k στοιχεία Εσωτερικός κόμβος v στο επίπεδο λ έχει w(v)<b λ k Εκτός της ρίζας, ο εσωτερικός κόμβος v στο επίπεδο λ έχει w(v)>(1/4)b λ k Η ρίζα έχει περισσότερα από ένα παιδιά Επίπεδο λ-1 Επίπεδο λ 26
Βαροζυγισμένα B-δένδρα Κάθε εσωτερικός κόμβος v έχει βαθμό |v|: Ύψος: Δευτερεύουσα μνήμη: Επιλέγουμε 4b=B (ή B c για 0 < c ≤ 1) k=B O(N/B) χώρος, ερώτηση 27 Επίπεδο λ-1 Επίπεδο λ
Ένθεση Εύρεση κατάλληλου φύλλου u και ένθεση του νέου στοιχείου Ανεβαίνουμε το μονοπάτι από το u στη ρίζα: Αν ο v (επίπεδο λ) έχει w(v)=b λ k+1 τότε διάσπαση σε v΄ και v΄ όπου: Ο αλγόριθμος είναι σωστός: έτσι ώστε Ιδιότητα Βάρους: Ω(b λ k) ενημερώσεις κάτω από τα v΄ και v΄΄ πριν την επόμενη πράξη επαναζύγισης 28
Διαγραφή Εύρεση κατάλληλου φύλλου u και διαγραφή του στοιχείου Ανεβαίνουμε το μονοπάτι από το u στη ρίζα: Αν ο v (επίπεδο λ) έχει w(v)=(1/4)b λ k-1 τότε συγχώνευσε με αδερφό σε v΄ όπου: Αν w(v΄)≥(7/8)b λ k τότε διασπάμε σε δύο κόμβους με βάρος και Ο αλγόριθμος είναι σωστός Ιδιότητα Βάρους: Ω(b λ k) ενημερώσεις κάτω από τα v΄ και v΄΄ πριν την επόμενη πράξη επαναζύγισης 29
Ανακεφαλαίωση: Βαροζυγισμένο B-δένδρο Βαροζυγισμένο B-δένδρο με παράμετρο διακλάδωσης b και παράμετρο φύλλων k=Ω(B) O(N/B) χώρος Ύψος O(log b N) επαναζυγιστικές πράξεις μετά από ενημέρωση Ω(w(v)) ενημερώσεις κάτω από το v μεταξύ διαδοχικών επαναζυγίσεων στο v Βαροζυγισμένο B-δένδρο με παράμετρο διακλάδωσης B c και παράμετρο φύλλων B Ενημερώσεις σε O(log Β N) και ερωτήσεις σε O(log Β N+Τ/Β) I/Oς Κατασκευή σε I/Oς 30
Διαχρονικό B-δένδρο (Persistence) Σε μερικές εφαρμογές μας ενδιαφέρει η προσπέλαση σε προηγούμενες εκδόσεις της δομής δεδομένων Διαχρονικές Βάσεις Δεδομένων Γεωμετρικές Δομές Δεδομένων (σε λίγο) Μερική Διαχρονικότητα: Ενημερώνουμε τρέχουσα έκδοση (από όπου παίρνουμε την καινούργια έκδοση) Ερωτήσεις σε όλες τις εκδόσεις Μερικώς διαχρονικό B-δένδρο με O(N/B) χώρο – N είναι το πλήθος των ενημερώσεων Ο(log B N) Ι/Ος για ενημέρωση Ο(log B N+Τ/Β) Ι/Ος για ερώτηση σε κάθε έκδοση 31
Μία Εύκολη Λύση Αντιγραφή της δομής σε κάθε πράξη Διατήρηση μίας δομής «προσπέλασης εκδοχών» (B- δένδρο) +: Ο(log B N+Τ/Β) Ι/Ος ερώτηση σε κάθε έκδοση, αλλά O(N/B) I/Oς για ενημέρωση O(N 2 /B) χώρος i i+2 i+1 ενημέρωση i+3 i i+2 i+1 32
Μία πιο Αποδοτική Λύση Ιδέα: Στα στοιχεία προστίθεται και ένα «διάστημα ύπαρξης» και αποθηκεύονται σε μία δομή. Διαχρονικό B-δένδρο με παράμετρο b (>16): Κατευθυνόμενο Γράφημα Οι κόμβοι περιέχουν στοιχεία με διαστήματα ύπαρξης Σε κάθε χρονική στιγμή t, οι κόμβοι με ζωντανά στοιχεία στην t δημιουργούν ένα B-δένδρο ((B/4,B)-δένδρο) B-δένδρο με παράμετρο φύλλων και διακλάδωσης b Αν b=B: Ερώτηση σε κάθε χρονική στιγμή t είναι Ο(log B N+Τ/Β) I/Oς 33
Ενημερώσεις Ενημερώσεις όπως και στο B-δένδρο Για να χρησιμοποιούμε χώρο Ο(Ν/Β) διατηρούμε τον εξής περιορισμό: Κάθε νέος κόμβος περιέχει μεταξύ 3/8Β και 7/8Β ζωντανά στοιχεία και καθόλου νεκρά στοιχεία 34
Ένθεση Εύρεση του φύλλου u και ένθεση του στοιχείου Αν το u περιέχει B+1 στοιχεία: Υπερχείλιση μπλοκ Διάσπαση Εκδοχών: Ο u είναι νεκρός: νέος κόμβος u΄ με x ζωντανά στοιχεία Αν x > 7/8B: Υπερχείλιση Αν x < 3/8B: Υποχείλιση Αν 3/8B x 7/8B τότε αναδρομικά ενημέρωσε parent(u): Διαγραφή δείκτη σε u και ένθεση δείκτη σε u΄ 35 uu΄u΄
Ένθεση Υπερχείλιση (x > 7/8B) Διάσπαση v σε u΄ και u΄΄ με x/2 στοιχεία του καθένα (3/8Β<x/2 1/2B) Αναδρομική ενημέρωση parent(u): Διαγραφή δείκτη σε v και ένθεση δεικτών σε v΄ και v΄΄ Υποχείλιση (x < 3/8B) Συγχώνευση x στοιχείων με y ζωντανά στοιχεία από διάσπαση εκδοχών σε κάποιο αδερφό του (1/2Β x+y 11/8B) Αν x+y 7/8B τότε (υπερχείλιση) διάσπαση σε κόμβους με (x+y)/2 στοιχεία ο καθένας (7/16Β (x+y)/2 11/16B) Αναδρομική ενημέρωση parent(u): Διαγραφή δύο δεικτών και ένθεση ενός/δύο δεικτών 36
Διαγραφή Εύρεση σχετικού φύλλου u, το στοιχείο είναι νεκρό Αν το u περιέχει x < 1/4B ζωντανά στοιχεία: Υποχείλιση μπλοκ Διάσπαση εκδοχής: Το u γίνεται νεκρό: καινούργιος κόμβος u΄ με x ζωντανά στοιχεία Υποχείλιση (x < 3/8B): Συγχώνευση (διάσπαση εκδοχής) και πιθανώς διάσπαση (υπερχείλιση) Αναδρομική ενημέρωση parent(u): Διαγραφή δύο δεικτών και ένθεση ενός/δύο δεικτών 37
Το Διαχρονικό Β-δένδρο Ένθεση Διαγραφή ΟΚ Υπερχείλιση μπλοκ Υποχείλιση μπλοκ ΟΚ Διάσπαση Εκδοχής Υπερχείλιση Υποχείλιση Συγχώνευση Διάσπαση ΟΚ Υπερχείλιση Διάσπαση ΟΚ -1,+1 -1,+2 -2,+2 -2,+1 0,0 38 Διάσπαση Εκδοχής
Απόδοση Ενημέρωση: Ο(log B N) Εύρεση και επαναζύγιση σε μονοπάτι από τη ρίζα σε φύλλο Χώρος: O(N/B) Τουλάχιστον 1/8Β ενημερώσεις σε διάστημα ύπαρξης Όταν ένα φύλλο u γίνεται νεκρό Το πολύ δύο μπλοκ δημιουργούνται Το πολύ ένα μπλοκ θα υπο/υπερχειλίσει ένα επίπεδο πιο πάνω Έπειτα από N ενημερώσεις: Ο(Ν/Β) φύλλα Ο(Ν/Β i ) κόμβοι στο i-οστό επίπεδο μπλοκ 39
Κατασκευή B-δένδρου Στην κύρια μνήμη ταξινομούμε N στοιχεία σε O(N log N) βήματα με ένα δυαδικό δένδρο εύρεσης: Ένθεση όλων των στοιχείων (κατασκευή δένδρου) Με ενδο-διαπέραση, αναφορά όλων των στοιχείων των φύλλων Ο αλγόριθμος αυτός σε B-δένδρο απαιτεί Ο(Νlog B N) I/Oς Μη βέλτιστο κατά Κατασκευή δένδρου από κάτω προς πάνω σε Όμως τι γίνεται με το διαχρονικό δένδρο; Γενικά θα θέλαμε μία δυναμική δομή για χρήση σε αλγόριθμους με απόδοση I/Oς ανά ενημέρωση 40
Ιδέα: Λογικά ομαδοποίησε τους κόμβους και πρόσθεσε ενδιάμεσες μνήμες (buffers) –Οι ενημερώσεις γίνονται με «τεμπέλικο» τρόπο – ενημερώνονται οι Ενδιάμεσες Μνήμες (ΕΜ). –Όταν οι ΕΜ γεμίσουν τα στοιχεία σπρώχνονται ένα επίπεδο παρακάτω. –Άδειασμα ΕΜ σε O(M/B) I/Oς αγγίζουμε κάθε μπλοκ σταθερό αριθμό φορών σε κάθε επίπεδο ένθεση N στοιχείων (N/B μπλοκ) κοστίζει Τεχνική Ενδιάμεσης Μνήμης ΕΜ-Δένδρο (Ενδιάμεσης Μνήμης Δένδρο) B B M στοιχεία βαθμός M/B 41
Ορισμός: B-δένδρο με παράμετρο διακλάδωσης Μ/Β και παράμετρο φύλλων Β ΕΜ μεγέθους M σε κάθε εσωτερικό κόμβο Ενημερώσεις: Πρόσθεσε χρονική ετικέτα για ένθεση/διαγραφή στοιχείου Συλλογή B στοιχείων στην κύρια μνήμη πριν την εισαγωγή του μπλοκ στην ΕΜ της ρίζας Εκτέλεσης αδειάσματος της ΕΜ όταν αυτή είναι γεμάτη Το Βασικό ΕΜ-Δένδρο $m$ blocks M B 42
Το ΕΜ-Δένδρο Παρατήρηση: Η ΕΜ μπορεί να είναι >Μ κατά την διάρκεια αναδρομικών αδειασμάτων ΕΜ. Τα στοιχεία κατανέμονται στα παιδιά ταξινομημένα το πολύ M στοιχεία στην ΕΜ μη-ταξινομημένα Επαναζύγιση όταν η ΕΜ ενός φύλλου αδειάσει Το άδειασμα της ΕΜ ενός φύλλου μόνο όταν όλες οι ΕΜ των εσωτερικών κόμβων είναι άδειες $m$ blocks M B 43
Άδειασμα ΕΜ Εσωτερικών Κόμβων Φέρνουμε τα πρώτα M (μη ταξινομημένα) στην μνήμη και τα ταξινομούμε Συγχωνεύουμε τα στοιχεία της κύριας μνήμης με τα υπόλοιπα (ήδη ταξινομημένα) Διατρέχουμε την λίστα ενώ: Διαγράφουμε «αντίστοιχες» ενθέσεις/διαγραφές Κατανέμουμε τα στοιχεία στις ΕΜ των παιδιών Αναδρομικά αδειάζουμε τις ΕΜ των παιδιών Το άδειασμα της ΕΜ μεγέθους X απαιτεί O(X/B+M/B)=O(X/B) I/Oς $m$ blocks M 44
Άδειασμα ΕΜ Φύλλων Άδειασμα ΕΜ φύλλων με K στοιχεία Ταξινόμηση ΕΜ Συγχώνευση στοιχείων ΕΜ με στοιχεία φύλλου Διαγραφή «αντίστοιχων» ενθέσεων/διαγραφών και έχουμε συνολικά K΄ στοιχεία Αν K΄<K τότε Τα κενά φύλλα τα αφήνουμε ως έχουν Αλλιώς Βάζουμε K στοιχεία στα φύλλα Επαναληπτικά ενθέτουμε ένα μπλοκ στοιχείων στα φύλλα και επαναζυγίζουμε Σβήσιμο κενών φύλλων και επαναζύγιση όταν όλες οι ΕΜ αδειάσουν K 45
Επαναζυγίσεις Περιορισμός: Οι ΕΜ κόμβων στο μονοπάτι από τη ρίζα μέχρι το φύλλο με αδειασμένη ΕΜ είναι άδειες Διασπάσεις όπως στο Β-δένδρο Επαναζύγιση Διαγραφής: η ΕΜ του v΄ αδειάζει πριν την συγχώνευση με το v Σε κάθε διαγραφή άδειου μπλοκ θα πρέπει να γίνεται άδειασμα των ΕΜ Ο περιορισμός διατηρείται v v v΄v΄ v v’ v’’ 46
Απόδοση Χωρίς επαναζυγίσεις, ένα άδειασμα μίας ΕΜ με X ≥ M στοιχεία (πλήρης) απαιτεί O(X/B) I/Oς συνολικά για όλους τους πλήρης κόμβους: Άδειασμα ΕΜ λόγω διαγραφής (όχι πλήρης) απαιτεί O(M/B) I/Oς κόστος διάσπασης/συγχώνευσης O(M/B) I/Oς Κατά τη διάρκεια N ενημερώσεων O(N/B) διασπάσεις/συγχωνεύσεις φύλλων διασπάσεις/συγχωνεύσεις εσωτερικών κόμβων Συνολικό κόστος για N πράξεις: 47
Ταξινόμηση Το άδειασμα όλων των ΕΜ μετά από N ενθέσεις: Το άδειασμα των ΕΜ γίνεται σε BFS σειρά το συνολικό κόστος για πλήρης ΕΜ είναι άδειασμα μη-πλήρης ΕΜ: O(N/B) I/Os N στοιχεία ταξινομούνται σε ΕΜ-δένδρο σε Ι/Ος $m$ blocks M B 48
Μαζικές πράξεις σε B-δένδρα με χρήση ΕΜ μεγέθους M: I/Oς επιμερισμένο κόστος για ενημέρωση Όλες οι ΕΜ αδειάζουν σε I/Os Μονοδιάστατη ερώτηση περιοχής (μαζικές) υποστηρίζονται σε Ι/Ος Οι ερωτήσεις αντιμετωπίζονται τεμπέλικα Όλα τα στοιχεία αναφέρονται κατά το άδειασμα των ΕΜ Άδειασμα ΕΜ σε O(X/B+T΄/B), όπου T΄ είναι το πλήθος των αναφερόμενων στοιχείων Χρησιμοποιώντας ΕΜ τεχνικές κατασκευάζουμε ένα διαχρονικό Β- δένδρο σε I/Oς Ανακεφαλαίωση $m$ blocks 49 Την ίδια τεχνική μπορούμε να εφαρμόσουμε και σε ουρές προτεραιότητας
Ανακεφαλαίωση B-δένδρο O(N/B) χώρος, O(log B N) ενημέρωση, O(log B N+T/B) ερώτηση Βαροζυγισμένο B-δένδρο Ω(w(v)) ενημερώσεις κάτω από το v μεταξύ διαδοχικών πράξεων στο v Διαχρονικό B-δένδρο Ερώτηση σε οποιαδήποτε εκδοχή ΕΜ-δένδρο Μαζικές πράξεις με επιμερισμένο κόστος 50
ΤΈΛΟΣ ΣΤΑ ΔΕΝΔΡΑ 51