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

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

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

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

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

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

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

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

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

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

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

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

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

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

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

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

Δομές Αναζήτησης. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

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

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

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

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

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

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

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

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

Πίνακες Συμβόλων. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

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

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

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

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

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

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

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

Δομές Δεδομένων και Αλγόριθμοι. Λουκάς Γεωργιάδης

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

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

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

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

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

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

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

Μπαλτάς Αλέξανδρος 21 Απριλίου 2015

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

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

Κατηγορίες Συμπίεσης. Συμπίεση με απώλειες δεδομένων (lossy compression) π.χ. συμπίεση εικόνας και ήχου

Αντισταθμιστική ανάλυση

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

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

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

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

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

Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών. Καθηγητής: Ν. Μ. Μισυρλής 29 Μαΐου / 18

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

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

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

ΗΥ360 Αρχεία και Βάσεις εδοµένων

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

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

Δυναμική Διατήρηση Γραμμικής Διάταξης

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

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

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

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

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

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

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

Κεφάλαιο 7 Λεξικά και Δυαδικά Δένδρα Αναζήτησης

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

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

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

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

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΑΥΤΟΡΓΑΝΟΥΜΕΝΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

Insert (P) : Προσθέτει ένα νέο πρότυπο P στο λεξικό D. Delete (P) : Διαγράφει το πρότυπο P από το λεξικό D

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

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

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

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

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

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

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

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

Πληροφορική 2. Δομές δεδομένων και αρχείων

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

Transcript:

Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων κλειδί από ολικά διατεταγμένο σύνολο όπου το κάθε στοιχείο έχει ένα Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου με κλειδί Αναζήτηση στοιχείου με δεδομένο κλειδί Άλλες χρήσιμες λειτουργίες είναι: Διαγραφή ενός καθορισμένου στοιχείου Επιλογή 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-οστή προσπέλαση έχουμε