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



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

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

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

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

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

ΕΝΟΤΗΤΑ 5 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

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

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

αντικειµένων/στοιχείων (π.χ., σύνολα αριθµών, λέξεων, ζευγών

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

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

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

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

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

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

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

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

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

Insert(K,I,S) Delete(K,S)

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 13: Δέντρα ΙΙΙ Ισοζυγισμένα Δέντρα, AVL Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

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

υαδικά δέντρα αναζήτησης

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

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

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

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

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

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

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

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

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

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

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

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

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

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

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

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

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

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

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

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

Βασικές Προτάσεις. έντρα. υαδικά έντρα Αναζήτησης ( Α) Ισοζυγισµένα έντρα και Υψος. Κάθε δέντρο µε n κόµβους έχει n 1 ακµές.

Στοιχεία Θεωρίας Γραφηµάτων (4) - έντρα

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

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

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

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

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

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

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

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

AVL-trees C++ implementation

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

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

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

Red-black δέντρα (Κεφ. 5)

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

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

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

Γ. Κορίλη Αλγόριθµοι ροµολόγησης

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

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

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

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

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

Red-Black Δέντρα. Red-Black Δέντρα

Red- black δέντρα Εκτενείς Δομές Δεδομένων (Κεφ. 5)

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

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

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

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

ένδρα (tail, head) Γονέας Παιδί (ancestor, descendant) Φύλλο Εσωτερικός Κόµβος (leaf, non-leaf) που αποτελεί το γονέα του v.

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

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

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

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

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

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

Γενικό πλάνο. Μαθηµατικά για Πληροφορική. Παράδειγµα αναδροµικού ορισµού. οµική επαγωγή ΠΑΡΑ ΕΙΓΜΑ. 3ο Μάθηµα

Κεφάλαιο 14. οµές Ευρετηρίων για Αρχεία. ιαφάνεια 14-1

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

Transcript:

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

ενδρικές οµές για Υλοποίηση υναµικών Λεξικών υναµικά λεξικά λειτουργίες LookUp( ), Insert( ) και Delete( ) Αναζητούµε δένδρα για την αποτελεσµατική υλοποίηση δυναµικών λεξικών δηλ., να υποστηρίζουν τις λειτουργίες LookUp(), Insert() και Delete() σε χρόνο O(logn). Θα δούµε δένδρα AVL κοκκινό-µαυρα δένδρα 2-3 δένδρα, Β-δένδρα splay (αρθρωτά) δένδρα (επίσης, εξαρθρωµένα) Γενικά: δένδρα ισοζυγισµένα καθ ύψος δένδρα ισοζυγισµένα κατά βάρος δένδρα ελάττωσης εσωτερικού µονοπατιού 2

ένδρα AVL υαδικά δένδρα Για κάθε κόµβο (v: δείκτης στον κόµβο), ορίζουµε LeftHeight(v) = 0, αν v->left = NULL, LeftHeight(v) = 1 + Height(v->left), διαφορετικά. όπου Height(w) το ύψος του υποδένδρου µε ρίζα τον w. Το RightHeight(v) ορίζεται αντίστοιχα. Το ισοζύγιο (balance) κόµβου v είναι balance(v) = RightHeight(v) LeftHeight(v) Για το δένδρο Τ (µε δείκτη r στη ρίζα): LeftHeight(T) = LeftHeight(r) RightHeight(T) = RightHeight(r) 3

ένδρα AVL ένδρο AVL δυαδικό δένδρο αναζήτησης και κάθε κόµβος του έχει balance = 0, 1, ή +1. Τα δένδρα των περιπτώσεων (a), (b), (c) είναι δένδρα AVL, ενώ αυτά των περιπτώσεων (d), (e) δεν είναι. 4

Χαρακτηριστικά ένδρων AVL Κάθε δένδρο AVL είναι δυαδικό δένδρο αναζήτησης και έχει ύψος O(log n), όπου n το πλήθος κόµβων του δένδρου. Τι σηµαίνει αυτό για την πολυπλοκότητα της LookUp()? Ένας κόµβος µπορεί να προστεθεί σε ή να αφαιρεθεί από ένα δένδρο AVL χωρίς να καταστραφεί η AVL ιδιότητα (ιδιότητα ισοζυγισµού καθ ύψος) σε χρόνο O(log n). Αναπαράσταση Κάθε κόµβος είναι µια δοµή µε πεδία: key, data, left, right, balance Πόσο χώρο στη µνήµη χρειαζόµαστε για να αποθηκεύσουµε το balance? 5

Εισαγωγές κόµβων σε δένδρο AVL Πως µπορούµε να υλοποιήσουµε την Insert()?Που διαφέρει από την Insert() σε δυαδικό δένδρο αναζήτησης? Ακολουθώντας τη γνωστή µέθοδο εισαγωγής σε δένδρο δυαδικής αναζήτησης: βρες το µονοπάτι από τη ρίζα στο κατάλληλο φύλλο στο οποίο θα γίνει η εισαγωγή. Αποθήκευσε αυτό το µονοπάτι (ανεστραµµένο). Ακολούθησε αυτό το µονοπάτι από κάτω προς τα επάνω υπολογίζοντας το νέο balance των κόµβων του µονοπατιού αυτού. Αν το balance κάποιου κόµβου αλλάζει σε +2 ή σε 2, ακολούθησε διαδικασία τροποποίησης του δένδρου ώστε να επανέλθει σε ισχύ η AVL ιδιότητα: εκτέλεσε περιστροφές. 6

Εισαγωγές κόµβων σε δένδρο AVL Παράδειγµα Η απλή περίπτωση: (b) Εισαγωγή στο δένδρο AVL της περίπτωσης (a) (d) Εισαγωγή στο δένδρο AVL της περίπτωσης (c) 7

Εισαγωγές κόµβων σε δένδρο AVL Απλή Αριστερή Περιστροφή, RR (Single Left Rotation) Γιατί να µην ανταλλάξουµε το υποδένδρο Τ1 µε το υποδένδρο Τ3 για να επιλύσουµε το πρόβληµα? Ποια είναι η συµµετρική περίπτωση (Απλή εξιά Περιστροφή, LL)? Πολυπλοκότητα Χρόνου? 8

Εισαγωγές κόµβων σε δένδρο AVL Απλή εξιά Περιστροφή, LL (Single Right Rotation) Προσοχή: Τα L και R σχετίζονται µε το που βρίσκεται το υποδένδρο όπου έχει γίνει η εισαγωγή σε σχέση µε τον κόµβο όπου εµφανίζεται η έλλειψη ισορροπίας. Οι περιστροφές LL και RR γίνονται όταν παρουσιαστεί εξωτερική έλλειψη ισορροπίας. 9

Εισαγωγές κόµβων σε δένδρο AVL ιπλή περιστροφή RL (Double Rotation RL) RL = Right-Left Υπάρχει επίσης η συµµετρική ιπλή Περιστροφή LR (Left-Right). Οι διπλές περιστροφές (RL, LR) απαιτούνται για εσωτερική έλλειψη ισορροπίας. 10

Εισαγωγές κόµβων σε δένδρο AVL Παράδειγµα: ιαδοχικές εισαγωγές των κλειδιών 90, 71, 10, 4, 12, 5, 19, 52 και 56 σε αρχικά κενό δένδρο AVL. 11

Κρίσιµος Κόµβος (Critical Node) Κρίσιµος Κόµβος ο χαµηλότερος κόµβος µε balance +1 ή 1 στο µονοπάτι που θα ακολουθήσουµε από τη ρίζα για την εισαγωγή του νέου κόµβου Στο µονοπάτι αυτό: Κάθε κόµβος χαµηλότερα από τον κρίσιµο κόµβο είχε balance 0. Άρα, θα έχει balance +1 ή 1 µετά την εισαγωγή. Τι καθορίζει το αν κάποιος τέτοιος κόµβος θα έχει balance +1 ή 1? Ο κρίσιµος κόµβος µετά την εισαγωγή έχει balance ίσο µε 0 ή +2 ή 2. Γιατί? Πότε το balance γίνεται 0, πότε +2 και πότε 2? Το balance των κόµβων ψηλότερα από τον κρίσιµο κόµβο δεν αλλάζει γιατί το ύψος του κρίσιµου κόµβου είναι το ίδιο πριν και µετά την εισαγωγή (µε ή χωρις περιστροφή). Γιατί? Άρα, µόνον οι κόµβοι από τον κρίσιµο κόµβο και χαµηλότερα χρειάζεται να ελεγχθούν για αλλαγές στο balance τους. Σηµείωση: Ο κρίσιµος κόµβος είναι σηµαντικός για την αποτελεσµατική υλοποίηση της διαδικασίας εισαγωγής σε δένδρο AVL. 12

Κρίσιµος Κόµβος Εάν γίνει περιστροφή, αυτή σχετίζεται µε τον κρίσιµο κόµβο και µπορεί να είναι: µια απλή περιστροφή µεταξύ του κρίσιµου κόµβου και του κόµβου-παιδιού του στο µονοπάτι που ακολουθήθηκε για την εισαγωγή µια διπλή περιστροφή µεταξύ του κρίσιµου κόµβου, του κόµβου-παιδιού του και του κόµβουεγγονού του στο µονοπάτι για την εισαγωγή Σε τι µας βοηθάει η παρατήρηση αυτή? Καθώς ο αλγόριθµος κατεβαίνει προς το ζητούµενο φύλλο, αρκεί να θυµάται µόνο τον τελευταίο κρίσιµο κόµβο. Μετά την εισαγωγή, ξεκινώντας από τον κρίσιµο κόµβο ακολούθησε και πάλι το ίδιο µονοπάτι προς τον κόµβο που εισήχθη και διόρθωσε τα balances. Τέλος, αν χρειάζεται κάνε τις περιστροφές. Γιατί µπορούµε να βρούµε και πάλι αυτό το µονοπάτι? Πως διορθώνουµε τα balances? Ποια είναι η πολυπλοκότητα χρόνου της Insert()? 13

ιαγραφές κόµβων σε δένδρο AVL Αρχικά, εφαρµόζουµε τον αλγόριθµο διαγραφής σε δυαδικό δένδρο αναζήτησης: 1) διαγραφή του ίδιου του κόµβου v αν είναι φύλλο, 2) αντικατάστασή του από το παιδί του αν έχει µόνο ένα παιδί, 3) αντικατάστασή του από τον επόµενό του στην ενδοδιατεταγµένη διάταξη αν έχει 2 παιδιά. Κατόπιν, ελέγχουµε τις τιµές του balance: το balance του κόµβου-γονέα του κόµβου που διαγράφεται (διαγράφεται ο v ή ο επόµενος του v στην ενδο-διατεταγµένη διάσχιση) αλλάζει. (a) Αρχικό δένδρο, (b)-(e) διαγραφές Β,F,M,R 14

