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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ. ΗΥ240 - Παναγιώτα Φατούρου 1

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

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

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

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

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

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

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

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

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

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

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

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

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

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

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

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

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

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

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

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

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

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

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

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

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

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

Βασικές Δομές Δεδομένων

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

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

Transcript:

Δένδρα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, ορισμοί, πράξεις και αναπαράσταση στη μνήμη ΔυαδικάΔένδρακαιΔυαδικάΔένδραΑναζήτησης ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-1

Δένδρα Στις λίστες η εύρεση κόμβου έχει χρόνο εκτέλεσης Ο(Ν), όπου N το μήκος της λίστας. Σταδένδραταδεδομέναείναι καλύτερα οργανωμένα ώστε οι διαδικασίες αναζήτησης, εισαγωγής και εξαγωγής κόμβου να είναι πιο αποδοτικές. Δένδρο είναι ένα σύνολο κόμβων που συνδέονται από ακμές ή τόξα. Ορίζεται αναδρομικά ως εξής: 1. Ένα δένδρο είναι είτε κενό είτε 2. αποτελείται από μια ρίζα (root), δηλαδή ένα κόμβο στον οποίο δεν καταλήγουν αλλά μόνο ξεκινούν ακμές, και 0 ή περισσότερα υποδένδρα Τ 1, Τ 2,,, Τ k, το καθένα ξεχωριστό από τα άλλα και από τη ρίζα. Υπάρχει μια ακμή από τη ρίζα στις ρίζες των Τ 1, Τ 2,,, Τ k. Από κάθε κόμβο ξεκινούν 0 ή περισσότερες ακμές. Σε κάθε κόμβο εκτός της ρίζας καταλήγει μία μόνο ακμή. Στη ρίζα δεν καταλήγει καμιά ακμή. Οι κόμβοι περιέχουν δεδομένα. Οι ακμές επιβάλλουν μια ιεραρχική δομή στα δεδομένα. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-2

Παράδειγμα: Unix File System /usr /maria /christos /yiannis /courses /mail /.netscape /cpl230 /cpl231 /homeworks /notes hw1 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-3

Παράδειγμα: Αναπαράσταση Αριθμητικών Παραστάσεων α + β γ ( δ + ε ) + α β γ + δ ε ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-4

Ορισμοί Όταν υπάρχει ακμή από ένα κόμβο u σε ένα κόμβο v τότε ο u είναι ο πατέρας ή ο προκάτοχος (parent) του v, και ο v είναι παιδί (child) του u. Η ορολογία αυτή γενικεύεται ώστε να μιλούμε για προγόνους και απογόνους κόμβων. Κόμβοι που έχουν τον ίδιο προκάτοχο ονομάζονται αδέλφια. Κόμβοι που δεν έχουν παιδιά λέγονται φύλλα. Οι υπόλοιποι λέγονται εσωτερικοί. Βαθμός (degree) ενός κόμβου είναι ο αριθμός των παιδιών του. Βαθμός ενός δένδρου είναι ο μέγιστος από τους βαθμούς των κόμβων του. Δένδρα βαθμού n λέγονται n-αδικά. Δένδρα που χρησιμοποιούνται συχνά είναι τα δυαδικά (binary), τετραδικά (quadtrees), οκταδικά (octtrees). ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-5

Βάθος και ύψος ενός δένδρου Επίπεδο ή βάθος ενός κόμβου ονομάζουμε τον αριθμό των προγόνων του + 1. π.χ. το βάθος της ρίζας ενός δένδρου είναι 1. Βάθος ενός δένδρου ονομάζουμε το μέγιστο επίπεδο κόμβων του δένδρου. Μονοπάτι ή διαδρομή (path) ενός δένδρου είναι μια ακολουθία κόμβων v 1, v 2,,, v k, όπου κάθε v i είναι πατέρας του v i+1. Το μήκος του μονοπατιού v 1, v 2,,, v k είναι k-1. Ύψος ενός κόμβου ονομάζουμε το μήκος του μέγιστου μονοπατιού από τον κόμβο προς κάποιο φύλλο (μετρούμε ακμές). π.χ. το ύψος οποιουδήποτε φύλλου είναι 0. Ύψος ενός δένδρου είναι το ύψος της ρίζας του δένδρου. Διατεταγμένο δένδρο ονομάζεται ένα δένδρο όταν για κάθε παιδί u κάποιου κόμβου v γνωρίζουμε αν ο u είναι το k-οστό παιδί του v. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-6

