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

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

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

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

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

Γηάιεμε 16: Δηζαγσγή ζε Γελδξηθέο Γνκέο Γεδνκέλσλ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

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

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

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

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

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

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

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

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

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

υαδικό έντρο Αναζήτησης (BSTree)

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

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

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

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

8.6 Κλάσεις και αντικείμενα 8.7 Δείκτες σε γλώσσα μηχανής

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

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

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

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Κύρια σηµεία για µελέτη. έντρα. Ορολογία δέντρων. Τι είναι δέντρο

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

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

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

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

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

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

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

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

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

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

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

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

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

Θέματα Υπολογισμού στον Πολιτισμό - Δένδρα. Δένδρα

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

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

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

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

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

Διάλεξη 18: Γράφοι I Εισαγωγή

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

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

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

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

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

AVL-trees C++ implementation

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

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

Transcript:

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

Δέντρα Μέχρι τώρα μελετούσαμε γραμμικές δομές δεδομένων (linear data structures) π.χ. Stacks, queues, arrays, lists, κτλ Σε αυτή την ενότητα θα μελετήσουμε δενδρικές δομές δεδομένων (δηλαδή μη-γραμμικές δομές) Δένδρο είναι ένα σύνολο κόμβων (κορυφών) που συνδέονται από ακμές (ή τόξα). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

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

Παράδειγμα 1: Οργάνωση Μονοπατιών σε ένα OS ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4 /usr root /maria /christos /yiannis Ακμές (edges) /courses /mail /.netscape /epl035 /epl231 /homeworks /notes hw1 Υποδεντρό (subtree)

Παράδειγμα 1 (συν.) Υποθέστε ότι χρησιμοποιούσαμε μια γραμμική δομή (π.χ. ένα πίνακα) για την αποθήκευση των διάφορων μονοπατιών /usr/maria /usr/christos /usr/christos/courses /usr/christos/courses/epl035 /usr/christos/courses/epl231 /usr/christos/courses/epl231/homeworks /usr/christos/courses/epl231/homeworks/hw1 /usr /christos/courses/epl231/notes /usr /christos/mail /usr /christos/.netscape /usr /yiannis Μειονεκτήματα Καταλαμβάνουμε πολύ χώρο Επαναληπτική αποθήκευση μονοπατιού Η αναζήτηση κάποιου στοιχείου χρειάζεται Ο(n) (n μέγεθος λίστας) Στα δένδρα τα δεδομένα είναι καλύτερα οργανωμένα ώστε οι διαδικασίες αναζήτησης, εισαγωγής και εξαγωγής κόμβου να είναι πιο αποδοτικές ( O(logn) ). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6 Παράδειγμα 2: Αναπαρ. Αριθμ. Παραστάσεων a + b (c + d) + x a + b c d

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7 Παράδειγμα 3: Suffix Trie (ReTrieval) Μπορούμε να κρατήσουμε ένα μεγάλο λεξικό στην μνήμη του υπολογιστή και να κάνουμε αναζητήσεις για λέξεις αποδοτικά PATRICIA Trie: Κάθε ακμή περιέχει 1 ή περισσότερους χαρακτήρες (συμπίεση)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8 Ορισμοί Όταν υπάρχει ακμή από ένα κόμβο u σε ένα κόμβο v τότε ο u είναι ο πατέρας ή ο προκάτοχος (parent) του v, και ο v είναι παιδί (child) του u. Η ορολογία αυτή γενικεύεται ώστε να μιλούμε για προγόνους (ancestors) και απογόνους (descendants) κόμβων. Κόμβοι που έχουν τον ίδιο προκάτοχο ονομάζονται αδέλφια (siblings) Κόμβοι που δεν έχουν παιδιά λέγονται φύλλα (leaves). Οι υπόλοιποι λέγονται εσωτερικοί (nonleaves - branches). Βαθμός (degree) ενός κόμβου είναι ο αριθμός των παιδιών του. Βαθμός ενός δένδρου είναι ο μέγιστος από τους βαθμούς των κόμβων του. Δένδρα βαθμού n λέγονται n-αδικά. Δένδρα που χρησιμοποιούνται συχνά είναι τα δυαδικά (binary), τετραδικά (quadtrees), οκταδικά (octtrees). Parent(6) => 3 Sibling(1) => 6 Leaves = {1,4,7,13} Non-leaves={3,6,7,10,14} Root={7} Degree(Tree)=2 degree(14) = 1

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

Ορολογία Δένδρων Ρίζα(Root): κόμβος χωρίς γονέα (A) Εσωτερικός κόμβος: κόμβος με τουλάχιστον ένα παιδί (A, B, C, F) Εξωτερικός κόμβος(ή φύλλο-leaf): κόμβος χωρίς παιδιά (E, I, J, K, G, H, D) Πρόγονοι ενός κόμβου: γονιός, παππούς, προ-παππούς κτλ. Απόγονοι ενός κόμβου: παιδιά, εγγόνια, δισέγγονα, etc. B A C D Υπόδενδρο: δένδρο αποτελούμενο από ένα κόμβο και τους απογόνους του E F I J K G H Υποδέντρο subtree ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11 Παράδειγμα βάθος 37 37 37 ύψος Βάθος (Depth/Level) κόμβου:1 24 42 Ύψος (Height) κόμβου: 0 Βαθμός Δένδρου = 0 Βάθος (Δένδρου): 2 Ύψος (Δένδρου): 1 Βάθος κόμβου 37: 1 Ύψος κόμβου 37: 1 Βάθος κόμβου 24: 2 Ύψος κόμβου 24: 0 Βαθμός Δένδρου = 2 24 42 6 Βάθος (Δένδρου) : 3 Ύψος (Δένδρου) : 2 Βάθος κόμβου 24: 2 Ύψος κόμβου 24: 1 Βάθος κόμβου 6: 3 Ύψος κόμβου 6: 0 Βαθμός Δένδρου = 2