ιαγραφές κόµβων σε δένδρο AVL Αν το balance του κόµβου-γονέα w του κόµβου που διαγράφεται (του v ή του επόµενού του στην ενδοδιατεταγµένη διάσχιση) αλλάζει από 0 σε +1 ή σε 1, τότε ο αλγόριθµος τερµατίζει. από +1 ή 1 σε 0, το ύψος του w µειώνεται και άρα και το balance άλλων προγόνων του v ενδεχοµένως αλλάζει. από +1 ή 1 σε +2 ή 2, τότε γίνεται µία ή περισσότερες περιστροφές. Στη χειρότερη περίπτωση, µπορεί να χρειαστεί να γίνουν περιστροφές σε όλους τους κόµβους στο µονοπάτι από τον κόµβο w έως τη ρίζα. Το είδος των περιστροφών εξαρτάται από τις δύο πρώτες ακµές του µονοπατιού που καθορίζει το ύψος του εκάστοτε κόµβου µε balance +2 ή -2. Ποια είναι η πολυπλοκότητα χρόνου της υλοποίησης της Delete()? Ολόκληρο το µονοπάτι πρέπει να αποθηκευτεί και να ακολουθηθεί από τον κόµβο w προς τη ρίζα µέχρι να βρεθεί κάποιος κόµβος µε balance 0. Το balance του κόµβου αυτού γίνεται +1 ή 1, αλλά το ύψος του δεν αλλάζει, και από εκεί και µετά, το balance των κόµβων έως τη ρίζα δεν αλλάζει. 15