37 Παράδειγμα 37 37 Ύψος: 0 Βάθος:1 24 42 24 42 Ύψος: 1 Βάθος: 2 Ύψος κόμβου 37: 1 Βάθος κόμβου 37: 1 Ύψος κόμβου 24: 0 Βάθος κόμβου 24: 2 6 Ύψος: 2 Βάθος: 3 Ύψος κόμβου 24: 1 Βάθος κόμβου 24: 2 Ύψος κόμβου 6: 0 Βάθος κόμβου 6: 3 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-7

Χρήσιμες Πράξεις Parent(u) Children(u) FirstChild(u) RightSibling(u) LeftSibling(u) IsLeaf(u) IsRoot(u) Depth(u) δώσε τον πατέρα του u δώσε τα παιδιά του u δώσε το πρώτο παιδί του u δώσε τον κόμβο στα δεξιά του u δώσε τον κόμβο στα αριστερά του u αν το u είναι φύλλο τότε δώσε true, διαφορετικά δώσε false αν το u είναι η ρίζα του δένδρου δώσε true, διαφορετικά δώσε false δώσε το βάθος του u στο δένδρο. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-8

Αναπαράσταση Δένδρων στη Μνήμη Η πιο απλή και φυσική στρατηγική είναι η χρήση δυναμικής χορήγησης μνήμης. Κάθε κόμβος είναι ένα καταχώρημα μνήμης που αποτελείται από κάποιο αριθμό πεδίων: 1. το πρώτο από τα οποία περιέχει τα πραγματικά δεδομένα του κόμβου (το κλειδί), και 2. τα υπόλοιπα περιέχουν στοιχεία σχετικά με τη δομή του δένδρου, δηλαδή περιγράφουν με κάποιο τρόπο τη σχέση του συγκεκριμένου κόμβου με άλλους κόμβους του δένδρου. Για παράδειγμα, αν θέλουμε να αναπαραστήσουμε δένδρο βαθμού n κάθε κόμβος μπορεί να έχει την πιο κάτω μορφή: Info p 1 p 2 p n όπου ο p i είναι δείκτης στο i-οστό παιδί του κόμβου. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-9

Αναπαράσταση Δένδρων στη Μνήμη Προβλήματα αυτού του είδους αναπαράστασης είναι 1. αν το δένδρο δεν είναι πλήρες, τότε η μνήμη δεν αξιοποιείται αποτελεσματικά. 2. πιθανόν ο βαθμός του δένδρου να είναι άγνωστος. Λύση: κάθε κόμβος u περιέχει 1. τα δεδομένα (κλειδί), 2. δείκτη στο πρώτο παιδί του u, 3. δείκτη στον επί δεξιά αδελφό του u, αν υπάρχει. Νέο πρόβλημα: Πώς μπορούμε να επισκεφθούμε όλα τα παιδιά κάποιου κόμβου u; ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-10

Παράδειγμα αναπαράστασης δένδρου A B Γ Δ Ε Ζ Η Θ Ι Α Β Γ Δ Ε Ζ Η Θ Ι ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-11

Διάσχιση Δένδρων Αν θέλουμε να επισκεφθούμε όλους τους κόμβους ενός δένδρου, μπορούμε να χρησιμοποιήσουμε ένα από τους πιο κάτω τρόπους, οι οποίοι διαφέρουν στη σειρά με την οποία εξετάζουν τους κόμβους. 1. Προθεματική Διάσχιση: (preorder traversal) επισκεπτόμαστε πρώτα τη ρίζα και ύστερα τα παιδιά της. Αναδρομικά η πράξη ορίζεται ως εξής: Print_Preorder(*treenode u) Output data at u; for each child v of u Print_Preorder(v) 2. Μεταθεματική Διάσχιση: (postorder traversal) επισκεπτόμαστε πρώτα τα παιδιά και ύστερα τη ρίζα του δένδρου. Αναδρομικά: Print_Postorder(*treenode u) for each child v of u Print_Postorder(v) output data at u; ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-12

Παράδειγμα Διάσχισης δένδρου A B Γ Δ Ε Ζ Η Θ Ι Προθεματική Διάσχιση: ABEΓΔΖΗΘΙ Μεταθεματική Διάσχιση: EBΓΖΗΘΙΔA ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-13

Δυαδικά Δένδρα Ένα δένδρο είναι δυαδικό αν όλοι οι κόμβοι του έχουν βαθμό 2. Ορισμός: Δυαδικό δένδρο λέγεται ένα δένδρο το οποίο είτε είναι κενό, είτε αποτελείται από μια ρίζα και δύο δυαδικά υπόδενδρα, το καθένα διακριτό από το άλλο και από τη ρίζα. Αναφερόμαστε στα δύο υπόδενδρα ως το αριστερό και το δεξιό υπόδενδρο. Το ύψος ενός δυαδικού δένδρου με n κόμβους μπορεί να είναι το πολύ n 1 και το λιγότερο lg n. Ένα δυαδικό δένδρο είναι γεμάτο (full), αν κάθε εσωτερικός του κόμβος έχει δύο παιδιά. Ένα δυαδικό δένδρο είναι τέλειο (perfect), αν είναι γεμάτο και όλα τα φύλλα έχουν το ίδιο βάθος. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-14

