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

Σχετικά έγγραφα
Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Δέντρα Δυαδικής Αναζήτησης Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

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

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 5 ΥΝΑΜΙΚΑ ΛΕΞΙΚΑ ΙΣΟΖΥΓΙΣΜΕΝΑ ΕΝ ΡΑ

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

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

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

Λίστες παράλειψης (skip lists)

9. Κόκκινα-Μαύρα Δέντρα

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

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

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

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

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

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

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

Δοµές Δεδοµένων. 13η Διάλεξη Πίνακες Συµβόλων. Ε. Μαρκάκης

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

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

Μη AVL Δέντρα Εισαγωγή κόμβου 4, 6 : 4 12 :

Αναδρομικοί Αλγόριθμοι

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

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

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

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

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

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

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

έντρα ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη

Διάλεξη 18: B-Δένδρα

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

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

ιαφάνειες παρουσίασης #10 (β)

AVL-trees C++ implementation

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

3 Αναδροµή και Επαγωγή

Εκτενείς Δομές Δεδομένων

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

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

ΠΛΗ111. Ανοιξη Μάθηµα 7 ο. έντρο. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

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

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

έντρα Πολλαπλής ιακλάδωσης και (a, b)- έντρα

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

ΕΝΟΤΗΤΑ 5 ΥΛΟΠΟΙΗΣΗ ΛΕΞΙΚΩΝ ΜΕ ΙΣΟΖΥΓΙΣΜΕΝΑ ΔΕΝΔΡΑ

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

ΗΥ240 - Παναγιώτα Φατούρου 2

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

Ισοζυγισµένο έντρο (AVL Tree)

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

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

PROJECT ΣΤΟ ΜΑΘΗΜΑ ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΕΥΡΕΤΙΚΕΣ ΜΕΘΟ ΟΥΣ

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

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

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

Transcript:

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

Περίληψη Εισαγωγή Τυχαιοποιηµένα ΔΔΑ (Randomized Binary Search trees) Στρεβλά ΔΔΑ (Splay trees) Καθοδικά δέντρα 2-3-4 (Top-Down 2-3-4 trees) Δέντρα κόκκινου-µαύρου (Red-Black trees) Λίστες Παράλειψης (Skip lists) Χαρακτηριστικά επιδόσεων - συµπεράσµατα Δοµές Δεδοµένων 15-2

Εισαγωγή Μειονεκτήµατα Δέντρων Δυαδικής Αναζήτησης (ΔΔΑ) Κακή επίδοση χειρότερης περίπτωσης Εµφανίζεται σε µερικές πρακτικές περιπτώσεις Παράδειγµα: εισαγωγή ήδη ταξινοµηµένων κλειδιών Λύση: διατήρηση των δέντρων σε ισορροπηµένη µορφή Όλοι οι εξωτερικοί κόµβοι στο ίδιο ή σε δύο διαδοχικά επίπεδα Προτεινόµενες δοµές: Τυχαιοποιηµένα ΔΔΑ Στρεβλά ΔΔΑ Δέντρα 2-3-4 Δέντρα κόκκινου-µαύρου Πρόβληµα: διατήρηση ισορροπίας µετά από αλλαγές Δοµές Δεδοµένων 15-3