ιαγραφές κόµβων σε δένδρο AVL Αρχικό δένδρο 19 ιαγραφή του 12 19 10 71 5 71 5 12 56 90 4 10 56 90 4 52 80 95 52 80 95 ιαγραφή του 19 52 ιαγραφή του 56 52 5 71 5 90 4 10 56 90 80 ιαγραφή του 10 52 95 4 10 71 95 80 ιαγραφή του 90 52 5 90 5 80 4 71 95 4 71 95 80 ιαγραφή του 5 52 ιαγραφή του 4 80 4 80 52 95 71 95 71 16

Παράδειγµα ιαγραφής που Οδηγεί σε Πολλαπλές Περιστροφές 17

Κοκκινόµαυρα ένδρα (Red-Black Trees) Κοκκινόµαυρο δένδρο δυαδικό δένδρο αναζήτησης κάθε κόµβος: κόκκινο χρώµα ή µαύρο χρώµα. Θα θεωρήσουµε τους δείκτες NULL ως δείκτες σε εξωτερικούς NIL κόµβους (φύλλα) του δυαδικού δένδρου και τους κανονικούς κόµβους που αποθηκεύουν κλειδιά ως εσωτερικούς κόµβους του δένδρου. (Αυτή η υπόθεση βοηθά στον περιορισµό των περιπτώσεων.) Ένα κοκκινόµαυρο δένδρο πληροί τις ακόλουθες ιδιότητες: Κάθε κόµβος έχει είτε κόκκινο είτε µαύρο χρώµα. Ο κόµβος-ρίζα και κάθε NIL κόµβος έχει µαύρο χρώµα. Κάθε απλή διαδροµή από έναν κόµβο σε έναν NIL κόµβο που είναι απόγονός του περιέχει το ίδιο πλήθος µαύρων κόµβων. Αν ένας κόµβος έχει κόκκινο χρώµα, τότε και τα δύο παιδιά του έχουν µαύρο χρώµα. 18