Δυαδικά Δένδρα Ένα δυαδικό δένδρο είναι πλήρες (complete) αν 1. έχει ύψος 0 και ένα κόμβο, 2. έχει ύψος 1 και η ρίζα του έχει είτε δύο παιδιά είτε ένα αριστερό παιδί. 3. έχει ύψος h και η ρίζα του έχει ένα τέλειο αριστερό υπόδενδρο ύψους h-1 και ένα πλήρες δεξιό υπόδενδρο ύψους h-1, ή ένα πλήρες αριστερό υπόδενδρο ύψους h-1 και ένα τέλειο δεξιό υπόδενδρο ύψους h-2. Παραδείγματα δυαδικών δένδρων ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-15

Θεώρημα 1. Ένα γεμάτο δυαδικό (μη άδειο) δένδρο με n εσωτερικούς κόμβους, έχει n+1 φύλλα. 2. Κάθε δυαδικό δένδρο με n κόμβους έχει n+1 null δείκτες Απόδειξη (2) με τη μέθοδο της μαθηματικής επαγωγής: Βάση της επαγωγής: n = 0 To δένδρο αποτελείται από ένα NULL δείκτη και το ζητούμενο έπεται. Υπόθεση της επαγωγής: Έστω ότι κάθε δυαδικό δένδρο με k κόμβους, k < m, έχει k+1 NULL δείκτες. Βήμα της επαγωγής: Έστωδυαδικόδένδρομεmκόμβους. Θέλουμε να δείξουμε πως περιέχει m+1 NULL δείκτες. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-16

Θεώρημα Ένα οποιοδήποτε δυαδικό δένδρο έχει την πιο κάτω μορφή: m 1 + m 2 + 1 = m m 1 κόμβοι m 2 κόμβοι ΟαριθμόςNULL δεικτών του δένδρου είναι = ο αριθμός NULL δεικτών του αριστερού υποδένδρου + ο αριθμός NULL δεικτών του δεξιού υποδένδρου = {από την υπόθεση της επαγωγής και αφού m 1, m 2 < m} (m 1 +1) + (m 2 + 1) = (m 1 + m 2 +1 ) + 1 = m + 1 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-17

Υλοποίηση Δυαδικών Δένδρων Αφού κάθε κόμβος σε ένα δυαδικό δένδρο έχει το πολύ δύο παιδιά, μπορούμε να κρατούμε δείκτες στο καθένα από αυτά. Δηλαδή, ένας κόμβος μπορεί να υλοποιηθεί ως μια εγγραφή BΤnode με τρία πεδία (παρόμοια με κόμβο διπλά συνδεδεμένης λίστας). 1. val, όπου αποθηκεύουμε την πληροφορία του κόμβου, 2. left, τύπου pointer, ο οποίος δείχνει το αριστερό, υπόδενδρο που ριζώνει στον συγκεκριμένο κόμβο, και 3. right, τύπου pointer, ο οποίος δείχνει το δεξιό υπόδενδρο που ριζώνει στον συγκεκριμένο κόμβο. v Έτσι, ένα δυαδικό δένδρο υλοποιείται ως ένας δείκτης στη ρίζα του δένδρου, δηλαδή δείκτης σε εγγραφή τύπου BTnode. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-18

Δυαδικά Δένδρα Αναζήτησης ( Binary Search Trees) Το πιο σημαντικό πλεονέκτημα της χρήσης δυαδικών δένδρων είναι η αποδοτική αναζήτηση σε ένα σύνολο στοιχείων. Υποθέτουμε την ύπαρξη μιας σχέσης στο σύνολο των στοιχείων που επεξεργαζόμαστε, έστω τη σχέση < πάνωστοσύνολοτωνακεραίων. Ένα δυαδικό δένδρο αναζήτησης (ΔΔΑ) είναι ένα δυαδικό δένδρο κάθε κόμβος u τουοποίουικανοποιείταεξής: 1. τα κλειδιά του αριστερού υποδένδρου του u είναι μικρότερα από το κλειδί του u 2. τα κλειδιά του δεξιού υποδένδρου του u είναι μεγαλύτερα από το κλειδί του u. struct BSTnode{ int val; BSTnode *left; BSTnode *right; } ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-19

