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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Στοιχειώδεις Δομές Δεδομένων

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

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

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

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

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

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

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

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

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

Μάθημα 22: Δυαδικά δέντρα (Binary Trees)

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

Δομές Δεδομένων Ενότητα 5

AVL-trees C++ implementation

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

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

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

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

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

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

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

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

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

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

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

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

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

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

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

Δομές Δεδομένων (Data Structures)

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

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

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

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

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

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

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

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

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 3 Δέντρα

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 9: Τα ΔΔΑ ως Αναδρομικές Δομές Δεδομένων-Εφαρμογή Δυαδικών Δέντρων: Κωδικοί Huffman. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

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

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

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

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

Transcript:

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

Δομές Αναζήτησης Χειριζόμαστε ένα σύνολο στοιχείων κλειδί από ολικά διατεταγμένο σύνολο όπου το κάθε στοιχείο έχει ένα Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου με κλειδί Αναζήτηση στοιχείου με δεδομένο κλειδί Άλλες χρήσιμες λειτουργίες είναι: Διαγραφή ενός καθορισμένου στοιχείου Επιλογή j-οστoύ στοιχείου : Εύρεση στοιχείου με το j-οστό μικρότερο κλειδί Ταξινόμηση των στοιχείων σύμφωνα με τα κλειδιά τους Εύρεση προκάτοχου ή διάδοχου Ένωση δύο δομών αναζήτησης

Δομές Αναζήτησης Διασύνδεση δομής λεξικού Dictionary() κατασκευή δομής λεξικού void insert(key k, Item i) εισαγωγή αντικειμένου i με κλειδί k Item search(key k) επιστροφή αντικειμένου με κλειδί k int rank(key k) τάξη κλειδιού k = πλήθος κλειδιών μικρότερων του k Key select(int r) επιστροφή του κλειδιού τάξης r void delete(key k) διαγραφή αντικειμένου με κλειδί k boolean isempty() έλεγχος αν η δομή λεξικού είναι κενή int size() αριθμός αντικειμένων στη δομή λεξικού Iterable<Key> keys() όλα τα κλειδιά στη δομή λεξικού

Δομές Αναζήτησης Διατεταγμένος πίνακας: χρόνος αναζήτησης (δυαδική αναζήτηση) Αναζήτηση 25 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93

Δομές Αναζήτησης Διατεταγμένος πίνακας: χρόνος αναζήτησης (δυαδική αναζήτηση) Αναζήτηση 25 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 Όμως η εισαγωγή ενός νέου στοιχείου απαιτεί χρόνο.

Δομές Αναζήτησης Για να πετύχουμε καλύτερο χρόνο εισαγωγής μπορούμε να χρησιμοποιήσουμε μια δενδρική δομή Αναζήτηση 25 33 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 19 33 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 5 8 12 19 25 26 31 33 42 58 59 78 81 90 93 19 25 26 26

Δομές Αναζήτησης Για να πετύχουμε καλύτερο χρόνο εισαγωγής μπορούμε να χρησιμοποιήσουμε μια δενδρική δομή 33 19 78 8 26 58 90 5 12 25 31 42 59 81 93 Δυαδικό δένδρο αναζήτησης Η ενδοδιάτεταγμένη διάσχιση του δένδρου επισκέπτεται τους κόμβους σε αύξουσα σειρά κλειδιού

Διάσχιση Δυαδικού Δένδρου void traverse(node h) { if (h == null) return; traverse(h.left); h.item.visit(); traverse(h.right); } ενδοδιάταξη (inorder) 6 4 14 2 5 12 15 1 3 8 13 7 9 11

Δομές Αναζήτησης χειρότερη περίπτωση μέση περίπτωση εισαγωγή αναζήτηση επιλογή εισαγωγή αναζήτηση διατεταγμένος πίνακας διατεταγμένη λίστα μη διατεταγμένος πίνακας μη διατεταγμένη λίστα δένδρο αναζήτησης (μη ισορροπημένο) τυχαιοποιημένο δένδρο ισορροπημένο δένδρο αναζήτησης κατακερματισμός (*) Συμβαίνει με εξαιρετικά μικρή πιθανότητα

14 21 16 19 23 7 12 15 20 3