Παράδειγµα Κοκκινό-µαυρου ένδρου οµή πεδία key : η καταχωρηµένη τιµή color : το bit χρώµατος left, right : δείκτες στα παιδιά p : δείκτης στον κόµβο-γονέα 19

Μέγεθος Κοκκινό-µαυρων ένδρων Πρόταση: Ένα κοκκινόµαυρο δένδρο µε n εσωτερικούς κόµβους έχει ύψος 2 log(n+1). ιαίσθηση: Σε κάθε µονοπάτι από τη ρίζα σε φύλλο, τουλάχιστον οι µισοί κόµβοι έχουν µαύρο χρώµα. Γιατί; Απόδειξη µαύρο ύψος bh(v) κόµβου v: το πλήθος µαύρων κόµβων σε κάθε µονοπάτι από τον κόµβο v σε οποιοδήποτε φύλλο-απόγονο, χωρίς να συµπεριλάβουµε τον v. Με επαγωγή ως προς το ύψος κόµβου v, αποδεικνύουµε ότι το υπο-δένδρο µε ρίζα τον v περιέχει τουλάχιστον 2 bh(v) -1 εσωτερικούς κόµβους. Βάση επαγωγής: ο v έχει ύψος 0, τότε είναι φύλλο (NIL κόµβος) πλήθος εσωτερικών κόµβων στο υποδένδρο του v είναι 0. Επαγωγικό βήµα: οθέντος ενός κόµβου v, υποθέτουµε ότι ο ισχυρισµός ισχύει για τα παιδιά του v και τον αποδεικνύουµε για τον v. Έστω h το ύψος του δένδρου και r η ρίζα. Τότε bh(r) h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα χρόνου? 20

Εισαγωγή σε Κοκκινό-µαυρο ένδρο Αλγόριθµος Εισαγωγή όπως σε δυαδικό δένδρο αναζήτησης. Ο νέος κόµβος που εισάγεται χρωµατίζεται µε κόκκινο χρώµα. Εξετάζουµε αν οι ιδιότητες χρωµατισµού εξακολουθούν να ισχύουν. Αν ναι τερµατίζουµε, διαφορετικά διορθώνουµε (στη 2 η περίπτωση: πατέρας έχει κόκκινο χρώµα, παππούς µαύρο). ιακρίνουµε περιπτώσεις. Για απλότητα, υποθέτουµε ότι ο πατέρας του x είναι αριστερό παιδί του πατέρα του (εργαζόµαστε συµµετρικά εάν είναι δεξί παιδί). Περίπτωση 1: Ο θείος (κόµβος-αδελφός του πατέρα) έχει κόκκινο χρώµα: αλλάζουµε το χρώµα του πατέρα και του θείου σε µαύρο και το χρώµα του παππού σε κόκκινο. Επαναλαµβάνουµε από τον κόµβο-παππού. 21

Εισαγωγή σε Κοκκινό-µαυρο ένδρο Αλγόριθµος (συνέχεια) Περίπτωση 2: Ο θείος έχει µαύρο χρώµα και ο x είναι δεξί παιδί του πατέρα του: ανάγουµε την περίπτωση αυτή στην περίπτωση 3 µε την εκτέλεση µιας αριστερής περιστροφής (x και πατέρας του). Περίπτωση 3: Ο θείος έχει µαύρο χρώµα και ο x είναι αριστερό παιδί του πατέρα του. Το χρώµα του πατέρα του x αλλάζει σε µαύρο και του παππού σε κόκκινο & εκτελείται µια δεξιά περιστροφή (x και παππούς του). Τερµατίζουµε. Σηµείωση: Εάν (λόγω συνεχούς εφαρµογής της περίπτωσης 1) φθάσουµε στη ρίζα, την χρωµατίζουµε µε µαύρο χρώµα και σταµατάµε. Ποια είναι η πολυπλοκότητα της RB-Insert()? 22

Εισαγωγή σε Κόκκινο-Μαύρο ένδρο: Παράδειγµα: Εισαγωγή του 4 23

