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

Σχετικά έγγραφα
ιαφάνειες παρουσίασης #10 (β)

AVL-trees C++ implementation

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δημιουργία Δυαδικών Δέντρων Αναζήτησης

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

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

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

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

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

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

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

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

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

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

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

Οντοκεντρικός Προγραμματισμός

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

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

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

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #11

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

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

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

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

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

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

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

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

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

Εισαγωγή στους Αλγορίθμους

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

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

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

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

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

Εισαγωγή στους Αλγορίθμους Ενότητα 3η

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

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

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

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

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

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

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

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

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

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

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

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

5 ΔΕΝΤΡΑ (Trees) Σχήµα 5.1 : ενδροειδής αναπαράσταση αρχείων στα Windows. έντρα. \ {root directory} Accessories. Program Files.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL Υλικό από τις σηµειώσεις Ν. Παπασπύρου, 2006 Δέντρα δυαδικής αναζήτησης Δενδρικές δοµές δεδοµένων στις οποίες Όλα τα στοιχεία στο αριστερό υποδέντρο της ρίζας είναι µικρότερα από την ρίζα Όλα τα στοιχεία στο δεξί υποδέντρο της ρίζας είναι µεγαλύτερα ή ίσα µε την ρίζα Το αριστερό και το δεξί υποδέντρο είναι δέντρα δυαδικής αναζήτησης Binary Search Trees - BSTs

Δέντρα δυαδικής αναζήτησης Η γενική εικόνα ενός τέτοιου δέντρου >= Παραδείγµατα δέντρων BST Εγκυρα δέντρα

Παραδείγµατα δέντρων BST Μη-έγκυρα δέντρα Δυαδικά δένδρα αναζήτησης (υλοποίηση µε συνδεδεµένες λίστες) (i) Binary search trees Δυαδικά δένδρα µε τις παρακάτω ιδιότητες για κάθε κόµβο: όλοι οι κόµβοι του αριστερού παιδιού έχουν τιµές µικρότερες ή ίσες της τιµής του κόµβου όλοι οι κόµβοι του δεξιού παιδιού έχουν τιµές µεγαλύτερες ή ίσες της τιµής του κόµβου 10 5 34 17 58 71

Δυαδικά δένδρα αναζήτησης (ii) Τα δυαδικά δένδρα αναζήτησης διευκολύνουν την αναζήτηση στοιχείων Αναδροµική αναζήτηση αν η τιµή που ζητείται είναι στη ρίζα, βρέθηκε αν είναι µικρότερη από την τιµή της ρίζας, αρκεί να αναζητηθεί στο αριστερό παιδί αν είναι µεγαλύτερη από την τιµή της ρίζας, αρκεί να αναζητηθεί στο δεξί παιδί Κόστος αναζήτησης: O(log n) υπό την προϋπόθεση το δένδρο να είναι ισοζυγισµένο Δυαδικά δένδρα αναζήτησης (iii) Αναζήτηση TreeNode * treesearch (tree t, int key) { if (t == NULL) return NULL; /* not found */ if (t->data == key) return t; /* found */ } if (t->data > key) return treesearch(t->left, key); else return treesearch(t->right, key);

Ζύγισµα δέντρων BST Ανάλογα µε τη σειρά άφιξης των στοιχείων και τον τρόπο δηµιουργίας του δέντρου BST, για τα ίδια στοιχεία δεν προκύπτει πάντα το ίδιο δέντρο Το ύψος του δέντρου σχετίζεται µε το χρόνο αναζήτησης ενός στοιχείου µέσα στο δέντρο Ζύγισµα δέντρων BST Αναζήτηση µε πολυπλοκότητα Από Ο(Ν) [χειρότερη περίπτωση] Μέχρι Ο(Log 2 N) [καλύτερη περίπτωση]

Ζύγισµα δέντρων BST Προκειµένου µια αναζήτηση να διατρέχει όσο το δυνατόν µικρότερο µέρος του δέντρου, αυτό πρέπει να είναι «ζυγισµένο» «Ζυγισµένο»: το βάθος του αριστερού υποδέντρου δεν διαφέρει περισσότερο από 1 από αυτό του δεξιού (ιδανικά: είναι ίσα) Αν κατά την προσθήκη νέων στοιχείων στο δέντρο η ζυγαριά «γείρει» δεξιά ή αριστερά, απαιτείται διόρθωση του δέντρου Παραδείγµατα ζυγισµένων δέντρων 1 4 2 3 5 3 2 6 4 1 7 5 4 6 2 6 7 1 3 5 7

Ζυγισµένα δέντρα Η περίπτωση όπου το ύψος του αριστερού υποδέντρου είναι ακριβώς ίσο µε το ύψος του δεξιού, δεν επιτυγχάνεται εύκολα Αν από την παραπάνω περίπτωση υπήρχαν «µικρές» αποκλίσεις, οι επιδόσεις του δέντρου στην αναζήτηση δεν θα επηρεάζονταν ιδιαίτερα Δέντρα AVL Ενα δέντρο AVL (Adelson-Velskii and Landis) είναι ένα δέντρο BST του οποίου το ύψος του αριστερού υποδέντρου διαφέρει από αυτό του δεξιού το πολύ κατά 1 Το δεξί και αριστερό υποδέντρο ενός δέντρου AVL είναι επίσης δέντρα AVL Το κενό δέντρο είναι δέντρο AVL Οι ιδιότητες αυτές διατηρούνται µε παρεµβάσεις (αναδιάταξη) καθώς νέα στοιχεία προστίθενται στο δέντρο