Αναπαράσταση Δένδρων στη Μνήμη Υπάρχουν πολλοί τρόποι να αναπαραστήσουμε ένα κόμβο δέντρου στη μνήμη. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12 Κάθε κόμβος αποτελείται από κάποιο αριθμό πεδίων: 1. Τα πραγματικά δεδομένα του κόμβου (το κλειδί), και 2. τα υπόλοιπα πεδία περιέχουν στοιχεία σχετικά με τη δομή του δένδρου, δηλαδή περιγράφουν με κάποιο τρόπο τη σχέση του συγκεκριμένου κόμβου με άλλους κόμβους του δένδρου. Για παράδειγμα: αναφορές στα παιδιά του Αν είναι η ρίζα, εσωτερικός ή φύλλο

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

Μνήμη στη Java 32 bit JVM References: 4 bytes Objects: Multiples of 4 bytes, each object has a header of 12 bytes 64 bit JVM References: 4 bytes for Heap Size < 32 GB (-Xmx32G) 8 bytes for Heap Size > 32 GB Objects: Multiples of 8 bytes, each object has a header of 12 bytes ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Αναπαράσταση Δένδρων στη Μνήμη Πρόβλημα: Μείωση της σπατάλης χώρου από αχρησιμοποίητους δείκτες/αναφορές. Λύση: Μπορούμε να μετατρέψουμε ένα δέντρο n-αδικό (κάθε κόμβος με n παιδιά) σε ένα 2-αδικό (κάθε κόμβος με 2 παιδιά) χρησιμοποιώντας την πολιτική «Πρώτο Παιδί / Επόμενο Αδέρφι» (First Child/Next Sibling) Δηλαδή κάθε κόμβος u περιέχει 1. τα δεδομένα του κόμβου, 2. δείκτη στο αριστερότερο (πρώτο) παιδί του u, 3. δείκτη στον επί δεξιά αδελφό του u, αν υπάρχει. Αυτή η πολιτική μας επιτρέπει να μειώσουμε τον αριθμό των δεικτών ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16 Παράδειγμα αναπαράστασης δένδρου [Normal Tree] A B Γ Δ Ε Ζ Η Θ Ι [First Child/Next Sibling] Α Β Γ Δ Δένδρο Βαθμού n (n=4) Συνολικές Αναφορές: 9 nodes *4 refs = 36 Δένδρο Βαθμού n (n=2) Συνολικές Αναφορές: 9 nodes *2 refs = 18 NULL Pointer Ε Ζ Η Θ Ι Next sibling

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17 Διάσχιση Δένδρων Αν θέλουμε να επισκεφθούμε όλους τους κόμβους ενός δένδρου, μπορούμε να χρησιμοποιήσουμε ένα από τους πιο κάτω τρόπους, οι οποίοι διαφέρουν στη σειρά με την οποία εξετάζουν τους κόμβους. 1. Προθεματική Διάσχιση: (Preorder Traversal) επισκεπτόμαστε (εκτυπώνουμε) πρώτα τη ρίζα και ύστερα τα παιδιά της. Αναδρομικά η πράξη ορίζεται ως εξής: Print_Preorder(treenode u) Print u; foreach child v of u Print_Preorder(v) 2. Μεταθεματική Διάσχιση: (Postorder Traversal) επισκεπτόμαστε (εκτυπώνουμε) πρώτα τα παιδιά και ύστερα τη ρίζα του δένδρου. Αναδρομικά η πράξη ορίζεται ως εξής: Print_Postorder(treenode u) foreach child v of u Print_Postorder(v) Print u;

Παράδειγμα Διάσχισης δένδρου ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18 A B Γ Δ Ε Ζ Η Θ Ι Print_Preorder(treenode u) Print u; foreach child v of u Print_Preorder(v) Print_Postorder(treenode u) foreach child v of u Print_Postorder(v) Print u; Προθεματική Διάσχιση (Preorder) : Α Β Ε Γ Δ Ζ Η Θ Ι Μεταθεματική Διάσχιση (Postorder) : Ε Β Γ Ζ Η Θ Ι Δ Α

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

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20 Ποιος είναι ο βαθμός του κόμβου 99; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21 Ποιος είναι ο βαθμός του κόμβου 61; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22 Ποιος είναι ο βαθμός του δέντρου; 50 42 72 5 46 61 99 43 58 63 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23 Ποιο είναι το ύψος του κόμβου 51; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24 Ποιο είναι το ύψος του κόμβου 58; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25 Ποιο είναι το ύψος του κόμβου 72; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 26 Ποιο είναι το ύψος του δέντρου; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 27 Ποιο είναι το βάθος του κόμβου 50; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 28 Ποιο είναι το βάθος του κόμβου 46; 50 42 72 5 46 61 99 43 58 65 51

Δέντρα: Ασκήσεις ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 29 Ποιο είναι το βάθος του κόμβου 51; 50 42 72 5 46 61 99 43 58 65 51

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 30 Δέντρα: Ασκήσεις Κατασκευάστε ένα suffix trie για τις λέξεις: BIG, BID, BAG, GOOD, BAD, GET

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 31 Δέντρα: Ασκήσεις Μετατρέψετε το προηγούμενο suffix trie σε patricia trie