ιαγραφή από Κοκκινό-µαυρο ένδρο Αρχικά, διαγραφή όπως σε δυαδικό δένδρο αναζήτησης. y: ο κόµβος που θα διαγραφεί από το δένδρο y έχει το πολύ ένα παιδί. Στη συνέχεια, ελέγχουµε εάν ισχύουν οι ιδιότητες χρωµατισµού, και εάν όχι, εκτελούµε κατάλληλες ενέργειες. 1. Ο y είναι κόκκινος ή είναι µαύρος µε κόκκινο παιδί: εν υπάρχει πρόβληµα. 2. Ο y είναι µαύρος µε µαύρο παιδί: Η διαγραφή του y δηµιουργεί (τουλάχιστον) ένα µονοπάτι από τη ρίζα µε µαύρο ύψος µικρότερο κατά ένα. Υποθέτουµε ότι η µονάδα µαύρου χρώµατος του y µεταφέρεται στο παιδί του, το οποίο τώρα γίνεται διπλά µαύρο (που είναι µη επιτρεπτό). Πρέπει να µεταφέρουµε την επιπλέον µονάδα µαύρου χρώµατος προς τα επάνω στο δένδρο µέχρι: να φθάσουµε στη ρίζα ή να βρούµε έναν κατάλληλο κόκκινο κόµβο τον οποίο χρωµατίζουµε µαύρο και τερµατίζουµε ή να εκτελέσουµε κατάλληλες περιστροφές και επαναχρωµατισµούς κάποιων κόµβων ώστε να λυθεί το πρόβληµα. 24

ιαγραφή από Κοκκινό-µαυρο ένδρο Θεωρούµε ότι το δένδρο υλοποιείται µε κόµβο φρουρό (όλοι οι null δείκτες δείχνουν στον κόµβο φρουρό). 25

ιαγραφή από Κοκκινό-µαυρο ένδρο x: το (διπλά µαύρο) παιδί του κόµβου που διαγράφηκε. Έστω w ο κόµβος-αδελφός & p ο πατέρας του x. (Ο w δεν µπορεί να είναι ο κόµβος φρουρός. Γιατί;) Έστω ότι ο x είναι αριστερό παιδί του p. (Η περίπτωση που ο x είναι δεξιό παιδί του p είναι συµµετρική.) 1. Ο w έχει κόκκινο χρώµα. Αναγόµαστε στην περίπτωση 2, αλλάζοντας το χρώµα του w σε µαύρο και του p σε κόκκινο & εκτελώντας µια αριστερή περιστροφή γύρω από τον πατέρα του x (περίπτωση (α) σχήµατος). 2. Ο w έχει µαύρο χρώµα. a. Και τα δύο παιδιά του w είναι µαύρα. Αλλάζουµε το χρώµα του w σε κόκκινο, του x σε µαύρο (από διπλά µαύρο) & µεταφέρουµε το µαύρο που αφαιρέσαµε από τους w, x στον p. Αν ο p είναι κόκκινος, γίνεται µαύρος και ο αλγόριθµος τερµατίζει. ιαφορετικά, ο p γίνεται διπλά µαύρος και η διαδικασία επαναλαµβάνεται µε x = p. b. Το w->left είναι κόκκινο και το w->right µαύρο. Αλλάζουµε το χρώµα του w σε κόκκινο και του w- >left σε µαύρο & εκτελούµε περιστροφή γύρω από τον w Μεταπίπτουµε στην περίπτωση 2c. c. Το w->right είναι κόκκινο. Αλλάζουµε το χρώµα του w->right σε µαύρο, του w σε ό,τι ήταν το χρώµα του p και του p σε µαύρο & εκτελούµε περιστροφή γύρω από τον p. Ο αλγόριθµος τερµατίζει. Εάν ο x φθάσει στη ρίζα του δένδρου, αγνοούµε την επιπλέον µονάδα µαύρου χρώµατος -- τερµατισµός 26

ιαγραφή από Κοκκινό-µαυρο ένδρο Σηµείωση: Στο σχήµα, όπου υπάρχει η επιγραφή x, υπάρχει µία επιπλέον µονάδα µαύρου χρώµατος. Πολυπλοκότητα χρόνου της RB-Delete(): Ο(log n) Πλήθος περιστροφών ανά διαγραφή: το πολύ 3 27