Δέντρα AVL Δέντρα AVL Ενα δέντρο AVL λέγεται «ψηλό από αριστερά» όταν το ύψος του αριστερού υποδέντρου είναι µεγαλύτερο από αυτό του δεξιού (κατά πόσο;;;) Αντίστοιχα για το «ψηλό από δεξιά» Υπάρχουν αρκετοί τρόποι µε τους οποίους η προσθήκη ή η διαγραφή στοιχείων σε ένα δέντρο AVL παραβιάζει τη συνθήκη χαρακτηρισµού του

Αναδιάταξη δέντρων AVL Η χαρακτηριστική ιδιότητα ενός δέντρου AVL µπορεί να παύει να ισχύει µε την προσθήκη νέων στοιχείων Η επαναφορά της ιδιότητας σε ισχύ, γίνεται µε περιστροφή του δέντρου, ανάλογα µε την περίπτωση αναδιάταξης που συντρέχει Απλή περιστροφή k2 k1 k1 k2 Z h X X Y New Item Y Z New item

Διπλή περιστροφή (α) k3 k2 k1 k1 k3 k2 D h A A B C D B C Διπλή περιστροφή (β) k3 k1 k3 k2 D k2 A D B C k1 C A B

Αναδιάταξη δέντρων AVL Περιπτώσεις αναδιάταξης ΑΑ: ένα αριστερό υποδέντρο ενός δέντρου AVL που είναι ψηλό από αριστερά, γίνεται επίσης ψηλό από αριστερά (left of left) ΔΔ: τα αντίστοιχα για το δεξί υποδέντρο (right of right) ΔΑ: ένα υποδέντρο ενός δέντρου AVL ψηλού από αριστερά, γίνεται ψηλό από δεξιά (right of left) ΑΔ: ένα υποδέντρο ενός δέντρου AVL ψηλού από δεξιά, γίνεται ψηλό από αριστερά (left of right) Περιπτώσεις αναδιάταξης (α)

Περιπτώσεις αναδιάταξης (β) Αναδιάταξη σε περίπτωση ΑΑ

Αναδιάταξη σε περίπτωση ΔΔ Αναδιάταξη σε περίπτωση ΔΑ

Αναδιάταξη σε περίπτωση ΑΔ Υλοποίηση δέντρων AVL στη C Μια δοµή δεδοµένων Node key <keytype> data <datatype> left <pointer to Node> right <pointer to Node> End Node bal <LeftH, EvenH, RightH>

Εισαγωγή σε δέντρα AVL H εισαγωγή νέων στοιχείων γίνεται στα φύλλα, όπως στα δέντρα BST Εντοπίζεται το φύλλο στο οποίο θα γίνει η εισαγωγή και δηµιουργείται νέος κόµβος Γίνεται οπισθοδρόµηση µέχρι την κορυφή του δέντρου, µε έλεγχο της ισχύος της συνθήκης ισορροπίας AVL σε κάθε βήµα προς τα πίσω, και επαναφορά σε ισορροπία, όπου απαιτείται Εισαγωγή σε δέντρα AVL Διάγραµµα κλήσης µιας αναδροµικής συνάρτησης εισαγωγής

ΑΛΓΟΡΙΘΜΟΣ AVLInsert( ref root <tree pointer>, val newptr <tree pointer>, ref taller <Boolean>) 1 if (root null) 1 root = newptr 2 taller = true 3 return root 2 end if 3 if (newptr->key < root->key) 1 root->left = AVLInsert (root->left, newptr, taller) 2 if (taller) // Left subtree is taller 1 if (root ->left-high) 1 root = leftbalance (root, taller) 2 elseif (root->even-high) 1 root->bal = left-high 3 else //Was right high -- now even high 1 root->bal = even-high 2 taller = false 4 end if 4 else // New data >= root data (Συνέχεια) AVLInsert( ref root <tree pointer>, val newptr <tree pointer>, ref taller <Boolean>)... 4 else // New data >= root data 1 root-> right = AVLInsert (root->right, newptr, taller) 2 if (taller) // Right subtree is taller 1 if (root left-high) 1 root->bal = even-high 2 taller = false 2 elseif (root even-high) // Was balanced -- now right high 1 root->bal = right-high 3 else 1 root = rightbalance (root, taller) 4 end if 3 end if 5 end if 6 return root end AVLInsert

ΑΛΓΟΡΙΘΜΟΣ leftbalance (ref root <tree pointer>, ref taller <Boolean>) 1 lefttree = root-> left 2 if (lefttree left-high) // Case 1: Left of left. Single rotation right. 1 rotateright (root) 2 root->bal = even-high 3 lefttree->bal = even-high 4 taller = false 3 else // Case 2: Right of left. Double rotation required. 1 righttree = lefttree->right // adjust balance factors 2 if (righttree->bal left-high) 1 root->bal = right-high 2 lefttree->bal = even-high 3 elseif (righttree->bal = even-high) 1 lefttree->bal = even-high 4 else (Συνέχεια) leftbalance (ref root <tree pointer>, ref taller <Boolean>) 4 else // righttree->bal is right-high 1 root->bal = even-high 2 lefttree->bal = left-high 5 end if 6 righttree->bal = even-high 7 root->left = rotateleft (lefttree) 8 root = rotateright (root) 9 taller = false 4 end if 5 return root end leftbalance