Εισαγωγή Πρόβληµα: διατήρηση ισορροπίας µετά από αλλαγές Πιθανή λύση: Περιοδική πλήρης ανακατασκευή (µετά από κάποιο αριθµό εισαγωγών) private Node balancer(node h) { //h.n = αριθµός κόµβων στο υποδέντρο από h και κάτω if ((h == null) (h.n == 1)) return h; h = partr(h, h.n/2); //διαµέριση µε µεσαίο κλειδί στη ρίζα //κάνε το ίδιο για τα υποδέντρα h.l = balancer(h.l); h.r = balancer(h.r); //θέλουµε και κάποια µέθοδο fixn για διορθώση του πεδίου Ν fixn(h.l); fixn(h.r); fixn(h); //φτιάξε το Ν σε κάθε κόµβο return h; } Διατήρηση ΔΔΑ σε ισορροπηµένη µορφή Η περιοδική ανακατασκευή µπορεί να έχει µεγάλο κόστος Χρειαζόµαστε µεθόδους τοπικής ανακατασκευής Δοµές Δεδοµένων 15-4

Εισαγωγή Αλγοριθµικές προσεγγίσεις αποφυγής χειρότερης περίπτωσης Τυχαιοποίηση (Randomization): στατιστική αποφυγή της χειρότερης περίπτωσης Εισάγουµε κάποια τυχαία απόφαση στον αλγόριθµο Παράδειγµα: τυχαιοποιηµένα ΔΔΑ Απόσβεση (Amortization): εκτέλεση επιπλέον εργασίας ορισµένες φορές Αρχικά φαίνεται ότι µπορεί να κάνουµε extra δουλειά Το κόστος αποσβένεται µετά από πολλές λειτουργίες Παράδειγµα: στρεβλά ΔΔΑ Βελτιστοποίηση (Optimization): εγγυήσεις επίδοσης σε κάθε λειτουργία Χρήση πρόσθετων δοµικών πληροφοριών µέσα στα ΔΔΑ Παράδειγµα: δέντρα 2-3-4, δέντρα κόκκινου-µαύρου Δοµές Δεδοµένων 15-5

Τυχαιοποιηµένα ΔΔΑ Δοµές Δεδοµένων 15-6

Τυχαιοποιηµένα ΔΔΑ Απλή παραλλαγή των ΔΔΑ Ίδια δοµή µε τα ΔΔΑ, αλλά διαφορετική υλοποίηση των µεθόδων Έστω ότι έχουµε φτιάξει ένα ΔΔΑ µε N κόµβους Έστω ότι τα στοιχεία έρχονται τυχαία µε οµοιόµορφη κατανοµή των κλειδιών τους Αν έρθει για εισαγωγή ένα νέο στοιχείο, µε πιθανότητα 1/(Ν+1) η «σωστή» θέση είναι η ρίζα Υλοποίηση εισαγωγής: το στοιχείο εισάγεται στη ρίζα µε πιθανότητα 1/(N+1) Αυτή είναι η πιθανότητα να είναι η ρίζα ενός τυχαίου ΔΔΑ Με πιθ/τα Ν/Ν+1 αναδροµική εισαγωγή σε υποδέντρο µε τον ίδιο τρόπο Μπορεί έτσι να καταλήξει σε οποιοδήποτε επίπεδο του δέντρου Δοµές Δεδοµένων 15-7

Τυχαιοποιηµένα ΔΔΑ private Node insertr(node h, ITEM x) { if (h == null) return new Node(x); if (Math.random()*(h.N+1) < 1.0) return insertt(h, x); if (less(x.key(), h.item.key())) h.l = insertr(h.l, x); else h.r = insertr(h.r, x); h.n++; return h; } void insert(item x) { head = insertr(head, x); } Παρόµοιες ιδέες εφαρµόζονται για την υλοποίηση των υπόλοιπων µεθόδων Π.χ. για αφαίρεση, ένωση, κτλ Δοµές Δεδοµένων 15-8

Τυχαιοποιηµένα ΔΔΑ Απόδοση τυχαιοποιηµένων ΔΔΑ Είναι ουσιαστικά ισοδύναµα µε ΔΔΑ όπου N κλειδιά εισάγονται τυχαία Παρά το ότι τα κλειδιά δεν εισάγονται τυχαία Χειρότερη περίπτωση: όπως και στα ΔΔΑ, το δέντρο µπορεί να εκφυλιστεί σε µια αλυσίδα (συµβαίνει σπάνια όµως) Μαθηµατική ανάλυση µέσης περίπτωσης: Κατασκευή δέντρου Ν κόµβων: περίπου 2NlnN συγκρίσεις κατά µέσο όρο Αναζήτηση: περίπου 2lnN συγκρίσεις κατά µέσο όρο Δοµές Δεδοµένων 15-9

Τυχαιοποιηµένα ΔΔΑ Ιδιότητες τυχαιοποιηµένων ΔΔΑ Το ΔΔΑ που προκύπτει εξαρτάται από τους τυχαίους αριθµούς Αµελητέα πιθανότητα το δέντρο να είναι µη ισορροπηµένο Παράδειγµα: ΔΔΑ που προκύπτει από κλειδιά σε αύξουσα σειρά Στα κανονικά ΔΔΑ κλειδιά σε αύξουσα σειρά θα δηµιουργούσαν αλυσίδα Δοµές Δεδοµένων 15-10

Τυχαιοποιηµένα ΔΔΑ Μειονεκτήµατα τυχαιοποιηµένων ΔΔΑ Οι καλές γεννήτριες τυχαίων αριθµών είναι αργές Εναλλακτικά: χρήση πιο γρήγορων αλλά όχι τόσο τυχαίων γεννητριών Απαιτείται πεδίο πλήθους κόµβων (h.ν) σε κάθε κόµβο Μπορεί όµως να το θέλουµε ούτως ή άλλως και για άλλους λόγους (άλλες µεθόδους) Δοµές Δεδοµένων 15-11

Τυχαιοποιηµένα ΔΔΑ Αφαίρεση: παρόµοια µε τα απλά ΔΔΑ Όταν ενώνουµε τα υποδέντρα που προκύπτουν µετά την αφαίρεση ενός κόµβου, παίρνουµε µια τυχαία απόφαση για το αν κρεµάµε το δεξί κάτω από το αριστερό ή το αντίθετο private Node joinlr(node a, Node b) { //κλειδιά στο a κλειδιά στο b int N = a.n + b.n; if (a == null) return b; if (b == null) return a; if (Math.random()*N < 1.0*a.N) { a.r = joinlr(a.r, b); return a; } //βάζουµε το b κάτω από το a else { b.l = joinlr(a, b.l); return b; } } // αλλιώς a κάτω από b Δοµές Δεδοµένων 15-12

Τυχαιοποιηµένα ΔΔΑ Υλοποίηση ένωσης: παρόµοια µε τα απλά ΔΔΑ Έστω 2 ΔΔΑ Α και Β Στα απλά ΔΔΑ επιλέγαµε τη ρίζα του Α ως ρίζα του τελικού δέντρου Στα τυχαιοποιηµένα ΔΔΑ: τυχαία απόφαση για το ποια ρίζα θα µείνει στην κορυφή ανάλογα µε το πλήθος κόµβων του κάθε δέντρου Δοµές Δεδοµένων 15-13

Στρεβλά ΔΔΑ Δοµές Δεδοµένων 15-14

Στρεβλά ΔΔΑ Παραλλαγή των ΔΔΑ µε εισαγωγή στη ρίζα Ιδέα: Έστω ότι λόγω κάποιας εισαγωγής κατεβαίνουµε πολύ χαµηλά 10 17 Αφού κατεβαίνουµε τόσο χαµηλά, ας φτιάξουµε µερικούς κόµβους λίγο καλύτερα! 5 2 9 3 Δοµές Δεδοµένων 15-15

Στρεβλά ΔΔΑ Παραλλαγή των ΔΔΑ µε εισαγωγή στη ρίζα Εισαγωγή στη ρίζα: διαδοχικές περιστροφές από κάτω προς τα πάνω Στα στρεβλά ΔΔΑ, λαµβάνουµε υπόψη δύο διαδοχικές περιστροφές Αν είναι προς αντίθετες κατευθύνσεις, καµία αλλαγή Αν είναι προς την ίδια κατεύθυνση, διαφοροποιούµαστε Κάνουµε πρώτα την περιστροφή στη ρίζα και µετά στο παιδί Περιστροφές bottom-up Το Ε πάει στη ρίζα µε περιστροφές από το εγγόνι προς τη ρίζα Περιστροφές top-down Το Ε πάει στη ρίζα µε περιστροφές από τη ρίζα προς το εγγόνι Δοµές Δεδοµένων 15-16

Zig-zig και zig-zag Πατέρας και παππούς του A µε ίδια κατεύθυνση Zig-zig A D F G P Πατέρας και παππούς του H µε αντίθετες κατευθύνσεις A G J K P Zig-zag H Δοµές Δεδοµένων 15-17

Στρεβλά ΔΔΑ Zig-zag pattern: περιστροφές από κάτω προς τα πάνω όπως ξέρουµε 15 X 20 25 W 15 20 25 Y Z X Y Z W Δοµές Δεδοµένων 15-18

Στρεβλά ΔΔΑ Zig-zig pattern: περιστροφές από πάνω προς τα κάτω 15 25 W 20 20 Z X 25 15 Y Y Z W X Δοµές Δεδοµένων 15-19

Στρεβλά ΔΔΑ Υλοποίηση στρεβλής εισαγωγής Διαφοροποιείται µόνο σε ζεύγη όµοιων περιστροφών Εξετάζουµε πάντα δύο επίπεδα (ελέγχουµε τα 4 πιθανά σενάρια, L-L, L-R, R-R, R-L) private Node splay(node h, ITEM x) { if (h == null) return new Node(x); //τέλος αναδροµής if (less(x.key(), h.item.key())) { if (h.l == null) { h.l = new Node(x); return rotr(h); } if (less(x.key(), h.l.item.key())) { h.l.l = splay(h.l.l, x); h = rotr(h);}//περιστρ. ρίζας else { h.l.r = splay(h.l.r, x); h.l = rotl(h.l);} return rotr(h); } //2 η περιστροφή είναι πάντα στη ρίζα else { Δοµές Δεδοµένων 15-20

Στρεβλά ΔΔΑ Υλοποίηση στρεβλής εισαγωγής (συνέχεια)... else { if (h.r == null) { h.r = new Node(x); return rotl(h); } if (less(h.r.item.key(), x.key())) { else { h.r.r = splay(h.r.r, x); h = rotl(h); } h.r.l = splay(h.r.l, x); h.r = rotr(h.r);} return rotl(h); } } void insert(item x) { head = splay(head, x); } Δοµές Δεδοµένων 15-21

Στρεβλά ΔΔΑ Τι κερδίζουµε µε τη στρεβλή εισαγωγή; Σε κάθε εισαγωγή µικραίνει η διαδροµή εισαγωγής Η απόσταση από τη ρίζα για πολλούς κόµβους µειώνεται περίπου στο µισό Μπορεί βέβαια να αυξάνεται το µήκος άλλων διαδροµών Επωφελούνται τα υποδέντρα κάτω από τους κόµβους που περιστρέφουµε (υποδέντρα Υ και Ζ στις προηγούµενες εικόνες) Δοµές Δεδοµένων 15-22

Στρεβλά ΔΔΑ Απόδοση στρεβλών ΔΔΑ N εισαγωγές σε άδειο ΔΔΑ: O(NlοgN) N εισαγωγές / αναζητήσεις σε ΔΔΑ M κόµβων: O((N+M)lοg(N+M)) Έχουµε καλό συνολικό κόστος, όχι απαραίτητα καλό κόστος σε κάθε µεµονωµένη λειτουργία Μέσο κόστος όλων των λειτουργιών Κάποιες λειτουργίες µπορεί να είναι αργές Το κόστος τους αποσβένεται σε πολλές λειτουργίες Αυτή είναι η χειρότερη, όχι η µέση περίπτωση! Βελτίωση απόδοσης στρεβλών ΔΔΑ Μπορούµε να κάνουµε εξισορρόπηση και στις αναζητήσεις Ιδιαίτερα αποδοτική για ανοµοιόµορφες προσπελάσεις Τα κλειδιά που χρησιµοποιούνται συχνά πλησιάζουν τη ρίζα Δοµές Δεδοµένων 15-23

Καθοδικά δέντρα 2-3-4 Παρά την καλή απόδοση των τυχαιοποιηµένων και των στρεβλών δέντρων υπάρχει πάντα µία πολύ µικρή πιθανότητα να µην πάρουµε ισοζυγισµένο δέντρο Μπορούµε να εγγυηθούµε ότι όλες οι λειτουργίες εισαγωγής και αναζήτησης θα γίνονται πάντα σε χρόνο O(logN)? Για να γίνει αυτό χρειαζόµαστε µεγαλύτερη ευελιξία στις δοµές που χρησιµοποιούµε Δοµές Δεδοµένων 15-24

Καθοδικά δέντρα 2-3-4 Τα δέντρα 2-3-4 έχουν τρία είδη κόµβων 2-κόµβοι: 1 κλειδί και 2 σύνδεσµοι (όπως στα ΔΔΑ) 3-κόµβοι: 2 κλειδιά και 3 σύνδεσµοι, π.χ. αν έχει κλειδιά τα 15, 30 Πρώτος σύνδεσµος σε υποδέντρο µε κλειδιά 15 Δεύτερος σύνδεσµος σε υποδέντρο µε κλειδιά στο [15, 30] Τρίτος κόµβος σε υποδέντρο µε κλειδιά 30 4-κόµβοι: 3 κλειδιά και 4 σύνδεσµοι (σε αναλογία µε τους 3-κόµβους) Ιδιότητα δέντρων 2-3-4: Όλοι οι null σύνδεσµοι ισαπέχουν από τη ρίζα Δηλαδή είναι πλήρως ισορροπηµένα δέντρα Δοµές Δεδοµένων 15-25

Καθοδικά δέντρα 2-3-4 Η αναζήτηση είναι γενίκευση αυτής των ΔΔΑ Η εισαγωγή είναι λίγο πιο περίπλοκη Για 2-κόµβους και 3-κόµβους αρκεί αναζήτηση και µετά εισαγωγή όπως στα ΔΔΑ 2-κόµβοι µετατρέπονται σε 3-κόµβους και 3-κόµβοι µετατρέπονται σε 4-κόµβους Για 4-κόµβους δεν αρκεί (θέλουµε να διατηρήσουµε την ισορροπία) Τι κάνουµε όταν θέλουµε εισαγωγή σε 4-κόµβο; Δοµές Δεδοµένων 15-26

Καθοδικά δέντρα 2-3-4 Ανοδική εισαγωγή Ξεκινάµε µε αναζήτηση Εντοπίζουµε τον κόµβο στο τελευταίο επίπεδο όπου τελείωσε η αναζήτηση Αν είναι 2-κόµβος ή 3-κόµβος εισάγουµε το κλειδί και τον µετατρέπουµε σε 3- ή 4-κόµβο αντίστοιχα Αν είναι 4-κόµβος τον σπάµε στα δύο Το µεσαίο κλειδί πηγαίνει στον πατέρα Το νέο κλειδί εισάγεται στο κατάλληλο παιδί Συνεχίζουµε αναδροµικά στον πατέρα Δοµές Δεδοµένων 15-27

Καθοδικά δέντρα 2-3-4 Μπορεί όµως να είναι και ο γονέας 4-κόµβος, καθώς και ο γονέας του γονέα, κ.ο.κ. Η ανοδική εισαγωγή τότε θα είναι πολύ αργή (µπορεί να αλλάξει όλο το δέντρο) Καθοδική εισαγωγή Όποτε βρίσκουµε έναν 4-κόµβο τον σπάµε Αυτό γίνεται σε όλα τα επίπεδα κατεβαίνοντας Εξασφαλίζουµε ότι ένας 4-κόµβος δεν είναι παιδί 4-κόµβου Εισάγουµε το µεσαίο κλειδί στον πατέρα Αν η ρίζα γίνει 4-κόµβος τη διασπάµε άµεσα όταν τελειώσει η εισαγωγή Δεν περιµένουµε την επόµενη εισαγωγή Εισάγουµε το νέο κλειδί στο τελευταίο επίπεδο Δοµές Δεδοµένων 15-28

Καθοδικά δέντρα 2-3-4 Απόδοση καθοδικών δέντρων 2-3-4 Αναζήτηση: το πολύ lοgn+1 διασχίσεις κόµβων Όλοι οι κόµβοι-φύλλα ισαπέχουν από τη ρίζα Άρα τα προηγούµενα επίπεδα είναι γεµάτα Μόνο η διάσπαση της ρίζας αυξάνει το ύψος Όλοι οι κόµβοι είναι τουλάχιστον 2-κόµβοι Εισαγωγή: το πολύ lοgn+1 διαιρέσεις κόµβων Διαιρέσεις σε όλη τη διαδροµή Τα ανοδικά δέντρα θέλουν περισσότερες διαιρέσεις Είναι όµως πιο απλά στην υλοποίηση Δοµές Δεδοµένων 15-29

Καθοδικά δέντρα 2-3-4 Υλοποίηση δέντρων 2-3-4 ΔΕΝ είναι τόσο απλά τα πράγµατα! Θα µπορούσαµε να έχουµε 3 διαφορετικούς τύπους δεδοµένων για την αναπαράσταση των 2-κόµβων, 3-κόµβων και 4-κόµβων Η χρήση 3 ειδών κόµβων όµως έχει αρκετό κόστος Μπορεί η επιβάρυνση να υπερβαίνει την ωφέλεια Θα προτιµούσαµε έναν οµοιόµορφο τρόπο χειρισµού όλων των κόµβων Εναλλακτική υλοποίηση: δέντρα κόκκινου-µαύρου Δοµές Δεδοµένων 15-30

Δέντρα κόκκινου-µαύρου Δέντρα Κόκκινου-Μαύρου (ΔΚΜ) Αναπαράσταση δέντρων 2-3-4 ως ΔΔΑ Με χρήση µόνο ενός extra πεδίου (1 bit) Οι 3- και 4-κόµβοι µετατρέπονται σε 2-κόµβους Οι µεταξύ τους σύνδεσµοι είναι κόκκινοι Οι υπόλοιποι σύνδεσµοι είναι µαύροι Παράσταση 4-κόµβων Τρεις 2-κόµβοι που συνδέονται µε κόκκινους συνδέσµους Μεσαίο κλειδί στον πάνω κόµβο Παράσταση 3-κόµβων Δύο 2-κόµβοι που συνδέονται µε κόκκινους συνδέσµους Ο κόκκινος σύνδεσµος µπορεί να είναι δεξιά ή αριστερά Ένα bit ανά κόµβο για το χρώµα του συνδέσµου Ορίζει το χρώµα του συνδέσµου µε τον πατέρα του Δοµές Δεδοµένων 15-31

Δέντρα κόκκινου-µαύρου Αναζήτηση: ακριβώς ίδια µε αυτή των ΔΔΑ Εισαγωγή: βασίζεται σε αυτή των δέντρων 2-3-4 Τα δέντρα κόκκινου-µαύρου συνδυάζουν την απλή µέθοδο αναζήτησης των ΔΔΑ µε την απλή µέθοδο εισαγωγής-εξισορρόπησης των δέντρων 2-3-4 Χρειάζονται όµως ένα επιπλέον πεδίο για το χρώµα (πολύ µικρή επιβάρυνση) Δοµές Δεδοµένων 15-32

Δέντρα κόκκινου-µαύρου Εισαγωγή σε ΔΚΜ Χρησιµοποιούµε τον αλγόριθµο καθοδικής εισαγωγής για τα δέντρα 2-3-4 Μετατρέπουµε τα είδη κόµβων σε χρώµατα συνδέσµων Περιπτώσεις διάσπασης 4-κόµβων Ξέρουµε ότι ο πατέρας του υπό διάσπαση κόµβου δεν είναι 4-κόµβος (1) Ο πατέρας είναι 2-κόµβος Απλή αλλαγή χρωµάτων για να γίνει 3-κόµβος Γίνεται κόκκινος ο σύνδεσµος από τον 2-κόµβο προς το παιδί Καµία δοµική αλλαγή ή µετακίνηση στους συνδέσµους (2) Ο πατέρας είναι 3-κόµβος µε «σωστό» προσανατολισµό Ο κόκκινος σύνδεσµος του 3-κόµβου είναι από την άλλη µεριά Απλή αλλαγή χρωµάτων για να γίνει 4-κόµβος (όπως και πριν) Δοµές Δεδοµένων 15-33

Δέντρα κόκκινου-µαύρου Περιπτώσεις διάσπασης 4-κόµβων (3) Ο πατέρας είναι 3-κόµβος µε «λάθος» προσανατολισµό Η διαίρεση µε απλή αλλαγή χρωµάτων αφήνει 2 κόκκινους συνδέσµους στη σειρά Το δέντρο δεν αντιστοιχεί πια σε δέντρο 2-3-4 Περιστροφή για αποκατάσταση της µορφής (υπάρχουν 4 περιπτώσεις ανά 2 συµµετρικές) (3α) Ίδια κατεύθυνση κόκκινων συνδέσµων: απλή περιστροφή (3β) Διαφορετική κατεύθυνση συνδέσµων: διπλή περιστροφή (αριστερή-δεξιά ή δεξιά-αριστερή) Δοµές Δεδοµένων 15-34

Δέντρα κόκκινου-µαύρου Υλοποίηση εισαγωγής σε ΔΚΜ Αναδροµική υλοποίηση Στην κάθοδο αλλάζουµε τα χρώµατα (πριν την αναδροµική κλήση) Διάσπαση των 4-κόµβων Στην άνοδο εκτελούµε τις περιστροφές Το πεδίο sw δείχνει αν ο τρέχων κόµβος είναι δεξί παιδί Το πεδίο h.cbit (color bit) δείχνει το χρώµα του συνδέσµου του h προς τον πατέρα του Ο κόµβος στη ρίζα θεωρείται κατά σύµβαση ότι έχει µαύρο και αριστερό σύνδεσµο Οι νέοι κόµβοι έχουν κόκκινο σύνδεσµο private static final boolean R = true; private static final boolean B = false; private boolean red(node x) { if (x == null) return false; return x.cbit; } void insert(item x) { head = insertr(head, x, false); head.cbit = B; } Δοµές Δεδοµένων 15-35

Δέντρα κόκκινου-µαύρου Υλοποίηση εισαγωγής σε ΔΚΜ Περίπτωση εισαγωγής στο αριστερό υποδένδρο Διαδοχικοί ανάποδοι κόκκινοι σύνδεσµοι: περιστροφή Διαδοχικοί ίδιοι κόκκινοι σύνδεσµοι: (ξανα)κάνουµε περιστροφή Καθορίζεται από το πεδίο sw private Node insertr(node h, ITEM x, boolean sw) { if (h == null) { return new Node(x, R); } //όταν η αναδροµή φτάνει σε null δηµιουργείται κόκκινος σύνδεσµος if (red(h.l) && red(h.r)) { //βρήκαµε 4-κόµβο h.cbit = R; h.l.cbit = B; h.r.cbit = B;}//διάσπαση if (less(x.key(), h.item.key())) { h.l = insertr(h.l, x, false); if (red(h) && red(h.l) && sw) h = rotr(h); if (red(h.l) && red(h.l.l)) { //2 διαδοχικοί κόκκινοι σύνδεσµοι κάτω από το h è δεξιά περιστροφή h = rotr(h); h.cbit = B; h.r.cbit = R; } } Δοµές Δεδοµένων 15-36

Δέντρα κόκκινου-µαύρου Υλοποίηση εισαγωγής σε ΔΚΜ Περίπτωση εισαγωγής στο δεξί υποδέντρο Συµµετρική µε την προηγούµενη Η πρώτη περιστροφή ανάγει τη µία περίπτωση στην άλλη else { h.r = insertr(h.r, x, true); if (red(h) && red(h.r) &&!sw) h = rotl(h); if (red(h.r) && red(h.r.r)) { return h; } h = rotl(h); h.cbit = B; h.l.cbit = R; } } Δοµές Δεδοµένων 15-37

Δέντρα κόκκινου-µαύρου Απόδοση αναζήτησης σε ΔΚΜ Πόσο περισσότερο µπορεί να κοστίσει η εισαγωγή/αναζήτηση σε σχέση µε τα δέντρα 2-3-4? Κάθε 3-κόµβος ή 4-κόµβος του 2-3-4 αντιστοιχεί τώρα σε 2 ή 3 κόµβους που βρίσκονται σε 2 διαφορετικά επίπεδα Εποµένως: το ύψος ενός δέντρου κόκκινου-µαύρου µπορεί να γίνει µέχρι και διπλάσιο του ισοδύναµου δέντρου 2-3-4 Χειρότερη περίπτωση: το πολύ 2lοgN+2 συγκρίσεις Μέση περίπτωση: 1,002lοgN συγκρίσεις Υποθέτουµε τυχαία κλειδιά κατά την κατασκευή Δοµές Δεδοµένων 15-38

Λίστες παράλειψης (skip lists) Ταξινοµηµένη λίστα Χρήση πρόσθετων συνδέσµων για να παραλείπουµε µεγάλα τµήµατα της λίστας κατά την αναζήτηση Κάθε κόµβος µπορεί να έχει µεταβλητό πλήθος συνδέσµων Κάθε σύνδεσµος µπορεί να παραλείπει µεταβλητό πλήθος κόµβων Δοµές Δεδοµένων 15-39

Λίστες παράλειψης (skip lists) Αναζήτηση: ξεκινάµε από το πιο πάνω επίπεδο µέχρι να βρούµε σύνδεσµο που είτε δείχνει σε null, είτε δείχνει σε κόµβο µε µεγαλύτερο κλειδί από αυτό που ψάχνουµε Πηγαίνουµε στο επόµενο επίπεδο συνδέσµων και επαναλαµβάνουµε τη διαδικασία Διατήρηση πίνακα συνδέσµων σε κάθε κόµβο (µπορούµε και τυχαιοποιηµένα να αποφασίσουµε τον αριθµό των συνδέσµων σε κάθε κόµβο χωριστά) Δοµές Δεδοµένων 15-40

Λίστες παράλειψης (skip lists) Οι λίστες παράλειψης είναι µία εναλλακτική αναπαράσταση των ισορροποηµένων δέντρων Οι αλγόριθµοι για δέντρα 2-3-4 µπορούν να υλοποιηθούν µε λίστες παράλειψης αντί για δέντρα κόκκινου-µαύρου Αντιστοίχιση: για κάθε κόµβο, πλήθος συνδέσµων = ύψος του κόµβου στο δέντρο Σύνδεση κόµβων οριζόντια (ανά επίπεδο) Λίγο πιο πολύπλοκος κώδικας Δοµές Δεδοµένων 15-41

Χαρακτηριστικά Επιδόσεων Ισορροπηµένων Δέντρων Περίληψη: Τυχαιοποιηµένα ΔΔΑ: πιο εύκολη υλοποίηση, πρέπει να έχουµε καλή γεννήτρια τυχαίων αριθµών Στρεβλά ΔΔΑ: άµεση επέκταση του αλγορίθµου εισαγωγής στη ρίζα, ικανοποιητική απόδοση σε βάθος χρόνου Δέντρα κόκκινου-µαύρου: καλύτερες εγγυήσεις για γρήγορη αναζήτηση, χειρότερη περίπτωση για κάθε µεµονωµένη αναζήτηση Ο(logN) Λίστες παράλειψης: κατάλληλες για πλήρες φάσµα λειτουργιών πίνακα συµβόλων (αφαίρεση, ένωση, επιλογή k-οστού), πιο αργές οι εισαγωγές και αναζητήσεις Δοµές Δεδοµένων 15-42

Χαρακτηριστικά Επιδόσεων Ισορροπηµένων Δέντρων Πειραµατικά δεδοµένα Κατασκευή δέντρου Ν ΔΔΑ Τυχ. ΔΔΑ Splay ΔΔΑ R-B Skip Lists 12500 90 197 267 92 145 25000 167 492 215 181 385 50000 381 1105 1125 430 892 100000 1004 2656 1148 1190 3257 200000 2628 6341 2784 2936 7493 Δοµές Δεδοµένων 15-43

Χαρακτηριστικά Επιδόσεων Ισορροπηµένων Δέντρων Πειραµατικά δεδοµένα Αναζητήσεις Ν ΔΔΑ Τυχ. ΔΔΑ Splay ΔΔΑ R-B Skip Lists 12500 75 86 80 60 145 25000 175 212 195 158 355 50000 420 505 433 359 878 100000 1047 1357 1113 861 2094 200000 2553 2893 2649 2114 5109 Δοµές Δεδοµένων 15-44