Αρθρωτά (Splay) ένδρα (Sleator & Tarjan, 1985) υαδικά δένδρα αναζήτησης (κάθε κόµβος έχει τα πεδία: key, data, left, right) ιαφορά από δυαδικά δένδρα αναζήτησης τρόπος εκτέλεσης LookUp( ), Insert( ) και Delete( ). Αν το δένδρο έχει n στοιχεία, δεν είναι εγγυηµένο ότι οι διαδικασίες αυτές εκτελούνται σε O(log n) χρόνο. Υπάρχει όµως η εξής εγγύηση: Κάθε ακολουθία από m αναζητήσεις, εισαγωγές, διαγραφές, ξεκινώντας από άδειο δένδρο, εκτελείται σε Ο(m logn) χρόνο. ηλαδή: To κόστος καθεµίας από αυτές τις λειτουργίες κατά µέσο όρο (amortized κόστος λειτουργίας) είναι O(logn). Αυτό δεν αποκλείει να: υπάρχει εκτέλεση κάποιας λειτουργίας (στην ακολουθία) µε κόστος πολύ υψηλό, π.χ., Ω(n), αλλά αυτό συµβαίνει αφού έχουν προηγηθεί πολλές λειτουργίες µε κόστος πολύ µικρό. 28

Αρθρωτά ένδρα Ιδέα (παρόµοια µε το (ευρετικό) Move-To-Front) Κάθε φορά που ένα κλειδί είναι το αποτέλεσµα µιας επιτυχηµένης αναζήτησης στο δένδρο, ο κόµβος του µετακινείται στη ρίζα. Κύρια Λειτουργία Splay(K,T), όπου K κλειδί, Τ δένδρο: τροποποιεί το Τ έτσι ώστε το προκύπτον δένδρο 1. είναι επίσης δυαδικό δένδρο αναζήτησης, και 2. έχει το κλειδί Κ στη ρίζα (το Κ υπάρχει στο δένδρο). Σηµείωση: Κάποιοι συγγραφείς ακολουθούν το εξής: αν το Κ δεν υπάρχει στο δένδρο, η ρίζα περιέχει το κλειδί που είναι ο προηγούµενος (ή ο επόµενος) του Κ στην ενδοδιατεταγµένη διάσχιση του Τ. Τα δένδρα των οποίων η διαχείριση βασίζεται στη λειτουργία Splay λέγονται αρθρωτά δένδρα. 29

Υλοποίηση Λειτουργιών Αρθρωτών ένδρων Αναζήτηση κλειδιού Κ αναζητούµε το Κ όπως στα δυαδικά δένδρα αναζήτησης, και εάν βρεθεί, εκτελούµε τη λειτουργία Splay(K,T) ώστε ο κόµβος που περιέχει το Κ να γίνει ρίζα του δένδρου. Εισαγωγή κόµβου <K,D> (κλειδί Κ, πληροφορία D) κάνουµε εισαγωγή των Κ και D όπως ακριβώς στα δυαδικά δένδρα αναζήτησης και κατόπιν εκτελούµε τη λειτουργία Splay(K,T) ώστε ο κόµβος που περιέχει τα Κ και D να γίνει ρίζα του δένδρου. ιαγραφή κόµβου <K,D> (κλειδί Κ, πληροφορία D) κάνουµε διαγραφή των Κ και D όπως ακριβώς στα δυαδικά δένδρα αναζήτησης και κατόπιν εκτελούµε τη λειτουργία Splay(P,T), όπου P ο κόµβος-πατέρας του κόµβου <K,D>, ώστε ο κόµβος αυτός να γίνει ρίζα του δένδρου. 30

Υλοποίηση της Λειτουργίας Splay(Κ,Τ) Πρώτα αναζητούµε το Κ µε το γνωστό τρόπο, και αποθηκεύουµε το µονοπάτι που ακολουθήσαµε σε στοίβα. Έστω P ο τελευταίος κόµβος σε αυτό το µονοπάτι. Αν το Κ υπάρχει στο δένδρο, θα βρίσκεται στον P. Μετά την Splay, ο P θα πρέπει να βρίσκεται στη ρίζα. ιακρίνουµε περιπτώσεις: 1. Ο P δεν έχει παππού (δηλαδή, το Parent(P) είναι η ρίζα). Εκτελούµε µια απλή περιστροφή. 31

Υλοποίηση της Λειτουργίας Splay(Κ,Τ) (συνέχ.) 2. Ο P και ο Parent(P) είναι και οι δύο είτε αριστερά παιδιά, είτε δεξιά παιδιά. Εκτελούµε δύο απλές περιστροφές προς την ίδια κατεύθυνση, την 1 η γύρω από τον παππού του P και την 2 η γύρω από τον πατέρα του P. Προσοχή: η περιστροφή γύρω από τον παππού του P εκτελείται πρώτη. 32

