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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AVL-trees C++ implementation

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

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

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

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

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

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

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

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

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

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

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

ΔυαδικάΔΕΝΔΡΑΑναζήτησης

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

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

Βασικές Έννοιες Δοµών Δεδοµένων

Συγκρίσιμα Αντικείμενα (comparable)

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

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 3. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Εφαρµογές των Δέντρων Δυαδικής Αναζήτησης

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

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

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

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

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

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

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

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

Συλλογές, Στοίβες και Ουρές

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

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

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

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

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

Προγραμματιστικές Τεχνικές

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

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

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

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Εργαστήριο 5 Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ με αλφαβητική σειρά

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

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

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

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

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

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

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

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

p

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

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

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

Εργαστήριο 8: Αναδρομική διεργασία εισαγωγής καινούριου κόμβου σε ΔΔΑ

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

Transcript:

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

Περίληψη Δέντρα Δυαδικής Αναζήτησης Υλοποιήσεις εισαγωγής και αναζήτησης Χαρακτηριστικά επιδόσεων ΔΔΑ Εισαγωγή στη ρίζα ΔΔΑ Υλοποιήσεις άλλων λειτουργιών: Επιλογή, διαµέριση, αφαίρεση, ένωση Δοµές Δεδοµένων 14-2

Δέντρα δυαδικής αναζήτησης Ανακεφαλαίωση από προηγούµενο µάθηµα: Και στην ακολουθιακή και στη δυαδική αναζήτηση κάποιες λειτουργίες θα έχουν κόστος Ο(Ν) Χρήση πίνακα ή διατεταγµένης λίστας δεν είναι η καλύτερη λύση Βελτιώσεις: Χρήση ρητής δοµής δέντρου για την υλοποίηση του πίνακα συµβόλων Αναδροµικές κλήσεις στα υποδέντρα Πολυπλοκότητα εξαρτάται από το ύψος του δέντρου Άρα Ο(logN) αν το δέντρο είναι «ισοζυγισµένο» Δοµές Δεδοµένων 14-3