Κτίζοντας ένα ΔΔΑ Εισαγωγή 37: Εισαγωγή 24: Εισαγωγή 42: Εισαγωγή 6: Εισαγωγή 40: Εισαγωγή 60: 24 37 42 6 40 60 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-20

Κτίζοντας ένα ΔΔΑ Δένδρο με τα ίδια στοιχεία τοποθετημένα με διαφορετική σειρά: 60, 42, 6, 24, 37, 40. Εισαγωγή 60: Εισαγωγή 42: Εισαγωγή 6: Εισαγωγή 24: Εισαγωγή 37: Εισαγωγή 40: 6 42 60 24 37 40 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-21

Διαδικασία Εύρεσης Στοιχείου Απλή αναδρομική στρατηγική: συγκρίνουμε το στοιχείο που μας ενδιαφέρει α με το στοιχείο της ρίζας του δένδρου β (αν υπάρχει) και 1. αν α=β, σταματούμε, 2. αν α<β, προχωρούμε στο αριστερό υπόδενδρο, 3. αν α>β προχωρούμε στο δεξιό υπόδενδρο. } BSTnode* Find(BSTnode* r,int n){ if (r == null) return null; else if (n < (*r).val) return Find((*r).left, n); else if (n == (*r).val) ) return r; else return Find((*r).right,n); ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-22

Διαδικασία?? BSTnode* X(BSTnode* p, int n){ while (p!= null){ if (n < (*p).val) p = (*p).left; else if (n == (*p).val) break; else p = (*p).right; return p; } ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-23

Διαδικασία Εισαγωγής Κόμβου BSTnode* InsertNode(BSTnode* r, int n){ if (r == NULL) p=(βstnode *)malloc(sizeof(bstnode)); (*p).val = n; (*p).left = NULL; (*p).right = NULL; return p; if (n < (*r).val)) (*r).left = InsertNode((*r).left, n); if (n > (*r).val)) (*r).right = InsertNode((*r).right, n); return r; } ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-24

Εξαγωγή του μικρότερου κόμβου 1. Ακολουθούμε τους αριστερούς δείκτες όσο μπορούμε, φθάνοντας στονκόμβομετομικρότεροστοιχείο, u. 2. Βρίσκουμε τον πατέρα v του u και αλλάζουμε τον αριστερό δείκτη του v ώστε να δείχνει στο δεξιό παιδί του u. 42 24 60 37 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-25

Εξαγωγή του μικρότερου κόμβου BSTnode* deletemin(bstnode* r){ if r!= null if ((*r).left!= null) (*r).left = deletemin((*r).left); return r; else rightchild = (*r).right; free r; return rightchild; } ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-26

Διαγραφή κόμβου Γιανααφαιρέσουμεένακλειδίi από ένα ΔΔΑ: 1. Βρίσκουμε τον κόμβο u που περιέχει το i. Ας υποθέσουμε πως v είναι ο πατέρας του u. 2. Αν u είναι φύλλο, τότε αλλάζουμε τον δείκτη του v που δείχνει το u, ώστε να γίνει null. 3. Αν ο u έχει ένα παιδί, τότε αλλάζουμε τον δείκτη του v που δείχνει τον u, ώστε να δείχνει στο παιδί του u. 4. Αν ο u έχει δύο παιδιά, αλλάζουμε το κλειδί του u ώστε να γίνει το μικρότερο από τα κλειδιά όλων των απογόνων του που έχουν κλειδιά μεγαλύτερα του i. καλούμε τη διαδικασία DeleteMin στο δεξιό παιδί του u. ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-27

Παράδειγμα Διαγραφής Κόμβου Αφαίρεση του στοιχείου 37: 37 40 ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-28

Διαγραφή Κόμβου Το κόστος κάθε διαδικασίας είναι ανάλογο του βάθους/ύψους του δένδρου. Θ(Ν) στη χειρότερη περίπτωση, Θ(log N) στημέσηπερίπτωση, υποθέτοντας πως όλα τα δένδρα είναι εξίσου πιθανά. Σημειώστε πως η διαδικασία διαγραφής κόμβου που έχουμε περιγράψει αφαιρεί πάντα κόμβο δεξιού υποδένδρου. Έτσι βοηθά την ύπαρξη μιας ασυμμετρίας στη δομή των ΔΔΑ (πιο βαθιά στα αριστερά). Ερώτημα: Μπορούμε, κατά τις εισαγωγές και εξαγωγές στοιχείων, να οργανώνουμε ένα δένδρο έτσι ώστε το ύψος του να παραμένει όσο το δυνατό πιο μικρό (τάξεως O(log n)); ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 6-29