Υλοποίηση της Λειτουργίας Splay (συνέχεια) 3. Ένας από τους P, Parent(P) είναι αριστερό παιδί και ο άλλος δεξιό παιδί. Εκτελούµε δύο απλές περιστροφές αλλά σε αντίθετες κατευθύνσεις, την 1 η γύρω από τον πατέρα του P και την 2 η γύρω από τον παππού του P. Προσοχή: η περιστροφή γύρω από τον πατέρα του P εκτελείται πρώτη. 33

Παράδειγµα: Splay(D,T) 34

ένδρα Αναζήτησης Πολλαπλής ιακλάδωσης (ή πολύ-κατευθυνόµενα δένδρα αναζήτησης ή δένδρα αναζήτησης m-δρόµων) Γενίκευση των δυαδικών δένδρων αναζήτησης. Επινοήθηκε καθώς στον τοµέα των Βάσεων εδοµένων είναι επιθυµητά δένδρα αναζήτησης µικρού ύψους. Στα δένδρα αναζήτησης πολλαπλής διακλάδωσης, έχουµε κόµβους µε: d-1 διατεταγµένα κλειδιά k 1 k d-1 και d διατεταγµένα παιδιά (ρίζες υποδένδρων A 0,, A d-1 ), για τα οποία ισχύει ότι: (κλειδιά A 0 ) k 1 k i (κλειδιά A i ) k i +1, 1 i d-2 k d-1 (κλειδιά A d-1 ) Εάν ένα δένδρο είναι m-δρόµων, τότε οι κόµβοι έχουν το πολύ m-1 κλειδιά (π.χ., το σχήµα απεικονίζει ένα δένδρο 7-δρόµων). 35

Αναζήτηση Αναζήτηση του κλειδιού k τρέχων κόµβος = η ρίζα του δένδρου; Όσο ο δείκτης στον τρέχοντα κόµβο NULL Αναζητούµε το k στα κλειδιά του τρέχοντος κόµβου; Εάν βρεθεί εκεί, το k υπάρχει στο δένδρο αλλιώς εάν k < k 1 του τρέχοντος κόµβου τότε τρέχων κόµβος = ρίζα A 0 αλλιώς εάν k i < k < k i +1 τότε τρέχων κόµβος = ρίζα A i αλλιώς τρέχων κόµβος= ρίζα A d-1 Το k δεν υπάρχει στο δένδρο 36

(a,b)- ένδρα Ιδέα: Γιατί το δένδρο να µην είναι τέλεια ισοζυγισµένο? Μπορούµε να επιτύχουµε όλα τα φύλλα να έχουν το ίδιο βάθος για οποιοδήποτε πλήθος κόµβων. Ένα (a,b)-δένδρο είναι δένδρο αναζήτησης πολλαπλής διακλάδωσης και έχει: a 2 και συνήθως b 2 a η ρίζα έχει d-1 κλειδιά και d παιδιά, 2 d b οι υπόλοιποι εσωτερικοί κόµβοι έχουν t-1 κλειδιά και t παιδιά, a t b τα φύλλα έχουν t-1 κλειδιά, a t b. 37

Ειδικές Περιπτώσεις (a,b)- ένδρων Β-δέντρα (βαθµού m) (Bayer 72) = ( m/2, m)- ένδρα Κοκκινό-µαυρα ένδρα = (2,4)- ένδρα x = x x z = x z = u x z x u z 38

(a,b)- ένδρα Μεταξύ όλων των (a,b)-δένδρων ύψους h, ποιο είναι εκείνο µε τους λιγότερους κόµβους? Ποιο είναι το ύψος αυτού του δένδρου ως προς το πλήθος κόµβων? Μεταξύ όλων των (a,b)-δένδρων ύψους h, ποιο είναι εκείνο µε τους περισσότερους κόµβους? Ποιο είναι το ύψος αυτού του δένδρου ως προς το πλήθος κόµβων? Το ύψος ενός (a,b)-δένδρου µε n κόµβους είναι Θ(log n). Ποια είναι η πολυπλοκότητα χρόνου της διαδικασίας αναζήτησης σε ένα (α,β)-δένδρο µε n κόµβους? 39

(2,3)- ένδρα Τα (2,3)-δένδρα έχουν 2 τύπους κόµβων: 2-κόµβους (µε 1 κλειδί και 2 παιδιά) 3-κόµβους (µε 2 κλειδιά και 3 παιδιά) 3-κόµβος 2-κόµβος 40

