Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων κλειδί από ολικά διατεταγμένο σύνολο όπου το κάθε στοιχείο έχει ένα Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου με κλειδί Αναζήτηση στοιχείου με δεδομένο κλειδί Άλλες χρήσιμες λειτουργίες είναι: Διαγραφή ενός καθορισμένου στοιχείου Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί Ταξινόμηση των στοιχείων σύμφωνα με τα κλειδιά τους Εύρεση προκάτοχου ή διάδοχου Ένωση δύο δομών αναζήτησης
Πίνακες Συμβόλων χειρότερη περίπτωση μέση περίπτωση εισαγωγή αναζήτηση εισαγωγή αναζήτηση διατεταγμένος πίνακας διατεταγμένη λίστα μη διατεταγμένος πίνακας μη διατεταγμένη λίστα δένδρο δυαδικής αναζήτησης τυχαιοποιημένο δένδρο δένδρο κόκκινου-μαύρου κατακερματισμός (*) Συμβαίνει με εξαιρετικά μικρή πιθανότητα Με δυαδική αναζήτηση
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. root 17 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Αν δεν υπάρχει πρόβλημα αποθηκευτικού χώρου που διατίθεται για το δένδρο τότε μπορούμε να έχουμε σε κάθε κόμβο ένα δείκτη προς το γονέα του. Αυτό απλοποιεί την υλοποίηση ορισμένων λειτουργιών. root 17 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 15<17 17 Αναζήτηση 15 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 15>14 17 14 21 Αναζήτηση 15 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Αναζήτηση 15 14 21 15<16 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Αναζήτηση 15 14 21 15=15 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. Εισαγωγή νέου στοιχείου με κλειδί (που δεν υπάρχει ήδη στο δένδρο) Αναζητούμε το κλειδί στο δένδρο και βρίσκουμε τον κόμβο h που είναι γονέας του κενού κόμβου στον οποίο καταλήγει η αναζήτηση Δημιουργούμε νέο κόμβο x με κενά παιδιά και αποθηκεύουμε το νέο στοιχείο στον x Aν ο h δεν υπάρχει τότε θέτουμε root=x Διαφορετικά, κάνουμε τον x αριστερό παιδί του h αν η αναζήτηση ακολούθησε τον αριστερό σύνδεσμο του h. Διαφορετικά κάνουμε τον x δεξί παιδί του h
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 13<17 17 Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 13<14 17 Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Εισαγωγή 13 13> 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Εισαγωγή 13 14 21 13>12 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3 13
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Εισαγωγή 11 14 21 16 19 23 7 12 15 20 3 11 13
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 13 14 21 16 19 23 7 12 15 20 3 13
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 13 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 7 14 21 16 19 23 7 12 15 20 3
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 7 14 21 16 19 23 3 12 15 20
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου.? 17 Διαγραφή 14 14 21 16 19 23 3 12 15 20
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. Αντιγράφουμε το κλειδί του διάδοχου κόμβου 17 Διαγραφή 14 14 21 16 19 23 3 12 15 20
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 14 15 21 16 19 23 3 12 15 20 Διαγράφουμε τον διάδοχο κόμβο
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 Διαγραφή 14 15 21 16 19 23 3 12 20
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. Διαγραφή κόμβου x Αν ο x έχει κενό παιδί τότε θέτουμε z=x, διαφορετικά θέτουμε z = διάδοχος του x. Αν ο z είναι διαφορετικός από τον x τότε αντιγράφουμε τα δεδομένα του z στον x. Αν ο z έχει κενό δεξί παιδί τότε θέτουμε y=z->l, διαφορετικά θέτουμε y=z->r. Αν ο z δεν έχει γονέα τότε θέτουμε root=y. Διαφορετικά έστω w ο γονέας του z. Αν ο z είναι αριστερό παιδί (w->l==z) τότε κάνουμε τον y αριστερό παιδί του w, και αν ο z είναι δεξί παιδί (w->r==z) τότε κάνουμε τον y αριστερό παιδί του w
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. x 17 Διαγραφή x 11 21 w = γονέας του z 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. αντιγράφουμε τα περιεχόμενα του z στον x x 17 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. θέτουμε τον y ως αριστερό παιδί του w x 17 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. διαγράφουμε τον z x 17 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x
Δυαδικό Δένδρο Αναζήτησης Το κλειδί οποιουδήποτε εσωτερικού κόμβου είναι μεγαλύτερο (ή ίσο) από όλα τα κλειδιά του αριστερού υποδένδρου και μικρότερο (ή ίσο) από όλα τα κλειδιά του δεξιού υποδένδρου. 17 12 21 8 16 19 23 7 9 13 20 3
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8 8
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6 8 6
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17 8 17 6
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12 8 17 6 12
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12, 13 8 17 6 12 13
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12, 13, 4 8 17 6 12 4 13
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12, 13, 4, 7 8 17 6 12 4 7 13
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12, 13, 4, 7, 15 8 17 6 12 4 7 13 15
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή, 8, 6, 17, 12, 13, 4, 7, 15, 21 8 17 6 12 21 4 7 13 15
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή 14, 8, 17, 6, 12, 15, 21, 4, 7,, 13 14 8 17 6 12 15 21 4 7 13
Δυαδικό Δένδρο Αναζήτησης Εισαγωγή 4 4, 6, 7, 8,, 12, 13, 14, 15, 17, 21 6 7 8 12 13 14 15 17 21
Ισορροπημένα Δένδρα Μπορούμε να επιτύχουμε για κάθε λειτουργία; χρόνο εκτέλεσης Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή μετά από
Περιστροφές x αριστερή περιστροφή από το x y α β y γ δεξιά περιστροφή από το y α x β γ link rotl(link x) { link y = x->r; x->r = y->l; y->l = x; return y; } αριστερή περιστροφή Η περιστροφή παίρνει χρόνο Ο(1) link rotr(link y) { link x = y->l; y->l = x->r; x->r = y; return x; } δεξιά περιστροφή
Περιστροφές 17 14 21 16 19 23 7 12 15 20 3 17 δεξιά περιστροφή από το 14 21 7 14 19 23 3 12 16 20 15
Ισορροπημένα Δένδρα Μερικοί τύποι ισορροπημένων δένδρων Τυχαιοποιημένα δένδρα Αρθρωτά δένδρα (splay trees) (*) Δένδρα AVL Κοκκινόμαυρα δένδρα (a,b) δένδρα Όλα τα παραπάνω χρησιμοποιούν περιστροφές για να παραμείνουν ισορροπημένα (*) Τα αρθρωτά δένδρα είναι ισορροπημένα κατά «αντισταθμιστική» έννοια
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. DEMO : http://aleph0.clarku.edu/~achou/cs2/examples/bst_animation/splaytree-example.html
Εισαγωγή 1,2,3,4,5,6,7,8 8 7 6 5 4 3 2 1
splay(1) 8 8 8 7 7 7 6 6 6 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
splay(1) (συνέχεια) 8 8 7 1 6 6 1 4 2 4 5 7 2 5 3 3
splay(1) (συνέχεια) 8 1 1 8 6 6 4 7 4 7 2 5 2 5 3 3
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. splay(x) Περίπτωση zig-zig: από τον παππού του x ακολουθούμε δύο αριστερούς ή δύο δεξιούς συνδέσμους για να πάμε στο x z x x y C D A B y z A B C D
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. splay(x) Περίπτωση zig-zig: από τον παππού του x ακολουθούμε δύο αριστερούς ή δύο δεξιούς συνδέσμους για να πάμε στο x. Προσοχή στη σειρά των περιστροφών! 1 z 2 y x x y C D A x z B C D A B y z A B C D
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. splay(x) Περίπτωση zig-zag: από τον παππού του x ακολουθούμε πρώτα έναν αριστερό και μετά ένα δεξιό σύνδεσμο ή πρώτα έναν δεξιό και μετά ένα αριστερό σύνδεσμο για να πάμε στο x z x A y x D A y B C z D B C
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. splay(x) Περίπτωση zig-zag: από τον παππού του x ακολουθούμε πρώτα έναν αριστερό και μετά ένα δεξιό σύνδεσμο ή πρώτα έναν δεξιό και μετά ένα αριστερό σύνδεσμο για να πάμε στο x z 2 z x A y x 1 D y x C D A y B C z D B C A B
Εκτελεί όλες τις πράξεις στη ρίζα του δένδρου. Χρησιμοποιεί ζεύγη περιστροφών καθώς μετακινεί ένα κλειδί στη ρίζα (λειτουργία splay) για να φέρει το δένδρο σε μεγαλύτερη ισορροπία. splay(x) Αν ο πατέρας του x είναι η ρίζα τότε εκτελούμε μια απλή περιστροφή y x x C A y A B B C
splay(19) 5 12 3 7 15 8 16 22 zig-zag 18 25 19
splay(19) (συνέχεια) 5 12 3 7 15 8 16 μετά το zig-zag 18 19 22 23
splay(19) (συνέχεια) 5 12 3 7 15 8 16 19 18 22 23
splay(19) (συνέχεια) 5 12 3 7 8 15 16 zig-zig 19 18 22 23
splay(19) (συνέχεια) 5 12 3 7 19 8 μετά το zig-zig 15 16 22 18 23
splay(19) (συνέχεια) 5 12 3 7 19 8 16 22 15 18 23
splay(19) (συνέχεια) 5 12 zig-zig 3 7 19 8 16 22 15 18 23
splay(19) (συνέχεια) 19 μετά το zig-zig 12 22 16 23 5 15 18 3 7 8
splay(19) (συνέχεια) 19 12 22 16 23 5 15 18 3 7 8
Όλες οι λειτουργίες (αναζήτηση, εισαγωγή, διαγραφή) βασίζονται στη splay Αναζήτηση στοιχείου με κλειδί Βρίσκουμε τον τελευταίο μη κενό κόμβο x στο μονοπάτι αναζήτησης του από τη ρίζα όπως στην αναζήτηση σε απλό δυαδικό δένδρο. (Αν το κλειδί είναι αποθηκευμένο στο δένδρο τότε ο x έχει κλειδί.) Εκτελούμε splay(x) Επιστρέφουμε το στοιχείο της ρίζας
Αναζήτηση 4 19 12 22 16 23 2 4 splay 15 18
Αναζήτηση 4 4 2 12 19 22 16 23 15 18
Όλες οι λειτουργίες (αναζήτηση, εισαγωγή, διαγραφή) βασίζονται στη splay Εισαγωγή στοιχείου με κλειδί Εκτελούμε τα βήματα της εισαγωγής όπως στο απλό δυαδικό δένδρο. Έστω x ο νέος κόμβος που αποθηκεύει το στοιχείο με κλειδί Εκτελούμε splay(x)
Εισαγωγή 4 19 12 22 16 23 2 15 18
Εισαγωγή 4 19 12 22 16 23 2 4 splay 15 18
Εισαγωγή 4 4 2 12 19 22 16 23 15 18
Όλες οι λειτουργίες (αναζήτηση, εισαγωγή, διαγραφή) βασίζονται στη splay Διαγραφή κόμβου x Εκτελούμε τα βήματα της εισαγωγής όπως στο απλό δυαδικό δένδρο. Έστω z ο κόμβος που διαγράφεται. (Αν ο x έχει κενό παιδί τότε z=x, διαφορετικά o z είναι ο διάδοχος του x.) Έστω w ο γονέας του z. Εκτελούμε splay(w)
Διαγραφή x x 19 12 22 w 16 23 2 z 15 18
Διαγραφή x 19 15 22 w 16 23 2 z 15 18
Διαγραφή x 19 15 22 w 16 23 2 18
Διαγραφή x 19 15 22 w 16 splay(w) 23 2 18
Διαγραφή x w 16 15 19 18 22 2 23
Ιδιότητες Έστω ότι εκτελούμε λειτουργίες σε αρχικά κενό αρθρωτό δένδρο, όπου κάθε λειτουργία είναι αναζήτηση, εισαγωγή ή διαγραφή. Έστω ο συνολικός αριθμός εισαγωγών. Τότε ισχύουν οι παρακάτω ιδιότητες : Ο συνολικός χρόνος εκτέλεσης όλων των λειτουργιών είναι αντισταθμιστικός χρόνος ανά λειτουργία Έστω ο αριθμός των προσπελάσεων που γίνονται στο κλειδί. Αν κάθε κλειδί προσπελαύνεται τουλάχιστον μία φορά, τότε ο συνολικός χρόνος εκτέλεσης μιας ακολουθίας προσπελάσεων είναι
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Θα χρησιμοποιήσουμε την ενεργειακή μέθοδο. Έστω απογόνων του κόμβου στο αρθρωτό δένδρο. το πλήθος των Ορίζουμε την «τάξη» του ως e d i b f j a c g h
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Θα χρησιμοποιήσουμε την ενεργειακή μέθοδο. Έστω απογόνων του κόμβου στο αρθρωτό δένδρο. το πλήθος των Ορίζουμε την «τάξη» του ως e 3 2 d i 2 1 b 1 f j 0 0 a c 0 g 1 h 0
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Θα χρησιμοποιήσουμε την ενεργειακή μέθοδο. Έστω απογόνων του κόμβου στο αρθρωτό δένδρο. το πλήθος των Ορίζουμε την «τάξη» του ως Δυναμικό δένδρου e 3 2 d i 2 1 b 1 f j 0 0 a c 0 g 1 h 0
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Θα χρησιμοποιήσουμε την ενεργειακή μέθοδο. Έστω απογόνων του κόμβου στο αρθρωτό δένδρο. το πλήθος των Ορίζουμε την «τάξη» του ως Δυναμικό δένδρου : Αναλύουμε την επίδραση του κάθε βήματος περιστροφών στο δυναμικό του δένδρου Παρατηρούμε ότι σε κάθε περίπτωση αλλάζει η τάξη δύο ή τριών κόμβων ( και ) z z y x y C D A y x D A x B C A B B C
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Θα χρησιμοποιήσουμε την ενεργειακή μέθοδο. Έστω απογόνων του κόμβου στο αρθρωτό δένδρο. το πλήθος των Ορίζουμε την «τάξη» του ως Δυναμικό δένδρου : Ας αναλύσουμε την περίπτωση zig-zig x y C z D A x B y z A B C D Έστω και οι τιμές μετά τη διπλή περιστροφή Ισχύουν και
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο Ας αναλύσουμε την περίπτωση zig-zig y x z D A C x y B z A B C D Ισχύουν και
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο Ας αναλύσουμε την περίπτωση zig-zig y x z D A C x y B z A B C D Ισχύουν και Επιπλέον
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο Ας αναλύσουμε την περίπτωση zig-zig y x z D A C x y B z A B C D Ισχύουν και Επιπλέον
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο Ας αναλύσουμε την περίπτωση zig-zig y x z D A C x y B z A B C D Ισχύουν και
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο Ας αναλύσουμε την περίπτωση zig-zig y x z D A C x y B z A B C D Άρα Πραγματικό κόστος περιστροφών Αντισταθμιστικό κόστος περιστροφών
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο z x Ομοίως αναλύεται η περίπτωση zig-zag A y x D A y B C z D B C Άρα Πραγματικό κόστος περιστροφών Αντισταθμιστικό κόστος περιστροφών
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο y x Τερματική περίπτωση x C A y A B B C Ισχύουν και
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο y x Τερματική περίπτωση x C A y A B B C Ισχύουν και
Ιδιότητα: Σε ένα αρθρωτό δένδρο με κόμβους η λειτουργία splay εκτελείται σε αντισταθμιστικό χρόνο y x Τερματική περίπτωση x C A y A B B C Άρα Πραγματικό κόστος περιστροφών Αντισταθμιστικό κόστος περιστροφών
Ιδιότητα: Σε ένα αρθρωτό δένδρο με αντισταθμιστικό χρόνο κόμβους η λειτουργία splay εκτελείται σε Έστω λοιπόν ότι η λειτουργιά splay πραγματοποιείται σε βήματα Έστω και οι τιμές μετά τo i-οστό βήμα Το συνολικό αντισταθμιστικό κόστος είναι
Γενίκευση : Βάρη στους κόμβους Έστω ότι δίνουμε ένα βάρος σε κάθε κόμβο του αρθρωτού δένδρου απόγονοι του (συμπεριλαμβανομένου του ) στο συνολικό βάρος των απογόνων του Δυναμικό δένδρου : Ιδιότητα: Η λειτουργία splay(x) εκτελείται σε χρόνο, όπου η ρίζα του αρθρωτού δένδρου. αντισταθμιστικό
Λήμμα Προσπέλασης Η λειτουργία splay(x) εκτελείται σε η ρίζα του αρθρωτού δένδρου. αντισταθμιστικό χρόνο, όπου Στατικά Βέλτιστη Προσπέλαση Έστω ο αριθμός των προσπελάσεων που γίνονται στο κλειδί. Αν κάθε κλειδί προσπελαύνεται τουλάχιστον μία φορά, τότε ο συνολικός χρόνος εκτέλεσης μιας ακολουθίας προσπελάσεων είναι Συνεπάγεται από το λήμμα προσπέλασης για και ο αντισταθμιστικός χρόνος προσπέλασης του κλειδιού είναι. Έχουμε Η συνολική μεταβολή του δυναμικού της δομής είναι
Λήμμα Στατικού Σελιδοδείκτη Έστω ένα σταθερό κλειδί. Τότε, ο συνολικός χρόνος εκτέλεσης μιας ακολουθίας προσπελάσεων είναι όπου η απόσταση των κλειδιών και στη διατεταγμένη ακολουθία των κλειδιών του αρθρωτού δένδρου. Συνεπάγεται από το λήμμα προσπέλασης θέτοντας για το βάρος του κλειδιού. Τότε και ο αντισταθμιστικός χρόνος της j-οστής προσπέλασης είναι Η συνολική μεταβολή του δυναμικού της δομής είναι
Λήμμα Συνόλου Εργασίας Έστω μια ακολουθία προσπελάσεων. Έστω ο αριθμός των διαφορετικών κλειδιών που προσπελάστηκαν πριν την j-οστή προσπέλαση μέχρι την τελευταία προσπέλαση του. Τότε, ο συνολικός χρόνος εκτέλεσης της ακολουθίας προσπελάσεων είναι Δίνουμε τα βάρη στα κλειδιά με τη σειρά ως προς την πρώτη προσπέλαση τους. (Το κλειδί που προσπελάστηκε πρώτο λαμβάνει το μεγαλύτερο βάρος.) Μετά την j-οστή προσπέλαση αλλάζουμε την κατανομή βαρών ως εξής: Έστω το βάρος του κατά την j-οστή προσπέλαση. Μετά την προσπέλαση δίνουμε στο βάρος 1, και σε κάθε κλειδί με βάρος, όπου, ορίζουμε το νέο βάρος του ως. Άρα, κατά την j-οστή προσπέλαση έχουμε