Δέντρα δυαδικής αναζήτησης Ορισµός δέντρου Δυαδικής Αναζήτησης (ΔΔΑ) Δυαδικό δέντρο µε κλειδιά σε κάθε εσωτερικό κόµβο Κάθε εσωτερικός κόµβος έχει ακριβώς 2 παιδιά Για κάθε εσωτερικό κόµβο Οι κόµβοι του αριστερού υποδέντρου έχουν µικρότερα κλειδιά Οι κόµβοι του δεξιού υποδέντρου έχουν µεγαλύτερα κλειδιά Κλάση ΔΔΑ Ορίζει δοµή κόµβων και ρίζα, αρχικά κενή class ST { private class Node { ITEM item; Node l, r; //αναφορές σε αριστερό και δεξί υποδέντρο Node(ITEM x) { item = x; l=null; r=null; } } private Node head; ST(int maxn) { head = null; } Δοµές Δεδοµένων 14-4

Δέντρα δυαδικής αναζήτησης Υλοποίηση αναζήτησης: Δες αν το κλειδί που ψάχνουµε είναι ίσο µε το κλειδί της ρίζας Αν όχι αναδροµική κλήση στο αριστερό ή στο δεξί υποδέντρο. Εγγύηση ότι αν το κλειδί είναι µικρότερο από το κλειδί της ρίζας, αρκεί να ψάξουµε στο αριστερό υποδέντρο και αντίστροφα Υλοποίηση εισαγωγής: Προχωράµε στο δέντρο µε παρόµοιο τρόπο µέχρι να βρουµε τη σωστή θέση για να διατηρηθεί η ιδιότητα του ΔΔΑ Εισαγωγή στη θέση κάποιου εξωτερικού κόµβου Μπορούµε να χρησιµοποιήσουµε και άλλες προσεγγίσεις Δοµές Δεδοµένων 14-5

Δέντρα δυαδικής αναζήτησης Τάξη ΔΔΑ Αναδροµική εισαγωγή και αναζήτηση private Node insertr(node h, ITEM x) { if (h == null) return new Node(x); if (less(x.key(), h.item.key())) h.l = insertr(h.l, x); else h.r = insertr(h.r, x); return h; } void insert(item x) { head = insertr(head, x); } private ITEM searchr(node h, KEY v) { if (h == null) return null; if (equals(v, h.item.key())) return h.item; if (less(v, h.item.key())) return searchr(h.l, v); else return searchr(h.r, v); } ITEM search(key key) { return searchr(head, key); } Δοµές Δεδοµένων 14-6

Δέντρα δυαδικής αναζήτησης Παραδείγµατα αναζήτησης H: καταλήγουµε σε εσωτερικό κόµβο Μ: καταλήγουµε σε εξωτερικό κόµβο (null) Παράδειγµα εισαγωγής M: ανεπιτυχής αναζήτηση Εισαγωγή νέου κλειδιού Χειρισµός διπλών κλειδιών Δεν εισάγονται συνεχόµενα Παράδειγµα: 3 εισαγωγές του A Συνεχίζουµε την αναζήτηση Σταµατάµε µόνο όταν βρούµε null Μπορούµε να εντοπίζουµε όλα τα διπλά κλειδιά Δοµές Δεδοµένων 14-7

Δέντρα δυαδικής αναζήτησης Παράδειγµα κατασκευής Δυαδικού Δέντρου Αναζήτησης µε διαδοχικές εισαγωγές Δοµές Δεδοµένων 14-8

Δέντρα δυαδικής αναζήτησης Απλή επεξεργασία ΔΔΑ µε διάσχιση Παράδειγµα 1: καταµέτρηση του αριθµού των εσωτερικών κόµβων Αρκεί µία διάσχιση του δέντρου, π.χ. προδιατεταγµένη Ή θα µπορούσαµε να έχουµε έναν µετρητή που να αυξάνεται σε κάθε εισαγωγή private int countr(node h) { if (h == null) return 0; return 1 + countr(h.l) + countr(h.r); } int count() { return countr(head); } Δοµές Δεδοµένων 14-9

Δέντρα δυαδικής αναζήτησης Απλή επεξεργασία ΔΔΑ µε διάσχιση Παράδειγµα 2: ταξινοµηµένη εκτύπωση Αρκεί να κάνουµε µία ενδοδιατεταγµένη διάσχιση private String tostringr(node h) { if (h == null) return ""; String s = tostringr(h.l); s += h.item.tostring() + "\n"; s += tostringr(h.r); return s; } public String tostring() { return tostringr(head); } Δοµές Δεδοµένων 14-10

Δέντρα δυαδικής αναζήτησης Μη αναδροµικοί αλγόριθµοι ΔΔΑ Χρήση βρόχου αντί αναδροµής για εισαγωγή Αρχικά έχουµε αναζήτηση και µετά εισαγωγή public void insert(item x) { KEY key = x.key(); if (head == null) { head = new Node(x); return; } Node p = head, q = p; while (q!= null) if (less(key, q.item.key())) { p = q; q = q.l; } else { p = q; q = q.r; } if (less(key, p.item.key())) p.l = new Node(x); else p.r = new Node(x); } Δοµές Δεδοµένων 14-11

Χαρακτηριστικά επιδόσεων ΔΔΑ Τα ΔΔΑ έχουν δοµή παρόµοια µε τη λειτουργία της Quicksort Η ρίζα παίζει το ρόλο του pivot της Quicksort Όλα τα στοιχεία στο αριστερό υποδέντρο είναι µικρότερα της ρίζας Όλα τα στοιχεία στο δεξιό υποδέντρο είναι µεγαλύτερα της ρίζας Στη Δυαδική αναζήτηση µε ταξινοµηµένο πίνακα: Αναζήτηση: O(logN) Εισαγωγή: Ο(Ν) χειρότερη και µέση περίπτωση Οι επιδόσεις στα ΔΔΑ εξαρτώνται από το σχήµα του δέντρου (συγκεκριµένα από το ύψος) Το ύψος είναι από lοgn έως N Δοµές Δεδοµένων 14-12

Χαρακτηριστικά επιδόσεων ΔΔΑ Χειρότερη περίπτωση: Ν συγκρίσεις! Δέντρα που εκφυλίζονται σε λίστες Εµφανίζονται όταν τα κλειδιά είναι ήδη ταξινοµηµένα (όπως και στην Quicksort) Εµφανίζονται και σε άλλες διατάξεις των κλειδιών Δοµές Δεδοµένων 14-13

Χαρακτηριστικά επιδόσεων ΔΔΑ Όµως κατά µέσο όρο µε τυχαία κλειδιά: 1. Η επιτυχής αναζήτηση απαιτεί 1.39lοgN = Ο(logN) συγκρίσεις Ανάλυση παρόµοια µε αυτή της quicksort Βασισµένη στον υπολογισµό της εσωτερικής διαδροµής του δέντρου Υπενθύµιση: µήκος εσωτερικής διαδροµής: άθροισµά των επιπέδων ολων των εσωτερικών κόµβων Οµοίως ορίζεται το µήκος εξωτερικής διαδροµής Από Κεφ. 5: µήκος εξωτερικής = µήκος εσωτερικής + 2Ν 2. Η ανεπιτυχής αναζήτηση και η εισαγωγή έχουν επίσης ίδιο µέσο κόστος 1.39lοgN = Ο(logN) Αρκεί να υπολογίσουµε το µέσο µήκος εξωτερικής διαδροµής Έχουµε Ν+1 ισοπίθανους εξωτερικούς κόµβους Κόστος = 1/(Ν+1) *(µέσο µήκος εξωτερικής διαδροµής) Κόστος αναζήτησης 39% υψηλότερο από τη δυαδική αναζήτηση Κερδίζουµε όµως σηµαντικά στο κόστος της εισαγωγής! Δοµές Δεδοµένων 14-14

Δοµές Δεδοµένων 14-15 Χαρακτηριστικά επιδόσεων ΔΔΑ 2453 2343 200000 995 900 100000 431 407 50000 174 169 25000 69 54 34723 12749 53 10684 10848 2 12500 24 18 4077 1853 19 1445 1260 1 5000 11 9 977 457 8 356 291 0 2500 6 5 250 123 4 90 81 0 1250 ΔΔΑ ΔΑ ΤΛ ΑΠ ΔΔΑ ΔΑ ΤΛ ΑΠ Ν Αναζήτηση Κατασκευή

Εισαγωγή στη ρίζα ΔΔΑ Η εισαγωγή που είδαµε γίνεται σε εξωτερικό κόµβο Πολλές φορές θέλουµε η εισαγωγή να γίνεται στη ρίζα Παραδείγµατα: Μία καινούρια σελίδα µπορεί να γίνει γρήγορα δηµοφιλής, οι µηχανές αναζήτησης θα πρέπει να την ανακτούν σχετικά γρήγορα Εµπορικές συναλλαγές στο Internet: καλύτερα να είναι πιο πάνω στο δέντρο οι πιο πρόσφατες συναλλαγές ή οι ενεργές συναλλαγές Υλοποίηση εισαγωγής στη ρίζα αντί στα φύλλα Ο νέος κόµβος γίνεται ρίζα Συγκρίνουµε τον νέο κόµβο µε την παλιά ρίζα Μεγαλύτερος: η παλιά ρίζα θα µπει αριστερά του Μικρότερος: η παλιά ρίζα θα µπει δεξιά του Ο νέος κόµβος όµως δεν είναι στο σωστό σηµείο! Μεγαλύτερος: ίσως υπάρχουν µικρότεροι στο δεξί υποδέντρο Μικρότερος: ίσως υπάρχουν µεγαλύτεροι στο αριστερό υποδέντρο Υλοποίηση µε διαδοχικές περιστροφές Δοµές Δεδοµένων 14-16

Εισαγωγή στη ρίζα ΔΔΑ Περιστροφή (Rotation) σε ΔΔΑ Αντιµετάθεση της ρίζας µε ένα από τα παιδιά της Δεξιά περιστροφή: αριστερό παιδί γίνεται ρίζα, η ρίζα πάει στο δεξιό υποδέντρο Δεξιό υποδέντρο του αριστερού παιδιού: πρέπει να γίνει αριστερό υποδέντρο της παλιάς ρίζας Αριστερή περιστροφή: δεξί παιδί γίνεται ρίζα, η ρίζα πάει στο αριστερό υποδέντρο Διατηρεί τη σχετική θέση των κλειδιών των παιδιών Δοµές Δεδοµένων 14-17

Εισαγωγή στη ρίζα ΔΔΑ Δεξιά περιστροφή private Node rotr(node h) { Node x = h.l; h.l = x.r; x.r = h; return x; } Αριστερή περιστροφή private Node rotl(node h) { Node x = h.r; h.r = x.l; x.l = h; return x; } Δοµές Δεδοµένων 14-18

Εισαγωγή στη ρίζα ΔΔΑ Υλοποίηση εισαγωγής στη ρίζα Εισάγουµε τον νέο κόµβο στο κατάλληλο υποδέντρο Ολοκληρώνουµε µε την κατάλληλη περιστροφή private Node insertt(node h, ITEM x) { if (h == null) return new Node(x); if (less(x.key(), h.item.key())) { else { h.l = insertt(h.l, x); h = rotr(h); } h.r = insertt(h.r, x); h = rotl(h); } return h; } public void insert(item x) { head = insertt(head, x); } Δοµές Δεδοµένων 14-19

Εισαγωγή στη ρίζα ΔΔΑ Πώς λειτουργεί η εισαγωγή στη ρίζα; Αρχικά κατεβαίνουµε µέχρι τα φύλλα Εισάγουµε το κλειδί στο σωστό σηµείο Κάθε περιστροφή το κάνει ρίζα υποδέντρου Αν µπήκε στο αριστερό υποδέντρο, δεξιά περιστροφή Αν µπήκε στο δεξί υποδέντρο, αριστερή περιστροφή Τελικά το κλειδί φτάνει µέχρι τη ρίζα Παράδειγµα: εισαγωγή του G Ιδιότητες εισαγωγής στη ρίζα Οι πιο πρόσφατες εισαγωγές είναι κοντά στη ρίζα Μπορούµε να κάνουµε το ίδιο και στις αναζητήσεις Εντοπίζουµε το κλειδί και µετά το φέρνουµε στη ρίζα Οι πιο πρόσφατες αναζητήσεις είναι κοντά στη ρίζα Δοµές Δεδοµένων 14-20

Εισαγωγή στη ρίζα ΔΔΑ Παράδειγµα κατασκευής Δυαδικού Δέντρου Αναζήτησης µε διαδοχικές εισαγωγές στη ρίζα: Εισαγωγή των A S E R C H I N G X M P L Δοµές Δεδοµένων 14-21

Υλοποιήσεις άλλων λειτουργιών Επιλογή k-οστού µικρότερου κόµβου Μετράµε τους κόµβους ανά υποδέντρο Απαιτεί ύπαρξη µετρητή σε κάθε κόµβο: µετρά πόσους κόµβους έχει το υποδέντρο µε ρίζα τον κόµβο Η εισαγωγή και η αφαίρεση πρέπει να ενηµερώνουν τον µετρητή! Έστω ότι το αριστερό υποδέντρο έχει t κλειδιά Αν k<t ψάξε το k-οστό κλειδί στα αριστερά Αν k>t ψάξε το (k-t-1)-οστό κλειδί στα δεξιά private ITEM selectr(node h, int k) { //για το k-οστό το όρισμα πρέπει να είναι k-1 if (h == null) return null; int t = (h.l == null)? 0 : h.l.n; /*πεδίο Ν σε κάθε κόμβο δηλώνει το μέγεθος του υποδέντρου με ρίζα τον κόμβο*/ if (t > k) return selectr(h.l, k); if (t < k) return selectr(h.r, k-t-1); return h.item; } ITEM select(int k) { return selectr(head, k); } Δοµές Δεδοµένων 14-22