Εισαγωγή σε (2,3)- ένδρο Αλγόριθµος 1. Εύρεση του φύλλου στο οποίο θα πρέπει να εισαχθεί το νέο κλειδί. 2. Αν υπάρχει χώρος στον κόµβο (2-κόµβος, έχει 1 κλειδί), το νέο κλειδί εισάγεται εκεί και σταµατάµε. 3. Αν δεν υπάρχει χώρος (3-κόµβος, έχει 2 κλειδιά), ιάσπαση: χωρίζουµε τον κόµβο σε δύο 2-κόµβους, έναν µε το πρώτο και έναν µε το τρίτο κλειδί, και εάν υπάρχει κόµβος-πατέρας, περνάµε το µεσαίο κλειδί στον κόµβο-πατέρα για να αποθηκευτεί εκεί και επαναλαµβάνουµε στον κόµβο-πατέρα. Εάν δεν υπάρχει κόµβος-πατέρας, τότε ο κόµβος που χωρίσαµε είναι η ρίζα, και το µεσαίο κλειδί µπαίνει σε έναν 2-κόµβο µόνο του και αποτελεί τη νέα ρίζα του (2,3)-δένδρου. Σηµειώνεται ότι η διαδικασία επαναλαµβάνεται µέχρι είτε να βρούµε χώρο για το κλειδί σε κάποιο κόµβο στο µονοπάτι προς τη ρίζα, είτε να φτάσουµε στη ρίζα και να τη χωρίσουµε, οπότε το ύψος του δένδρου αυξάνει. Πολυπλοκότητα χρόνου = O(log n) 41

Παράδειγµα Εισαγωγής σε (2,3)-δένδρο Εισαγωγή του κλειδιού Ο στο δένδρο. 42

ιαγραφή σε (2,3)-δένδρο Λόγω της διαγραφής, ενδέχεται κάποιοι κόµβοι να µένουν χωρίς καθόλου κλειδιά. Όταν αυτό συµβαίνει, αν ο κόµβος έχει κάποιον αδελφικό κόµβο µε δύο κλειδιά, µπορούµε να µεταφέρουµε ένα κλειδί από τον αδελφικό κόµβο για να επιλύσουµε το πρόβληµα. π.χ., διαγραφή του Ε M P P 43

ιαγραφή σε (2,3)-δένδρο Αλγόριθµος 1. Αν το προς διαγραφή κλειδί είναι σε κόµβο φύλλο, διάγραψέ το. Αν όχι, αντικατάστησε το κλειδί µε το επόµενό του στην ενδο-διατεταγµένη διάσχιση και διάγραψε το επόµενό του από την αρχική του θέση (σε κόµβο φύλλο). 2. Έστω Ν ο κόµβος από τον οποίο διαγράφεται το κλειδί. Αν ο Ν έχει ένα κλειδί µετά τη διαγραφή, ο αλγόριθµος τερµατίζει. ιαφορετικά, ο Ν δεν έχει κανένα κλειδί και έχει 1 ή κανένα παιδί: a. Αν ο Ν είναι η ρίζα, διάγραψέ τον. Αν ο Ν δεν έχει παιδί, το δένδρο γίνεται άδειο. ιαφορετικά, το παιδί του Ν γίνεται ρίζα. Τερµατίζουµε. (Τώρα, ο Ν έχει τουλάχιστον έναν αδελφικό κόµβο. Γιατί?) b. ανεισµός: Αν ο Ν έχει έναν αδελφικό 3-κόµβο Ν ακριβώς στα δεξιά του, έστω S το κλειδί του πατρικού κόµβου των Ν, Ν που χωρίζει τα δύο υποδένδρα. Μετακινούµε το S στο Ν, και το αντικαθιστούµε στον πατέρα του µε το µικρότερο κλειδί του Ν. Αν Ν και Ν είναι εσωτερικοί κόµβοι, αλλάζουµε το αριστερότερο παιδί του Ν σε δεξιό παιδί του Ν. Τα Ν, Ν έχουν από ένα κλειδί το καθένα, και ο αλγόριθµος τερµατίζει. Αν όχι, ελέγχουµε για 3-κόµβο ακριβώς στα αριστερά. c. (Αν όχι, ο Ν έχει έναν αδελφικό 2-κόµβο Ν ελέγχουµε πρώτα δεξιά και µετά αριστερά.) Συνένωση: Έστω P ο πατέρας των Ν, Ν και S το κλειδί που χωρίζει τους Ν, Ν στον P. Συνενώνουµε το S και το κλειδί του Ν σε έναν νέο 3- κόµβο,ο οποίος αντικαθιστά τα Ν,Ν. Θέτουµε Ν = P και επαναλαµβάνουµε το βήµα 2 για τον P. 44

Παράδειγµα ιαγραφής σε (2,3)-δένδρο 45