Advanced Data Indexing (Προηγμένη ευρετηρίαση δεδομένων) Αναζήτηση Δέντρα ( ο Μέρος)
Αναζήτηση (Searching)
Η Αναζήτηση Searching (Αναζήτηση) ενός αντικειμένου μέσα από N ταξινομημένα αντικείμενα. Είναι στοιχειώδης διαδικασία, πού σημαντική σχεδόν σε όα τα προβήματα που αφορούν δεδομένα. Προϋποθέτει τα αντικείμενα να είναι ταξινομημένα αν θέουμε να έχουμε την βέτιστη πουποκότητα: Search(N) = Θ(log B N) Στην κύρια μνήμη ή (D=) Search(N) = Θ(log DB N) Στο μοντέο PDM (D>)
Η Αναζήτηση απαιτεί Δομές Για να υποστηριχθεί η αποδοτική αναζήτηση (ογαριθμική πουποκότητα) απαιτείται η χρήση δομών-ευρετηρίων (indexing) πάνω στα ταξινομημένα δεδομένα. Οι δομές αυτές πρέπει να είναι κατάηες ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά:. Εύρεση (find) ενός στοιχείου στο σύνοο. 2. Ένθεση (insert) ενός νέου στοιχείου στο σύνοο. 3. Διαγραφή (delete) ενός υπάρχοντος στοιχείου από το σύνοο. Απαραίτητη προϋπόθεση για τις πράξεις insert, delete είναι τα δεδομένα μετά από αυτές να παραμένουν ταξινομημένα.
Τι είδους Δομές; Ποές φορές απαιτείται ο σχεδιασμός δομών ανάογα:. Με το είδος των δεδομένων [π.χ. αριθμητικά, κειμένου (εξικά), χωρικά, πουμεσικά, κπ.] 2. Με το είδος των ερωτημάτων που θέουμε να υποστηριχθούν [π.χ. simple find queries, nearestneighor queries, range queries, top- queries, κπ.] Διατηρούν τα στοιχεία ταξινομημένα, οπότε υποστηρίζουν range queries Κατακερματισμός Δέντρα
Δέντρα Αναζήτησης Εσωτερικής Μνήμης Δυαδικό Δέντρο Αναζήτησης (Binary Tree): Υποθέτουμε ότι τα στοιχεία είναι στα φύα. Η εύρεση (απή αναζήτηση ενός στοιχείου) γίνεται διασχίζοντας ένα μονοπάτι από τη ρίζα μέχρι το φύο που βρίσκεται: Ο(log 2 N) Συνεπώς η εύρεση γίνεται σε Ο(log 2 N) χρόνο. Το δέντρο όμως πρέπει να είναι ισοζυγισμένο. Για να διατηρηθεί έτσι χρειάζονται ειδικοί αγόριθμοι κατά την εισαγωγή και την διαγραφή στοιχείων.
Δέντρα Αναζήτησης Εσωτερικής Μνήμης Αν τα στοιχεία στα φύα είναι και μεταξύ τους συνδεδεμένα, τότε μπορούμε να υποστηρίξουμε εύρεση επομένου ή προηγουμένου καθώς και ερωτήματα περιοχής (range queries): Ο(log 2 N) Γίνεται η εύρεση των δύο άκρων με απή αναζήτηση. Διασχίζουμε την συνδεδεμένη ίστα των φύων ανάμεσα στα δύο άκρα. Συνοικό κόστος: Ο(Ζ+2log 2 N)= Ο(Ζ+log 2 N) Ζ
Δένδρα Αναζήτησης Εξωτερικής Μνήμης Το δέντρο είναι αποθηκευμένο σε πήθος μποκ μεγέθους Β. Στο μέγεθος ενός μποκ Β χωράει ένα σταθερό πήθος κόμβων (είτε εσωτερικών είτε φύων). Για να εκμεταευτούμε την τοπικότητα θα πρέπει στο ίδιο μποκ να είναι αποθηκευμένοι γειτονικοί κόμβοι του δέντρου. Εφόσον διαβάζονται και γράφονται οόκηρα μποκ, στο κόστος μετράει και το ύψος του δέντρου ως προς τα μποκ. Θ(B)
Δένδρα Αναζήτησης Εξωτερικής Μνήμης Ο(log 2 B) Ο(log 2 N) Ζ Θ(B) Το ύψος του δέντρου ως προς τα μποκ είναι: Ο(log 2 N)/Ο(log 2 B)=O(log B N) Τα κειδιά των Z αντικειμένων που επιστρέφονται ως απάντηση σε ένα ερώτημα εξάγονται επίσης σε πήθος μποκ. I/O κόστος ερωτημάτων αναζήτησης (search): O(log B N) [Βέτιστο] I/O κόστος ερωτημάτων περιοχής (range): O(log B N + Z/Β) [Βέτιστο] Απαιτούμενος χώρος (ισοζυγισμένο): O(N/B) [Βέτιστος]
Δένδρα Αναζήτησης Εξωτερικής Μνήμης Για να διατηρηθεί η τοπικότητα πρέπει να διατηρηθεί η σειρά των κατά πάτους μποκ (BFS) σε ενημερώσεις (insert, delete, update) Μία τεχνική είναι η επαναζύγιση με περιστροφές: x y y x Φαίνεται δύσκοο να διατηρηθεί το BFS κατά την περιστροφή! Αν μάιστα έχουμε συχνές ενημερώσεις που προκαούν επαναζυγίσεις σε μεγάο ποσοστό, συμφέρει καύτερα να κτίσουμε όο το δέντρο από την αρχή! (Bulload)
Δένδρα Αναζήτησης Εξωτερικής Μνήμης Επίσης συμφέρει τα μποκ κατά BFS να αντιστοιχούν σε δέντρο με βαθμό Θ(B) Β-Δέντρα Αν επιτρέψουμε την διακύμανση του βαθμού θα πετύχουμε πιο αποδοτική επαναζύγιση (διάσπαση, συγχώνευση, διαμοίραση) (α,)-δέντρα
(α,)-δέντρα Τα Β-Δέντρα είναι ειδική περίπτωση μίας γενικότερης ομάδας δέντρων τα (a,)-δέντρα. Ένα Δέντρο T είναι (a,)-δέντρο (a 2 και 2a-) όταν: Όα τα φύα του Τ είναι στο ίδιο επίπεδο και περιέχουν από a έως στοιχεία (min=a, max=) Εκτός της ρίζας, όοι οι κόμβοι έχουν βαθμό μεταξύ a και Η ρίζα έχει βαθμό μεταξύ 2 και και περιέχει από ως - στοιχεία. (2,) δέντρο
(α,)-δέντρα Συνήθως τα N στοιχεία είναι αποθηκευμένα μόνο στα φύα, ενώ οι εσωτερικοί κόμβοι χρησιμοποιούνται βοηθητικά για να καθοδηγούν τα μονοπάτια των αναζητήσεων. Έτσι το (a,)-δέντρο χρησιμοποιεί γραμμικό χώρο: O(N/B) και έχει ύψος Ο(log α Ν). Αν επιέξουμε a, = Θ(Β) [Β-Δέντρα] τότε θα έχουμε ύψος ως προς μποκ: Ο(log α N)/Ο(log α B)=O(log B N). Συνεπώς: I/O κόστος ερωτημάτων αναζήτησης (search): O(log B N)
(α,)-δέντρα Στα ερωτήματα περιοχής (διάστημα [q, q 2 ]) εντοπίζονται τα άκρα q, q 2 σε O(log B N) και διασχίζονται τα φύα που πάι είναι συνδεδεμένα μεταξύ τους σε σειρά. Αν Ζ τα στοιχεία στο [q, q 2 ]: I/O κόστος ερωτημάτων περιοχής: O(log B N + Z/Β) q q 2 Ζ
Ένθεση ενός Στοιχείου Βρίσκεται και εισάγεται το νέο στοιχείο στο φύο που αντιστοιχεί (v) Αν το v φτάσει τα + στοιχεία/παιδιά τότε διασπάται (split) σε δύο νέα φύα v, v με + και + a στοιχεία. Στον πατέρα του v διαγράφεται ο δείκτης για τον v και προστίθενται οι δείκτες για τους v, v. Αν και ο πατέρας του v φτάσει τα + στοιχειά διασπάται ομοίως. 2 Συνεχίζεται ο έεγχος αναδρομικά προς τα πάνω μέχρι και την ρίζα (αν χρειαστεί). 2 + v v v + + 2 Κόστος: O(log α N) 2
Διαγραφή ενός Στοιχείου Βρίσκεται και διαγράφεται το στοιχείο από το φύο που αντιστοιχεί (v) Αν το v φτάσει τα α- στοιχεία/παιδιά τότε συγχωνεύεται (fuse) με έναν αδερφό του v. Μετακινούνται όα τα στοιχεία του v στον v. Διαγράφεται ο δείκτης για τον v. Αν ο v έχει > (και <a-+<2) στοιχεία/ παιδιά τότε διασπάται (split). Συνεχίζεται ο έεγχος αναδρομικά προς τα πάνω μέχρι και την ρίζα (αν χρειαστεί). v a v v 2a Κόστος: O(log α N)
Άες Ιδιότητες των (α,)-δέντρων Αν =2a- κάθε ενημέρωση προκαεί ποές επαναζυγίσεις: O(log a N) διαγραφή ένθεση (2,3)-δένδρο Το χειρότερο αυτό κόστος επιτυγχάνεται αν γίνεται εισαγωγή και διαγραφή του ίδιου στοιχείου διαδοχικά. Αν 2a οι ενημερώσεις προκαούν επιμερισμένες επαναζυγίσεις: O( loga N) a
B-Δέντρα B-Δέντρα είναι απά (a,)-δέντρα όπου a, = Θ(Β). Απαιτούμενος χώρος: O(N/B) I/O κόστος ερωτημάτων αναζήτησης (search): O(log B N) I/O κόστος ερωτημάτων περιοχής (range): O(log B N+Z/B) B + -Δέντρα είναι τα B-Δέντρα που τα στοιχεία τους είναι αποθηκευμένα μόνο στα φύα, ενώ οι εσωτερικοί κόμβοι χρησιμοποιούνται βοηθητικά για να καθοδηγούν τα μονοπάτια των αναζητήσεων.
Κατασκευή B-Δέντρων Μέθοδος Insertion-Load: Τα N στοιχεία εισέρχονται ένα-ένα χωρίς κάποια διατεταγμένη σειρά απαραίτητα. I/O Κόστος κατασκευής: O(Nlog B N) Μέθοδος Bul-Load: Ταξινομούνται όα τα N στοιχεία στην δευτερεύουσα μνήμη. Κατασκευάζονται τα φύα συνδέοντας τα ταξινομημένα στοιχεία. Χτίζεται το δένδρο από κάτω προς τα πάνω (ανά επίπεδο). I/O Κόστος κατασκευής: Θ N log N ) ( B M B B
Παραδείγματα Insertion Load και ειτουργία του B + -Tree με επτομέρειες υοποίησης (Διαφάνειες). Γιατί δεν συμφέρει το Insertion Load σε ήδη ταξινομημένα δεδομένα (Προσομοιωτής). Εισαγωγές, διαγραφές, διασπάσεις, συγχωνεύσεις, επαναζυγίσεις σε B + -Tree (Προσομοιωτής). https://www.cs.usfca.edu/~galles/visualization/ BPlusTree.html (University of San Francisco)
B-Δέντρα παρααγές των (α,) B-Δέντρο με παράμετρο διακάδωσης (ranching factor) και παράμετρο φύων (, 8): Όα τα φύα είναι στο ίδιο επίπεδο και περιέχουν από / έως στοιχεία. Εκτός της ρίζας, όοι οι κόμβοι έχουν βαθμό μεταξύ / και. Η ρίζα έχει βαθμό μεταξύ 2 και. B-Δέντρο με παράμετρο φύων =Ω(Β): Χρησιμοποιεί O(N/B) χώρο. Έχει ύψος Ο(log (N/B)). Κάνει Ο((/())log (N/B)) επιμερισμένες επαναζυγίσεις (split/fuse) εσωτερικών κόμβων. N Το I/O κόστος κατασκευής του (ul-load) είναι: Θ( N B log M ) B-Δέντρο με παράμετρο διακάδωσης Θ(B c B B ), 0<c, και παράμετρο φύων Θ(B): Χρησιμοποιεί O(N/B) χώρο. Έχει I/O κόστος ενημερώσεων/αναζητήσεων: Ο(log B cn) =Ο(log B N). Έχει I/O κόστος ερωτημάτων περιοχής: Ο(log B N+Z/Β).
Η ανάγκη προσθήκης βαρών Όταν δευτερεύουσες δομές ή πράξεις είναι συνδεδεμένες με τους εσωτερικούς κόμβους, τότε δεν πρέπει να γίνονται συχνά επαναζυγίσεις στους πιο σημαντικούς. Το βάρος w(v) ενός κόμβου v ορίζεται ως το πήθος όων των στοιχείων που περιαμβάνονται σε όα τα φύα του υπόδεντρού του. Είναι χρήσιμο ένα δέντρο στο οποίο κάθε κόμβος v με βάρος w(v) συμμετέχει σε μία μόνο πράξη επαναζύγισης για κάθε Ω(w(v)) ενημερώσεις που γίνονται κάτω από αυτόν. Οι κόμβοι των (α,)-δέντρων και κατά συνέπεια και των Β-Δέντρων δεν έχουν αυτή την ιδιότητα. (2,)-δένδρο
Βαροζυγισμένα B-Δέντρα Βασική Ιδέα: Τοποθετούνται Περιορισμοί Βάρους στους κόμβους. Είναι καύτερα ζυγισμένα από τα B-Δέντρα μετά από επαναζυγίσεις όγω διασπάσεων συγχωνεύσεων και ενημερώσεων. Βαροζυγισμένο B-Δέντρο με παράμετρο διακάδωσης και παράμετρο φύων ( 8, 8) είναι το B-Δέντρο όπου: Όα τα φύα είναι στο ίδιο επίπεδο (level-0) και κάθε φύο v έχει βάρος: / w(v). Κάθε εσωτερικός κόμβος v στο επίπεδο έχει βάρος: w(v). Εκτός της ρίζας, κάθε εσωτερικός κόμβος v στο επίπεδο έχει βάρος: w(v) (/). Η ρίζα έχει περισσότερα από ένα παιδιά....... Επίπεδο Επίπεδο -
Βαροζυγισμένα B-Δέντρα Οι περιορισμοί στους κόμβους από τα βάρη στην πραγματικότητα προκαούν περιορισμούς και στον βαθμό τους (όπως έχουμε και στα απά Β-Δέντρα): Εάχιστος Βαθμός: Μέγιστος Βαθμός: / = / = Συνεπώς, κάθε βαροζυγισμένο δέντρο έχει ύψος: O(log N )... Επίπεδο... Επίπεδο -
Ένθεση Στοιχείου Εύρεση κατάηου φύου u και ένθεση του νέου στοιχείου. Έεγχος βαρών στο μονοπάτι από το u μέχρι τη ρίζα: Αν ο κόμβος v στο επίπεδο έχει w(v)= + τότε διασπάται σε v και v με ιδανικά βάρη: + w( v') = ( + ) w( v'') = 2 ( + ) 2... Επειδή όμως είναι απίθανο να πετύχουμε επαναζυγίσεις με ιδανικά βάρη μπορούμε πάντα να επιέξουμε κατάηο πήθος παιδιών στη μοιρασιά στους v και v ώστε τα βάρη τους να κυμαίνονται από: 3 μέχρι 2 > 8 + 5 2 + 8 + < και να διατηρηθούν έτσι οι ιδιότητες του δέντρου. Αυτό συμβαίνει καθώς οι κόμβοι του επιπέδου (-) έχουν το πού βάρος: αφού 8. 8... + +
Ένθεση Στοιχείου Με τον τρόπο αυτό απαιτούνται Ω( ) ενημερώσεις κάτω από τους κόμβους v και v μέχρι την επόμενη πράξη επαναζύγισης. Πιο συγκεκριμένα απαιτούνται: 8 + διαγραφές ή 3 8 ενθέσεις κάτω από αυτούς.... + + +...
Διαγραφή Στοιχείου...... + + Εύρεση κατάηου φύου u και διαγραφή του στοιχείου. Έεγχος βαρών στο μονοπάτι από το u μέχρι τη ρίζα: Αν ο κόμβος v στο επίπεδο έχει w(v)=(/) - τότε συγχωνεύεται με έναν αδερφό του. Ο τεικός κόμβος, έστω v, θα έχει βάρος: Αν w(v ) (7/8) τότε διασπάμε σε δύο κόμβους (share) με κατάηη μοιρασιά ώστε τα βάρη να κυμαίνονται από: μέχρι και να διατηρηθούν έτσι οι ιδιότητες του δέντρου. ') ( ') ( 5 2 + + w v w v 6 5 6 7 > < + 8 6 8 5
Διαγραφή Στοιχείου Με τον τρόπο αυτό πάι απαιτούνται Ω( ) ενημερώσεις μέχρι την επόμενη πράξη επαναζύγισης. Πιο συγκεκριμένα απαιτούνται: 8 + ενθέσεις ή 6 διαγραφές κάτω από αυτούς.... + +...
Βαροζυγισμένα B-Δέντρα στη δευτερεύουσα μνήμη Βαροζυγισμένο B-Δέντρο με παράμετρο διακάδωσης και παράμετρο φύων =Ω(B): Χρησιμοποιεί γραμμικό χώρο: O(N/B). Έχει ύψος: Ο(log (N/B)). Απαιτεί O(log (N/B)) επαναζυγιστικές πράξεις (splits/fuses) μετά από κάποια ενημέρωση. Μεταξύ δύο διαδοχικών επαναζυγίσεων σε έναν κόμβο v απαιτούνται το ιγότερο Ω(w(v)) ενημερώσεις. N Το I/O κόστος κατασκευής του (ul-load) είναι: Θ( N B log M ) B B Έχει I/O κόστος ενημερώσεων/αναζητήσεων: Ο(log (N/B)). Έχει I/O κόστος ερωτημάτων περιοχής: Ο(log (N/B)+Z/Β).
Βαροζυγισμένα B-Δέντρα στη δευτερεύουσα μνήμη Βαροζυγισμένο B-Δέντρο με παράμετρο διακάδωσης =Θ(B c ), 0<c, και παράμετρο φύων =Θ(B), (π.χ. =B/, =B): Χρησιμοποιεί γραμμικό χώρο: O(N/B). Έχει ύψος: Ο(log B N). Απαιτεί O(log B N) επαναζυγιστικές πράξεις (splits/fuses) μετά από κάποια ενημέρωση. Μεταξύ δύο διαδοχικών επαναζυγίσεων σε έναν κόμβο v απαιτούνται το ιγότερο Ω(w(v)) ενημερώσεις. Το I/O κόστος κατασκευής του (ul-load) είναι: Θ N log M Έχει I/O κόστος ενημερώσεων/αναζητήσεων: Ο(log B N). Έχει I/O κόστος ερωτημάτων περιοχής: Ο(log B N+Z/Β). N ( B B B )
ΤΕΛΟΣ 3