root 14 21 16 19 23 7 12 15 20 3

Αν δεν υπάρχει πρόβλημα αποθηκευτικού χώρου που διατίθεται για το δένδρο τότε μπορούμε να έχουμε σε κάθε κόμβο ένα δείκτη προς το γονέα του. Αυτό απλοποιεί την υλοποίηση ορισμένων λειτουργιών. root 14 21 16 19 23 7 12 15 20 3

public class BST<Key extends Comparable<Key>, Item> { private Node root; // ρίζα του δυαδικού δένδρου αναζήτησης private class Node { private Key key; // κλειδί private Item item; // αντικείμενο private Node left, right; // σύνδεσμοι σε αριστερό και δεξί παιδί private int N; // πλήθος απογόνων } public Node(Key key, Item item, int N) { this.key = key; this.item = item; this.n = N; } private int size(node x) { if (x == null) return 0; else return x.n; } public int size() { return size(root); } }...

Αναζήτηση στοιχείου με κλειδί k Ξεκινάμε την αναζήτηση από τον κόμβο x=root Αν το κλειδί του x είναι k ή ο x είναι o κενός κόμβος τότε επιστρέφουμε το στοιχείο του x Αν το k είναι μικρότερο από το κλειδί του x τότε θέτουμε x=x.left και συνεχίζουμε την αναζήτηση στο υποδένδρο με ρίζα x Αν το k είναι μεγαλύτερο από το κλειδί του x τότε θέτουμε x=x.right και συνεχίζουμε την αναζήτηση στο υποδένδρο με ρίζα x

15< Αναζήτηση 15 14 21 16 19 23 7 12 15 20 3

15>14 14 21 Αναζήτηση 15 16 19 23 7 12 15 20 3

Αναζήτηση 15 14 21 15<16 16 19 23 7 12 15 20 3

Αναζήτηση 15 14 21 15=15 16 19 23 7 12 15 20 3

private Node search(node x, Key k) { if (x==null) return null; int c = k.compareto(x.key); // σύγκριση με το κλειδί του x if (c < 0) return search(x.left,k); else if (c > 0) return search(x.right,k); else return x; } public Item search(key k) { Node x = search(root, k); if (x == null) return null; else return x.item; } 14 21 16 search(15) 19 23 7 12 15 20 3

Εύρεση κόμβων με μέγιστο και ελάχιστο κλειδί 14 21 16 19 23 7 12 15 20 3

Εύρεση κόμβου με μέγιστο κλειδί Ξεκινάμε την αναζήτηση από τον κόμβο x=root Αν ο x έχει δεξί παιδί τότε θέτουμε x=x.right και συνεχίζουμε την αναζήτηση στο υποδένδρο με ρίζα x Διαφορετικά επιστρέφουμε τον x

Εύρεση κόμβου με ελάχιστο κλειδί Ξεκινάμε την αναζήτηση από τον κόμβο x=root Αν ο x έχει αριστερό παιδί τότε θέτουμε x=x.left και συνεχίζουμε την αναζήτηση στο υποδένδρο με ρίζα x Διαφορετικά επιστρέφουμε τον x

Επιλογή : Βρίσκει το στοιχείο τάξης r private Node select(node x, int r) { if (x==null) return null; int n = size(x.left); if (n > r) return select(x.left,r); else if (n < r) return select(x.right,r-n-1); else return x; } public Key select(int r) { Node x = select(root,r); return x.key; } [4] [7] [2] 7 12 [1] 15 [12] 16 select(6) 14 r=6 21 [4] r=1 [2] [1] r=1 r=6 [2] 19 [1] 23 20 [1] [1] 3 x [size(x)]

Τάξη : Βρίσκει πόσα κλειδιά είναι μεγαλύτερα του k private int rank(key k, Node x) { if (x==null) return 0; int c = k.compareto(x.key); // σύγκριση με το κλειδί του x if (c < 0) return rank(k,x.left); else if (c > 0) return 1 + size(x.left) + rank(k,x.right); else return size(x.left); rank(15) } [12] +0 public int rank(key k) { return rank(k,root); } [7] 14 +5 21 [4] [4] +0 [2] 16 [2] 19 [1] 23 [2] 7 12 [1] 15 [1] +0 20 [1] [1] 3 x [size(x)]

Εύρεση προκάτοχου και διάδοχου κόμβου του x x 14 21 προκάτοχος 16 19 23 3 7 12 15 διάδοχος 20 Προκάτοχος: έχει το αμέσως μικρότερο κλειδί Διάδοχος: έχει το αμέσως μεγαλύτερο κλειδί

Εύρεση προκάτοχου και διάδοχου κόμβου του x 14 21 προκάτοχος διάδοχος 16 19 23 x 3 7 12 15 20 Προκάτοχος: έχει το αμέσως μικρότερο κλειδί Διάδοχος: έχει το αμέσως μεγαλύτερο κλειδί

Εύρεση διάδοχου κόμβου του x Αν ο x έχει δεξί παιδί τότε επιστρέφουμε τον κόμβο με το ελάχιστο κλειδί στο υποδένδρο με ρίζα x.right Διαφορετικά επιστρέφουμε τον κατώτερο πρόγονο y του x το αριστερό παιδί του οποίου (y.left) είναι επίσης πρόγονος του x

Εισαγωγή νέου στοιχείου με κλειδί k (που δεν υπάρχει ήδη στο δένδρο) Αναζητούμε το κλειδί k στο δένδρο και βρίσκουμε τον κόμβο y που είναι γονέας του κενού κόμβου στον οποίο καταλήγει η αναζήτηση Δημιουργούμε νέο κόμβο x με κενά παιδιά και αποθηκεύουμε το νέο στοιχείο στον x Aν ο y δεν υπάρχει τότε θέτουμε root=x Διαφορετικά, κάνουμε τον x αριστερό παιδί του y αν η αναζήτηση ακολούθησε τον αριστερό σύνδεσμο του y. Διαφορετικά κάνουμε τον x δεξί παιδί του y

13< Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3

13<14 Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3

Εισαγωγή 13 13> 14 21 16 19 23 7 12 15 20 3

Εισαγωγή 13 14 21 13>12 16 19 23 7 12 15 20 3

Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3

Εισαγωγή 13 14 21 16 19 23 7 12 15 20 3 13

Εισαγωγή 11 14 21 16 19 23 7 12 15 20 3 11 13

private Node insert(node x, Key k, Item i) { if (x==null) return new Node(k,i,1); int c = k.compareto(x.key); // σύγκριση με το κλειδί του x } if (c < 0) x.left = insert(x.left, k,i); else if (c > 0) x.right = insert(x.right,k,i); else x.item = i; // το αντικείμενο i έχει κλειδί k==x.key x.n = size(x.left) + size(x.right) + 1; return x; insert(13) public void insert(key k, Item i) { root = insert(root,k,i); } 14 21 16 19 23 7 12 15 20 3 13

Εισαγωγή

Εισαγωγή, 8 8

Εισαγωγή, 8, 6 8 6

Εισαγωγή, 8, 6, 8 6

Εισαγωγή, 8, 6,, 12 8 6 12

Εισαγωγή, 8, 6,, 12, 13 8 6 12 13

Εισαγωγή, 8, 6,, 12, 13, 4 8 6 12 4 13

Εισαγωγή, 8, 6,, 12, 13, 4, 7 8 6 12 4 7 13

Εισαγωγή, 8, 6,, 12, 13, 4, 7, 15 8 6 12 4 7 13 15

Εισαγωγή, 8, 6,, 12, 13, 4, 7, 15, 21 8 6 12 21 4 7 13 15

Εισαγωγή 14, 8,, 6, 12, 15, 21, 4, 7,, 13 14 8 6 12 15 21 4 7 13

Εισαγωγή 4 4, 6, 7, 8,, 12, 13, 14, 15,, 21 6 7 8 12 13 14 15 21

Διαγραφή 13 14 21 16 19 23 7 12 15 20 3 13

Διαγραφή 13 14 21 16 19 23 7 12 15 20 3

Διαγραφή 7 14 21 16 19 23 7 12 15 20 3

Διαγραφή 7 14 21 16 19 23 3 12 15 20

? Διαγραφή 14 14 21 16 19 23 3 12 15 20

Αντιγράφουμε το κλειδί του διάδοχου κόμβου Διαγραφή 14 14 21 16 19 23 3 12 15 20

Διαγραφή 14 15 21 16 19 23 3 12 15 20 Διαγράφουμε τον διάδοχο κόμβο

Διαγραφή 14 15 21 16 19 23 3 12 20

Διαγραφή κόμβου x Αν ο x έχει κενό παιδί τότε θέτουμε z=x, διαφορετικά θέτουμε z = διάδοχος του x. Αν ο z είναι διαφορετικός από τον x τότε αντιγράφουμε τα δεδομένα (key, item) του z στον x. Αν ο z έχει κενό δεξί παιδί τότε θέτουμε y=z.left, διαφορετικά θέτουμε y=z.right. Αν ο z δεν έχει γονέα τότε θέτουμε root=y. Διαφορετικά έστω w ο γονέας του z. Αν ο z είναι αριστερό παιδί (w.left==z) τότε κάνουμε τον y αριστερό παιδί του w, και αν ο z είναι δεξί παιδί (w.right==z) τότε κάνουμε τον y δεξί παιδί του w

x Διαγραφή x 11 21 w = γονέας του z 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x

αντιγράφουμε τα περιεχόμενα του z στον x x 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x

θέτουμε τον y ως αριστερό παιδί του w x 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x

διαγράφουμε τον z x 12 w = γονέας του z 21 Διαγραφή x 8 z = διάδοχος του x 16 19 23 7 9 12 20 3 13 y = παιδί του x

12 21 8 16 19 23 7 9 13 20 3

επίπεδο ρίζας = 0 επίπεδο κόμβου = επίπεδο γονέα + 1 ύψος δένδρου = μέγιστο επίπεδο 0 1 2 3 4 Μήκος διαδρομής = άθροισμα επιπέδου κάθε κόμβου (=30) Μήκος εσωτερικής διαδρομής = άθροισμα επιπέδου κάθε εσωτερικού κόμβου (=9) Μήκος εξωτερικής διαδρομής = άθροισμα επιπέδου κάθε εξωτερικού κόμβου (=21) Ισχύει: μήκος εξωτερικής διαδρομής = μήκος εσωτερικής διαδρομής + 2Ν

Ο χρόνος εκτέλεσης των προηγούμενων λειτουργιών είναι ανάλογος του ύψους του δένδρου αναζήτησης Ένα δυαδικό δένδρο με Ν εσωτερικούς κόμβους έχει ύψος μεταξύ lgn και Ν εσωτερικοί κόμβοι στο επίπεδο ένας εσωτερικός κόμβος ανά επίπεδο μήκος εσωτερικής διαδρομής = μήκος εσωτερικής διαδρομής =

Ιδιότητα: Οι επιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά. Έστω C(Ν) το μέσο μήκος της εσωτερικής διαδρομής ενός δυαδικού δένδρου αναζήτησης με Ν κόμβους. Έχουμε την ακόλουθη αναδρομική σχέση, όπου k-1 N-k

Ιδιότητα: Οι επιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά. Έστω C(Ν) το μέσο μήκος της εσωτερικής διαδρομής ενός δυαδικού δένδρου αναζήτησης με Ν κόμβους. Έχουμε την ακόλουθη αναδρομική σχέση, όπου

Ιδιότητα: Οι επιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά. Έστω C(Ν) το μέσο μήκος της εσωτερικής διαδρομής ενός δυαδικού δένδρου αναζήτησης με Ν κόμβους. Έχουμε την ακόλουθη αναδρομική σχέση, όπου Ομοίως

Ιδιότητα: Οι επιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά. Έστω C(Ν) το μέσο μήκος της εσωτερικής διαδρομής ενός δυαδικού δένδρου αναζήτησης με Ν κόμβους. Επομένως

Ιδιότητα: Οι επιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά. μήκος εξωτερικής διαδρομής = μήκος εσωτερικής διαδρομής + 2Ν Έχουμε λοιπόν Ιδιότητα: Οι εισαγωγές και οι ανεπιτυχείς αναζητήσεις απαιτούν περίπου 2 lnn συγκρίσεις, κατά μέσο όρο, σε ένα ΔΔΑ κατασκευασμένο από Ν τυχαία κλειδιά.