Στοιχεία Θεωρίας Γραφηµάτων (4) - έντρα Ορέστης Τελέλης tllis@unipi.r Τµήµα Ψηφιακών Συστηµάτων, Πανεπιστήµιο Πειραιώς Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 1 / 27
έντρα έντρο είναι απλό συνδεδεµένο µη κατευθυνόµενο γράφηµα χωρίς κύκλους. a b a b a b a b Ενα γράφηµα είναι δέντρο αν και µόνο αν κάθε δύο κόµβοι του συνδέονται µε µοναδικό µονοπάτι. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 2 / 27
έντρα µε Ρίζα Ενας κόµβος µπορεί να οριστεί ως ρίζα: το δέντρο «κρεµιέται» από αυτόν. a b b a b a Τρεις απεικονίσεις του ίδιου δέντρου. Η 2η και η 3η απεικόνιση υπονοούν ως ϱίζα τον κόµβο a και αντίστοιχα. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 3 / 27
Ορολογία a b ρίζα ο κόµβος a παιδί κόµβου όποιος συνδέεται άµεσα «προς τα κάτω» Παιδιά του a: {b,, }, παιδιά του b: {, }. γονέας/πατέρας κόµβου αυτός που συνδέεται άµεσα «προς τα πάνω» Πατέρας / γονέας του είναι ο, των b,, είναι ο a απόγονοι κόµβου τα παιδιά του, τα παιδιά των παιδιών του,... Απόγονοι του a είναι όλοι, του b απλώς τα παιδιά του πρόγονοι κόµβου ο γονέας του, ο γονέας του γονέα,..., η ϱίζα Πρόγονοι του είναι ο και ο a Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 4 / 27
Ορολογία a b υποδέντρο «επάγεται» από κόµβο και τους απογόνους του Π.χ.: το υποδέντρο µε ϱίζα b επάγεται από τους b,, φύλλα εσωτερικοί επίπεδο κόµβοι χωρίς παιδιά Οι κόµβοι,, κόµβοι που δεν είναι ϕύλλα Οι κόµβοι a, b,, σύνολο κόµβων µε ίση απόσταση από ϱίζα Π.χ., 1ο επίπεδο: {b,, } ύψος µέγιστο µήκος µονοπατιού από ϱίζα (Εδώ: 2) Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 5 / 27
m-αδικά έντρα έντρο µε ρίζα είναι «m-αδικό» αν κάθε εσωτερικός κόµβος έχει m παιδιά. Είναι πλήρες m-αδικό αν κάθε εσωτερικός κόµβος έχει ακριβώς m παιδιά. Πλήρες υαδικό Πλήρες Τριαδικό Πλήρες Πενταδικό Τριαδικό, µη πλήρες. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 6 / 27
Βασικές Προτάσεις Κάθε δέντρο µε n κόµβους έχει n 1 ακµές. ικαιολόγηση: Με επαγωγή στο πλήθος των κόµβων, n. έντρο µε k εσωτερικούς κόµβους και l ϕύλλα έχει n = k + l κόµβους. ικαιολόγηση: ένα δέντρο έχει µόνο εσωτερικούς κόµβους και ϕύλλα. Πλήρες m-αδικό δέντρο µε k εσωτ. κόµβους έχει n = m k + 1 κόµβους. ικαιολόγηση: κάθε κόµβος εκτός της ϱίζας είναι παιδί εσωτερικού κόµβου. Κάθε m-αδικό δέντρο ύψους h έχει το πολύ m h ϕύλλα. ικαιολόγηση: µε ισχυρή επαγωγή στο ύψος h του δέντρου. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 7 / 27
Ιδιότητες (1/4) Κάθε δέντρο µε n κόµβους έχει n 1 ακµές. Επαγωγική Απόδειξη Βάση της Επαγωγής: Για n = 1 προφανώς ισχύει. Επαγωγική Υπόθεση: Εστω ότι, για n = k 1, το δέντρο έχει k 1 ακµές. Επαγωγικό Βήµα: Για δέντρο µε n = k + 1 κόµβους: Εστω v ένα ϕύλλο. Το v συνδέεται µε µια ακµή (u, v) µε τον πατέρα του, u. Το δέντρο που αποµένει κατόπιν αφαίρεσης του v και της (u, v) έχει k κόµβους και (από επαγωγική υπόθεση) k 1 ακµές. Εποµένως το δέντρο των k + 1 κόµβων έχει k = n 1 ακµές. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 8 / 27
Ιδιότητες (2/4) Κάθε πλήρες m-αδικό δέντρο µε k εσωτερικούς κόµβους έχει n = m k + 1 κόµβους. ικαιολόγηση: Κάθε κόµβος - εκτός της ϱίζας - είναι παιδί κάποιου εσωτερικού κόµβου. Επειδή είναι πλήρες m-αδικό, έχει m k κόµβους, εκτός της ϱίζας. Εποµένως, συνολικά έχει n = m k + 1 κόµβους. Ενα δέντρο µε k εσωτερικούς κόµβους και l ϕύλλα έχει n = k + l κόµβους. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 9 / 27
Ιδιότητες (3/4) Ενα πλήρες m-αδικό δέντρο µε n κόµβους, έχει: k = n 1 m (m 1)n + 1 l = m εσωτερικούς κόµβους ϕύλλα { n = m k + 1 κόµβους k εσωτερικούς κόµβµους, έχει: l ϕύλλα, έχει: l = (m 1)k + 1 n = m l 1 m 1 k = l 1 m 1 ϕύλλα κόµβους εσωτερικούς κόµβους Ολες οι σχέσεις προκύπτουν µε κατάλληλη επίλυση των n = m k + 1 και n = k + l. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 10 / 27
Ιδιότητες (4/4) Ενα m-αδικό δέντρο ύψους h έχει το πολύ m h ϕύλλα. Απόδειξη: µε ισχυρή επαγωγή στο ύψος, h. Βάση της Επαγωγής: Για m-αδικό δέντρο ύψους h = 1 ισχύει. Επαγωγική Υπόθεση: Εστω ότι ισχύει για όλα τα m-αδικά δέντρα ύψους h, όπου: 1 h k, για k 1 Επαγωγικό Βήµα: Για m-αδικό δέντρο ύψους h = k + 1: Αποσυνδέουµε - το πολύ m - υποδέντρα που «κρέµονται» από τη ϱίζα. Ολα µαζί έχουν τόσα ϕύλλα όσα το αρχικό δέντρο. Επιπλέον, έκαστο υποδέντρο έχει ύψος το πολύ h 1 = k. Εποµένως έκαστο έχει το πολύ m h 1 ϕύλλα (από επαγωγική υπόθεση). Επειδή είναι m υποδέντρα, το αρχικό έχει το πολύ m m h 1 = m h ϕύλλα. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 11 / 27
Ισοζυγισµένα έντρα και Υψος Ενα δέντρο (µε ϱίζα) ύψους h είναι ισοζυγισµένο αν: όλα τα ϕύλλα του ϐρίσκονται στο επίπεδο h ή στο επίπεδο h 1. Ισοζυγισµένο Μη ισοζυγισµένο Ισοζυγισµένο Αν ένα m-αδικό δέντρο έχει l ϕύλλα, τότε h lo m l. ιότι l m h h lo m l. Επειδή h ακέραιος, ϑα είναι h lo m l. Αν είναι πλήρες και ισοζυγισµένο, τότε h = lo m l. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 12 / 27
υαδικά έντρα Αναζήτησης ( Α) οµή οργάνωσης συνόλου από διατεταγµένα δεδοµένα. Π.χ., σύνολο από διαφορετικούς αριθµούς 2, 3, 6, 7, 13, 25. Ενας κόµβος για κάθε στοιχείο του διατεταγµένου συνόλου δεδοµένων. Το στοιχείο ονοµάζεται κλειδί του κόµβου. Κάθε κόµβος έχει το πολύ δύο παιδιά: το αριστερό και το δεξί. Ορισµός Α: Κάθε κόµβος έχει κλειδί που είναι: Μεγαλύτερο από όλα τα κλειδιά του αριστερού του υποδέντρου. ηλαδή του υποδέντρου µε ϱίζα το αριστερό του παιδί. Μικρότερο από όλα τα κλειδιά του δεξιού του υποδέντρου. ηλαδή του υποδέντρου µε ϱίζα το δεξί του παιδί. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 13 / 27
Παραδείγµατα Α 5 5 5 2 8 2 8 4 1 4 7 9 4 7 3 2 υαδικά έντρα Αναζήτησης Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 14 / 27
Αναζήτηση Κλειδιού σε Α 1. Ξεκινάµε την αναζήτηση από τη ϱίζα του δέντρου. 2. Αν το δέντρο είναι άδειο, η αναζήτηση αποτυγχάνει. 3. Αν Ϲητούµενο κλειδί = κλειδί ϱίζας: η αναζήτηση τερµατίζει επιτυχώς. 4. Αν Ϲητούµενο κλειδί < κλειδί ϱίζας: Εκτελούµε από το βήµα 1., για το αριστερό υποδέντρο. 5. Αν Ϲητούµενο κλειδί > κλειδί ϱίζας: Εκτελούµε από το βήµα 1., για το δεξιό υποδέντρο. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 15 / 27
Παραδείγµατα Αναζήτησης (1/2) Αναζήτηση του κλειδιού 3. 7 3<7 αριστερά 2 3>2 δεξιά 9 1 5 3<5 αριστερά 3 3=3 Επιτυχία Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 16 / 27
Παραδείγµατα Αναζήτησης (2/2) Αναζήτηση του κλειδιού 6. 7 6<7 αριστερά 2 6>2 δεξιά 9 1 5 6>5 Αποτυχία 3 Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 17 / 27
Εισαγωγή Κλειδιού σε Α 1. Αναζητούµε κόµβο µε το κλειδί που ϑέλουµε να εισάγουµε. 2. Αν ϐρεθεί τέτοιος κόµβος, τότε η εισαγωγή τερµατίζεται. 3. Αν η αναζήτηση είναι ανεπιτυχής: ϕτάσαµε σε κόµβο που δεν έχει ακµή προς παιδί. προσθέτουµε το κλειδί σε νέο κόµβο-παιδί τρέχοντος κόµβου. αριστερό παιδί, αν το νέο κλειδί είναι µικρότερο από το κλειδί του πατέρα, δεξιό παιδί, αν το νέο κλειδί είναι µεγαλύτερο από το κλειδί του πατέρα. Με επαναληπτικές εισαγωγές µπορούµε να κατασκευάσουµε ένα Α. 50, 35, 42, 17, 75, 60, 20, 48 Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 18 / 27
Παράδειγµα Κατασκευής Α (1/2) 50 50 Εισαγωγή του 50 ως ϱίζας του δέντρου 35 Εισαγωγή του κλειδιού 35 50 50 35 35 42 Εισαγωγή του κλειδιού 42 17 42 Εισαγωγή του κλειδιού 17 Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 19 / 27
Παράδειγµα Κατασκευής Α (2/2) 50 50 35 75 35 75 17 42 17 42 60 Εισαγωγή του κλειδιού 75. 50 Εισαγωγή του κλειδιού 60. 50 35 75 35 75 17 42 60 17 42 60 20 20 48 Εισαγωγή του κλειδιού 20. Εισαγωγή του κλειδιού 48. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 20 / 27
Επικαλύπτον έντρο Γραφήµατος Επικαλύπτον δέντρο ενός απλού γραφήµατος G είναι ένα επικαλύπτον υπογράφηµα του G (περιέχει κάθε κόµβο του G), που συνιστά δέντρο. Ενα γράφηµα G και τρία επικαλύπτοντα δέντρα (spannin trs). a b a b G a b T 1 a b T 2 T 3 Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 21 / 27
Εύρεση Επικαλυπτόντος έντρου Με διαδοχική εξάλειψη κύκλων του γραφήµατος a b a b 1. Αφαίρεση της ακµής {a, } a b 2. Αφαίρεση της ακµής {, } a b 3. Αφαίρεση της ακµής {, } Τελικό επικαλύπτον δέντρο. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 22 / 27
Εύρεση Επικαλύπτοντος έντρου Με Πρώτα Κατά Βάθος Αναζήτηση ( Dpth-First Sarh) στο γράφηµα 1. Εκκινούµε από οποιονδήποτε κόµβο του γραφήµατος και τον σηµαδεύουµε. Αυτός ϑα είναι η ϱίζα ενός επικαλύπτοντος δέντρου του γραφήµατος. 2. Ακολουθούµε ένα µονοπάτι από «συνεχόµενες» ακµές: κάθε ακµή πρόσκειται στον κόµβο που επισκεφθήκαµε πιο πρόσφατα. κάθε νέο κόµβο που επισκεπτόµαστε τον σηµαδεύουµε. 3. Αν επισκεφθούµε σηµαδεµένο κόµβο για 2η φορά: αφαιρούµε από το γράφηµα την ακµή που µας οδήγησε σε αυτόν ξανά. 4. Επιστρέφουµε στον κόµβο που επισκεφθήκαµε πιο πρόσφατα: και διαθέτει «νέες» προσκείµενες ακµές για να ακολουθήσουµε. Επαναλαµβάνουµε από το ϐήµα 2. Ο αλγόριθµος τερµατίζει όταν επιστρέψουµε στον κόµβο όπου εκκινήσαµε και δεν έχουν αποµείνει ακµές για διάσχιση. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 23 / 27
Πρώτα Κατά Βάθος Αναζήτηση: Παράδειγµα Εκκινούµε στον κόµβο a. Κάθε κόµβος σηµαδεύεται µε τη σειρά επίσκεψης. a, 1 b, 2 a, 1 b, 2, 4, 3, 4, 3, 5 Αφαίρεση της ακµής {a, }. Επιστρέφουµε στον κόµβο. a, 1 b, 2, 6, 7 Αφαίρεση της ακµής {, }. Επιστρέφουµε στον κόµβο. a, 1 b, 2, 6, 7, 4, 5, 3 Επιστρέφουµε στον κόµβο., 4, 3, 5 Αφαιρούµε την ακµή {, }. Επιστρέφουµε στον κόµβο. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 24 / 27
Εύρεση Επικαλύπτοντος έντρου Με Πρώτα Κατά Πλάτος Αναζήτηση ( Brath-First Sarh) στο γράφηµα 1. Εκκινούµε από οποιονδήποτε κόµβο του γραφήµατος και τον εισάγουµε σε µια διατεταγµένη λίστα κόµβων L. Αυτός ϑα είναι η ϱίζα ενός επικαλύπτοντος δέντρου του γραφήµατος. 2. Οσο η λίστα L δεν είναι άδεια: Εξάγουµε τον πρώτο κόµβο v από τη λίστα L και τον σηµαδεύουµε. Για κάθε ακµή {v, w} E µε {v, w} T: Αν w δεν είναι σηµαδεµένος: Εισάγουµε την {v, w} στο T. Εισάγουµε τον w στο τέλος της λίστας L. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 25 / 27
Πρώτα Κατά Πλάτος Αναζήτηση: Παράδειγµα (1/2) Εκκινούµε στον κόµβο a. Κάθε κόµβος σηµαδεύεται µε τη σειρά επίσκεψης. a, 1 b a, 1 b, 2 T = { {a, b}, {a, } }. L = [ b, ]. T = {{a, b}, {a, }, {b, }}. L = [, ]. a, 1 b, 2 a, 1 b, 2, 3, 3, 4 T = {{a, b}, {a, }, {b, }, {, }}. L = [, ]. T = {{a, b}, {a, }, {b, }, {, }, {, }} L = [, ]. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 26 / 27
Πρώτα Κατά Πλάτος Αναζήτηση: Παράδειγµα (2/2) a, 1 b, 2 a, 1 b, 2, 6, 3, 4, 5 T = {{a, b}, {a, }, {b, }, {, }, {, }} L = [ ]. a, 1 b, 2, 6, 7, 3, 4, 5 T = { {a, b}, {a, }, {b, }, {, }, {, }, {, }} L = [ ]., 3, 4, 5 T = { {a, b}, {a, }, {b, }, {, }, {, }, {, }} L = [ ]. Ο. Τελέλης Πανεπιστήµιο Πειραιώς έντρα 27 / 27