Διακριτά Μαθηματικά ΙI Δέντρα Κώστας Στεργίου Λέκτορας Τμήμα Μηχανικών Πληροφοριακών & Επικοινωνιακών Συστημάτων Πανεπιστήμιο Αιγαίου e-mail: konsterg@aegean.gr ΤΜΗΜΑ ΜΠΕΣ
Ορισμοί Δέντρο είναι ένας συνεκτικός, μη κατευθυνόμενος γράφος, χωρίς απλά κυκλώματα δηλ. χωρίς και στοιχειώδη κυκλώματα Δάσος είναι ένα σύνολο διαζευγμένων δέντρων πότε δύο σύνολα είναι διαζευγμένα? Μια κορυφή που συνδέεται μόνο με μια άλλη (δηλ. έχει βαθμό 1) ονομάζεται φύλλο ή τερματικός κόμβος Μια κορυφή που συνδέεται με περισσότερες από μια άλλες (δηλ. έχει βαθμό >1) ονομάζεται εσωτερικός κόμβος ΤΜΗΜΑ ΜΠΕΣ
Ιδιότητες Δέντρων Υπάρχει ένα μοναδικό μονοπάτι μεταξύ κάθε δυο κορυφών ενός δέντρου γιατί ισχύει αυτό? Σε ένα δέντρο ο αριθμός των κορυφών είναι κατά ένα μεγαλύτερος από τον αριθμό των ακμών Κάθε δέντρο με δύο ή περισσότερες κορυφές έχει τουλάχιστον δύο φύλλα ΤΜΗΜΑ ΜΠΕΣ
Εναλλακτικοί Ορισμοί Ένας γράφος στον οποίο υπάρχει ένα μοναδικό μονοπάτι μεταξύ δύο οποιωνδήποτε κορυφών είναι δέντρο απόδειξη? Ένας συνεκτικός γράφος με e = v -1 είναι δέντρο Ένας γράφος με e = v -1 που δεν περιέχει κύκλωμα είναι δέντρο Έστω άτομα που ανταλλάσσουν μηνύματα. Κάθε άτομο όταν λαμβάνει μήνυμα το στέλνει σε άλλον/άλλους που δεν το έχουν λάβει Έστω G=(V,E) ο γράφος όπου οι κορυφές είναι τα άτομα που έλαβαν το μήνυμα και οι ακμές τα μηνύματα είναι συνεκτικός? ισχύει e = v - 1 ? ΤΜΗΜΑ ΜΠΕΣ
Δέντρα με Ρίζα Ένας κατευθυνόμενος γράφος ονομάζεται κατευθυνόμενο δέντρο αν γίνεται δέντρο όταν οι κατευθύνσεις αγνοηθούν Ένα κατευθυνόμενο δέντρο ονομάζεται δέντρο με ρίζα αν υπάρχει ακριβώς μια κορυφή με εισερχόμενο βαθμό 0 (που είναι η ρίζα) και οι εισερχόμενοι βαθμοί όλων των άλλων κορυφών είναι 1 ΤΜΗΜΑ ΜΠΕΣ
Ίδιο δέντρο με διαφορά στην επιλογή Δέντρα με Ρίζα Από ένα δέντρο χωρίς ρίζα με n κόμβους μπορούμε να πάρουμε n δέντρα με ρίζα ρίζα Ίδιο δέντρο με διαφορά στην επιλογή ρίζας ΤΜΗΜΑ ΜΠΕΣ
Γιατί μας ενδιαφέρουν τα δέντρα? Πολλές σχέσεις μεταξύ διακριτών αντικειμένων στον πραγματικό κόσμο μπορούν να αναπαρασταθούν ως δέντρα γενεαλογικό δέντρο, αγώνες σε τουρνουά τένις, διάγραμμα οργάνωσης οργανισμών, δομή των φακέλων σε υπολογιστές κτλ. Δεντρικές δομές μπορούν να χρησιμοποιηθούν για την αποθήκευση δεδομένων στη μνήμη και στο δίσκο εξασφαλίζοντας γρήγορη εκτέλεση βασικών λειτουργιών (αναζήτηση εισαγωγή, διαγραφή) οι περισσότερες λειτουργίες έχουν πολυπλοκότητα O(log N) θα δούμε αργότερα τι σημαίνει αυτό ΤΜΗΜΑ ΜΠΕΣ
Δέντρα με Ρίζα Κάθε δέντρο με ρίζα έχει έναν ειδικό κόμβο που ονομάζεται ρίζα Η ρίζα μπορεί να έχει 0 ή περισσότερους κόμβους από κάτω της. Αυτοί οι κόμβοι ορίζουν τα υποδέντρα της ρίζας ρίζα υποδέντρο ΤΜΗΜΑ ΜΠΕΣ
Κόμβοι-Γονείς και Κόμβοι-Παιδιά Η ρίζα κάθε υποδέντρου κάτω από τη ρίζα ‘r’ του δέντρου ονομάζεται παιδί (child) της ρίζας ‘r’ Ο κόμβος ‘r’ ονομάζεται ο γονέας (ή πατέρας) (parent) κάθε παιδιού του ‘r’ Ο ορισμός των δέντρων είναι αναδρομικός: Τα παιδιά της ρίζας έχουν κι αυτά υποδέντρα, κ.ο.κ. ρίζα παιδί της ρίζας υποδέντρο ΤΜΗΜΑ ΜΠΕΣ
Ακμές Ένας πατέρας και τα παιδιά του ενώνονται με ακμές (edges) Ένα δέντρο με N κόμβους έχει N-1 ακμές Σε ένα δέντρο, μια ακμή οδηγεί από τον πατέρα στο παιδί (κι όχι αντίστροφα) ακμή ΤΜΗΜΑ ΜΠΕΣ
Παράδειγμα A B C D E F G H I J K L T2 T4 T1 T3 T5 ΤΜΗΜΑ ΜΠΕΣ
Παράδειγμα – Ορισμοί Στο σχήμα της προηγούμενης διαφάνειας Ο κόμβος A είναι η ρίζα Οι κόμβοι B, C, D, E και F είναι παιδιά της ρίζας A Η ρίζα A έχει 5 υποδέντρα: T1 ως T5 Ο κόμβος B έχει κι αυτός δύο υποδέντρα που αποτελούνται από τους κόμβους G και H, ο D έχει ένα υποδέντρο με τον κόμβο I ο κόμβος F? Τα υποδέντρα των κόμβων C και E είναι κενά ΤΜΗΜΑ ΜΠΕΣ
Φύλλα Ένα φύλλο (leaf) είναι ένας κόμβος που δεν έχει παιδιά Οι κόμβοι C, E, G, H , I, J, K και L είναι φύλλα A B C D E F G H I J K L ΤΜΗΜΑ ΜΠΕΣ
Αδέρφια Κόμβοι που έχουν τον ίδιο πατέρα ονομάζονται αδερφικοί κόμβοι, ή απλά αδέρφια (siblings) Στο προηγούμενο δέντρο, οι B, C, D, E και F είναι αδέρφια επειδή έχουν κοινό πατέρα (τον A) Οι G και H είναι αδέρφια ως παιδιά του B Οι H και I δεν είναι αδέρφια, ούτε και οι G και J μια και έχουν διαφορετικούς πατέρες ΤΜΗΜΑ ΜΠΕΣ
Μονοπάτια Ένα μονοπάτι (path) από έναν κόμβο n1 σε έναν κόμβο nk είναι μια σειρά κόμβων που αρχίζει στο n1 και τελειώνει στο nk τέτοια ώστε κάθε ni στη σειρά είναι ο πατέρας του ni+1, 1 <= i <=k Το μήκος (length) ενός μονοπατιού είναι το πλήθος των ακμών στο μονοπάτι Ένα μονοπάτι με k κόμβους έχει μήκος k-1 Το μονοπάτι A-C-H-I έχει μήκος 3 ΤΜΗΜΑ ΜΠΕΣ
Βάθος ενός Κόμβου Το βάθος (depth) ενός κόμβου ‘n’ δίνεται από το μήκος του μονοπατιού από τη ρίζα του δέντρου ως τον ‘n’ Η ρίζα έχει βάθος 0 Βάθος 0 Βάθος 1 Βάθος 2 ΤΜΗΜΑ ΜΠΕΣ
Ύψος ενός Κόμβου Το ύψος (height) ενός κόμβου ‘n’ είναι το μήκος του μονοπατιού από τον ‘n’ στο πιο βαθύ φύλλο που είναι κάτω από τον ‘n’ Τα φύλλα έχουν ύψος 0 Το ύψος της ρίζας είναι το ύψος του δέντρου ΤΜΗΜΑ ΜΠΕΣ
Παράδειγμα Στο διπλανό σχήμα, ο κόμβος A έχει ύψος 3 γατί ο F είναι ο πιο βαθύς κόμβος από κάτω του και το μονοπάτι από τον A στον F έχει μήκος 3 Ο E είναι επίσης φύλλο κάτω από τον A αλλά ο E δεν είναι το πιο βαθύ φύλλο κάτω από τον A Άλλα ύψη κόμβων είναι B: 2, D: 1 and C: 1 Τα φύλλα E και F έχουν ύψος 0 A C B D E F ΤΜΗΜΑ ΜΠΕΣ
Πρόγονοι κι Απόγονοι Αν υπάρχει ένα μονοπάτι από τον n1 στον n2 τότε ο n1 είναι πρόγονος (ancestor) του n2 και ο n2 είναι απόγονος (descendant) του n1 ο Η απόγονος του Α ο Α πρόγονος του Η o Ι απόγονος του C o F απόγονος του C ΤΜΗΜΑ ΜΠΕΣ
Διατεταγμένα Δέντρα Ένα διατεταγμένο δέντρο είναι ένα δέντρο με ρίζα όπου οι ακμές που ξεκινούν από κάθε εσωτερικό κόμβο είναι σε διάταξη δηλ. υπάρχει πρώτη ακμή, δεύτερη, τρίτη, κτλ. κατά συνέπεια υπάρχει διάταξη μεταξύ των υποδέντρων που ξεκινούν από κάθε κορυφή 1 2 3 1 2 1 2 1 ΤΜΗΜΑ ΜΠΕΣ
Διατεταγμένα Δέντρα Ένα διατεταγμένο δέντρο στο οποίο κάθε εσωτερικός κόμβος έχει το πολύ m παιδιά ονομάζεται m-αδικό δέντρο Ένα m-αδικό δέντρο ονομάζεται κανονικό αν καθένας από τους εσωτερικούς κόμβους έχει ακριβώς m παιδιά 1 2 1 2 3 3 1 2 1 1 2 1 2 2 1 1 ΤΜΗΜΑ ΜΠΕΣ
Δυαδικά Δέντρα Θεώρημα: Ένα δέντρο με ρίζα είναι δυαδικό αν και μόνο αν κάθε κόμβος εκτός από τη ρίζα έχει βαθμό ≤ ___, και η ρίζα έχει βαθμό ≤ ___. ΤΜΗΜΑ ΜΠΕΣ
Διάσχιση Δέντρου H διάσχιση (traversal) ενός δέντρου είναι η διαδικασία επίσκεψης όλων των κόμβων ενός δέντρου (αρχίζοντας από τη ρίζα) βασική λειτουργία όταν π.χ. θέλουμε να βρούμε έναν κόμβο με κάποια συγκεκριμένα χαρακτηριστικά και να τυπώσουμε τα στοιχεία του Υπάρχουν διάφοροι τρόποι διάσχισης ενός δέντρου (δηλ. διάφοροι τρόποι να προσδιοριστεί η σειρά εκτύπωσης των στοιχείων των κόμβων) depth first pre-order post-order in-order breadth first ΤΜΗΜΑ ΜΠΕΣ
Παράδειγμα A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Pre-order (προδιάταξη) Αλγόριθμος: Επισκέψου τον τρέχοντα κόμβο Κάνε ένα pre-order traversal των υποδέντρων κάτω από αυτόν τον κόμβο από αριστερά προς δεξιά Ο αλγόριθμος είναι αναδρομικός μια και τα υποδέντρα του τρέχοντος κόμβου έχουν κι αυτά υποδέντρα κ.ο.κ. περισσότερα για αναδρομικούς αλγόριθμους αργότερα Η διάσχιση με προδιάταξη είναι ισοδύναμη με τη γνωστή κατά βάθος διάσχιση του δέντρου ΤΜΗΜΑ ΜΠΕΣ
Pre-order (παράδειγμα) Αρχίζουμε στη ρίζα A Κόμβοι που επισκεφθήκαμε: A. Ο κόμβος A έχει 5 υποδέντρα. Αρχίζουμε με το πιο αριστερό T1 Η ρίζα του υποδέντρου T1 είναι ο κόμβος B, οπότε επισκεπτόμαστε τον B Κόμβοι που επισκεφθήκαμε: A B A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Pre-order (παράδειγμα) Ο B έχει δύο υποδέντρα που περιέχουν τους κόμβους G and H. Πρώτα επισκεπτόμαστε τον G γιατί είναι πιο αριστερά Κόμβοι που επισκεφθήκαμε: A B G Ο G δεν έχει υποδέντρα, οπότε πηγαίνουμε στο δεξί υποδέντρο κάτω από το B που έχει τον κόμβο H Κόμβοι που επισκεφθήκαμε: A B G H A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Pre-order (παράδειγμα) Ο H δεν έχει υποδέντρα. Τελειώσαμε με το υποδέντρο T1 κάτω από το A και τώρα προχωράμε στο υποδέντρο T2 Το T2 έχει μόνο έναν κόμβο, τον C. Επισκεπτόμαστε τον C Κόμβοι που επισκεφθήκαμε: A B G H C Ο C δεν έχει υποδέντρα, οπότε τελειώσαμε με το υποδέντρο T2 και μετακινούμαστε στο υποδέντρο T3 A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Pre-order (παράδειγμα) Το pre-order traversal του T3 δίνει D και I Κόμβοι που επισκεφθήκαμε: A B G H C D I Το pre-order traversal του υποδέντρου T4 δίνει E Κόμβοι που επισκεφθήκαμε: A B G H C D I E A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Pre-order (παράδειγμα) Τέλος, κάνουμε ένα pre-order traversal του υποδέντρου T5 που δίνει F, J , K , L Κόμβοι που επισκεφθήκαμε: A B G H C D I E F J K L Τελειώσαμε με όλα τα υποδέντρα κάτω από τη ρίζα A και ο αλγόριθμος τερματίζει A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Post-order (μεταδιάταξη) Αλγόριθμος: Κάνε ένα post-order traversal των υποδέντρων κάτω από τον τρέχοντα κόμβο από αριστερά προς τα δεξιά Επισκέψου τον τρέχοντα κόμβο Παρόμοια με την pre-order traversal. Μόνο που η σειρά επίσκεψης του τρέχοντος κόμβου και των υποδέντρων του είναι αντίστροφη. ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) A B C D E F G H I J K L ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) Πρώτα κάνουμε post-order διάσχιση του πιο αριστερού υποδέντρου της ρίζας A Κόμβοι που επισκεφθήκαμε: - Ο κόμβος Β έχει 2 υποδέντρα. Κάνουμε post-order διάσχιση πιο αριστερού Ο κόμβος G δεν έχει υποδέντρα, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: G A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) Ο Η δεν έχει υποδέντρα, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: G H A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) Επισκεπτόμαστε τώρα τον Β Κόμβοι που επισκεφθήκαμε: G H Β Κάνουμε τώρα post-order διάσχιση του επόμενου υποδέντρου του Α. Το C δεν έχει υποδέντρα. Επισκεπτόμαστε τον C Κόμβοι που επισκεφθήκαμε: G H Β C A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) Κάνουμε τώρα post-order διάσχιση του επόμενου υποδέντρου του Α. Το post-order traversal του T3 δίνει I και D Κόμβοι που επισκεφθήκαμε: G H Β C I D Το post-order traversal του υποδέντρου T4 δίνει E Κόμβοι που επισκεφθήκαμε: G H Β C I D E A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Post-order (παράδειγμα) Τέλος, κάνουμε ένα post-order traversal του υποδέντρου T5 που δίνει J , K , L , F Κόμβοι που επισκεφθήκαμε: G H B C I D E J K L F A Τελειώσαμε και με τη ρίζα A και ο αλγόριθμος τερματίζει A B C D E F G H I J K L T1 T2 T3 T4 T5 ΤΜΗΜΑ ΜΠΕΣ
Εφαρμογή των Pre και Post-order διασχίσεων Πανεπιστήμιο Ιατρικών Επ. Θετικών Επ. Θεωρητικών Επ. Οικονομ. Επ. Διοίκηση Πανεπ. Ιατρική ΜΠΕΣ Μαθηματικό Παιδαγωγικό Διοίκησης Επ. Οικονομ. Λογιστικής Τεχνητή Νοημοσύνη Ανάλυση Άλγεβρα Δίκτυα Ασφάλεια Εφαρμοσμένα Οικονομικά Διοίκηση Πληροφοριακών Συστημάτων Marketing Ασφάλεια Δικτύων Ασφάλεια Βάσεων Δεδομένων Πως μπορούμε να απαντήσουμε σε ερωτήσεις όπως: Ανήκει η Ασφάλεια Δικτύων στη Σχ. Θετικών Επιστημών? ΤΜΗΜΑ ΜΠΕΣ
In-order (ενδοδιάταξη) Αλγόριθμος: Κάνε ένα in-order traversal του αριστερού υποδέντρου κάτω από τον τρέχοντα κόμβο Επισκέψου τον τρέχοντα κόμβο Κάνε ένα in-order traversal του δεξιού υποδέντρου κάτω από τον τρέχοντα κόμβο Ο αλγόριθμος in-order εφαρμόζεται μόνο σε δυαδικά δέντρα! ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) E C F B D A G I H J J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Πρώτα κάνουμε in-order διάσχιση του αριστερού υποδέντρου της ρίζας A Κόμβοι που επισκεφθήκαμε: - Κάνουμε in-order διάσχιση του αριστερού υποδέντρου του Β Κάνουμε in-order διάσχιση του αριστερού υποδέντρου του Ε J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Ο Η δεν έχει υποδέντρα, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: H Επισκεπτόμαστε τώρα τον κόμβο Ε Κόμβοι που επισκεφθήκαμε: Η Ε Κάνουμε in-order διάσχιση του δεξιού υποδέντρου του Ε J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Ο Ι δεν έχει υποδέντρα, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: H Ε Ι Επισκεπτόμαστε τώρα τον κόμβο Β Κόμβοι που επισκεφθήκαμε: H Ε Ι Β Κάνουμε in-order διάσχιση του δεξιού υποδέντρου του Β J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Ο F δεν έχει υποδέντρα, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: H Ε Ι Β F Επισκεπτόμαστε τώρα τον κόμβο A Κόμβοι που επισκεφθήκαμε: H Ε Ι Β F A J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Τώρα κάνουμε in-order διάσχιση του δεξιού υποδέντρου της ρίζας A Ο κόμβος C δεν έχει δεξιό υποδέντρο, οπότε τον επισκεπτόμαστε Κόμβοι που επισκεφθήκαμε: H Ε Ι Β F A C J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
In-order (παράδειγμα) Η in-order διάσχιση του αριστερού υποδέντρου του C δίνει J G K Κόμβοι που επισκεφθήκαμε: H Ε Ι Β F A C J G K Τελειώσαμε έχοντας επισκεφτεί όλους τους κόμβους J A B C E F G H I K ΤΜΗΜΑ ΜΠΕΣ
Αναζήτηση Πρώτα κατά Πλάτος (Breadth-First Search) H Breadth-First Search (BFS) διασχίζει ένα συνδεδεμένο κομμάτι ενός γράφου Η BFS σε ένα δέντρο G λειτουργεί ως εξής: Στον αρχικό κόμβο (ρίζα) s, δίνεται η απόσταση 0. Στην πρώτη επανάληψη, ο αλγόριθμος επισκέπτεται όλους τους κόμβους που είναι παιδιά του αρχικού. Σε αυτούς δίνεται απόσταση 1. Στη συνέχεια η BFS επισκέπτεται όλους τους κόμβους που απέχουν απόσταση 2 από τον αρχικό, κ.ο.κ. ΤΜΗΜΑ ΜΠΕΣ
Breadth First (κατα πλάτος) Α Β C D E F G H I J K L A B C D E F G H I J K L ΤΜΗΜΑ ΜΠΕΣ
Διάσχιση Δέντρων Σε ένα τουρνουά τένις θέλουμε να τυπώσουμε όλα τα αποτελέσματα των αγώνων οι πληροφορίες των αγώνων είναι αποθηκευμένες σε μια δενδρική δομή W: Federer L: Roddick S: 3-1 F W: Federer L: Hewitt S: 3-0 SF1 W: Roddick L: Haas S: 3-2 SF2 W: Federer L: Safin S: 3-1 QF1 W: Hewitt L: Henman S: 3-0 QF2 W: Roddick L: Murray S: 3-2 QF3 W: Haas L: Arthur S: 3-2 QF4 W: Federer L: Lubij S: 3-1 41 W: Safin L: Monfils S: 3-2 42 W: Hewitt L: Blake S: 3-0 43 W:Henam L: Rusedski S: 3-0 44 Wr: Roddick L: McEnroe S: 3-2 45 W: Murray L: Aggassi S: 3-2 46 W: Haasr L: Kiefer S: 3-1 47 W: Arthur L: Bagdatis S: 3-2 48 Κάντε pre-order, post-order, in-order, BF διάσχιση στο δέντρο ΤΜΗΜΑ ΜΠΕΣ
Επικαλύπτοντα Δέντρα (Spanning Trees) Ένα επικαλύπτον δέντρο ενός γράφου G είναι ένας υπογράφος του G που είναι δέντρο περιέχει όλους τους κόμβους του G ΤΜΗΜΑ ΜΠΕΣ
Ελάχιστα Επικαλύπτοντα Δέντρα Μη κατευθυνόμενος, συνδεδεμένος γράφος G = (V,E) Συνάρτηση Βάρους W: E ® R (δίνει κάποιο κόστος ή άλλη τιμή στις ακμές) Επικαλύπτον δέντρο: δέντρο που συνδέει όλους τους κόμβους (στο παράδειγμα?) Ελάχιστο επικαλύπτον δέντρο: συνδέει όλους τους κόμβους και ελαχιστοποιεί: ΤΜΗΜΑ ΜΠΕΣ
Ελάχιστα Επικαλύπτοντα Δέντρα Παράδειγμα: Έστω κάποιες πόλεις που συνδέονται με χωματό-δρομους. Η ασφαλτόστρωση κάθε δρόμου έχει κάποιο συγκεκριμένο χρηματικό κόστος. Θέλουμε να ασφαλτοστρώσουμε με το ελάχιστο κόστος ένα υποσύνολο των δρόμων έτσι ώστε να συνδέονται όλες οι πόλεις. δίκτυο χωματόδρομων – γράφος πόλεις – κορυφές γράφου δρόμοι – ακμές γράφου κόστος ασφαλτόστρωσης δρόμου – βάρος ακμής Το ζητούμενο είναι να προσδιοριστεί ένα ελάχιστο επικαλύπτον δέντρο ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim Βασίζεται στους κόμβους Χτίζει ένα δέντρο Τ, κόμβο με κόμβο Οι κόμβοι του Τ που έχουν ήδη υπολογιστεί ανήκουν σε ένα σύνολο S Σε κάθε κόμβο v που βρίσκεται εκτός συνόλου δώσε την τιμή key[v] = το ελάχιστο βάρος μιας ακμής που συνδέει το v με έναν κόμβο μέσα στο σύνολο S key[v] = ¥, αν δεν υπάρχει τέτοιος κόμβος Πρόσθεσε στο S τον κόμβο με την ελάχιστη τιμή του key Ο αλγόριθμος τελειώνει όταν όλοι οι κόμβοι ανήκουν στο S ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim updating keys MST-Prim(G,w,r) 01 Q := V[G] // Q – vertices out of T 02 for each u Î Q do 03 key[u] := ¥ 04 key[r] := 0 05 p[r] := NIL 06 while Q ¹ Æ do 07 u := ExtractMin(Q) // making u part of T 08 for each v Î Adj[u] do 09 if v Î Q and w(u,v) < key[v] then 10 p[v] := u 11 key[v] := w(u,v) updating keys ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim – Παράδειγμα ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim – Παράδειγμα ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim – Παράδειγμα ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Prim – Πολυπλοκότητα Time = |V|T(ExtractMin) + O(E)T(ModifyKey) Time = O(V logV + E logV) = O(E logV) Q T(ExtractMin) T(DecreaseKey) Total array O(V) O(1) O(V 2) binary heap O(log V) O(E logV ) Fibonacci heap O(V logV +E ) ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal Βασίζεται στις ακμές Προσθέτει τις ακμές μία μία, με αυξανόμενο βάρος πρέπει να είναι ταξινομημένες Ο αλγόριθμος διατηρεί ένα δάσος από δέντρα – Α αρχικά υπάρχουν μόνο κορυφές στο δάσος μια ακμή γίνεται δεκτή αν συνδέει κόμβους από διαφορετικά δέντρα Χρειαζόμαστε μια δομή δεδομένων που διατηρεί έναν διαμερισμό (partition), δηλ. μια συλλογή από διακριτά σύνολα MakeSet(S,x): S ¬ S È {{x}} Union(Si,Sj): S ¬ S – {Si,Sj} È {Si È Sj} FindSet(S, x): returns unique Si Î S, where x Î Si ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal Ο αλγόριθμος προσθέτει τη φτηνότερη ακμή που συνδέει δύο δέντρα του δάσους έτσι ώστε να μην προκύπτει κύκλος MST-Kruskal(G,w) 01 A ¬ Æ 02 for each vertex v Î V[G] do 03 Make-Set(v) 04 sort the edges of E by non-decreasing weight w 05 for each edge (u,v) Î E, in order by non-decreasing weight do 06 if Find-Set(u) ¹ Find-Set(v) then 07 A ¬ A È {(u,v)} 08 Union(u,v) 09 return A ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal ΤΜΗΜΑ ΜΠΕΣ
Ο Αλγόριθμος του Kruskal – Πολυπλοκότητα Αρχικοποίηση σε O(V) χρόνο Ταξινόμηση των ακμών σε O(E log E) = O(E log V) O(E) κλήσεις στην FindSet Κόστος Ενώσεων t(v) – όσες φορές το v μετακινείται σε ένα νέο cluster Κάθε φορά που ένας κόμβος μετακινείται σε ένα νέο cluster το μέγεθος του cluster που περιέχει τον κόμβο τουλάχιστον διπλασιάζεται: t(v) £ log V Συνολικός χρόνος για ενώσεις Συνολικός Χρόνος: O(E log V) ΤΜΗΜΑ ΜΠΕΣ
Γιατί οι δύο αλγόριθμοι είναι σωστοί? Θεώρημα: Έστω G=(V,E,w) συνεκτικός βεβαρημένος γράφος και V1, V2 μια διαμέριση του V. Εάν e=(v,w) E, v V1 και w V2, είναι η ακμή με το ελάχιστο βάρος μεταξύ όλων που συνδέουν κορυφές της διαμέρισης, τότε υπάρχει ένα ελάχιστο επικαλύπτον δέντρο (ΕΕΔ) που την περιέχει. Απόδειξη: Έστω ένα οποιοδήποτε ΕΕΔ Τ. Αν δεν περιέχει την e, τότε η προσθήκη της στο Τ δημιουργεί έναν κύκλο. Αφαιρώντας από τον κύκλο την ακμή e’ που τα άκρα της ανήκουν στα σύνολα της διαμερίσεως, προκύπτει ένα νέο ΕΕΔ Τ’, με βάρος weight(T’)≤weight(T), μια και weight(e)≤weight(e’). Άρα το Τ περιέχει την e 4 ΤΜΗΜΑ ΜΠΕΣ
Γιατί οι δύο αλγόριθμοι είναι σωστοί? Θεώρημα: Έστω G=(V,E,w) συνεκτικός βεβαρημένος γράφος και έστω G’ ένας υπογράφος ενός ΕΕΔ του G. Έστω C ένα τμήμα του G’ και S το σύνολο όλων των ακμών με μια κορυφή στο C και την άλλη εκτός C. Αν προσθέσουμε μια ακμή ελάχιστου βάρους του S στο G’, ο γράφος που προκύπτει επίσης περιέχεται σε ένα ΕΕΔ του G. ΤΜΗΜΑ ΜΠΕΣ
Γιατί οι δύο αλγόριθμοι είναι σωστοί? Απόδειξη: Έστω Τ το ΕΕΔ που περιέχει το G’ και e=(v,w) μια ακμή ελάχιστου βάρους του S. Πρέπει να δείξουμε ότι ο γράφος που προκύπτει προσθέτοντας την e στο G’ εμπεριέχεται σε ένα ΕΕΔ. Ας υποθέσουμε ότι το Τ δεν περιέχει το e (τι γίνεται αλλιώς?). Αν προσθέσουμε την e στο T και αφαιρέσουμε μια ακμή από τον κύκλο K που προκύπτει, ο υπογράφος Τ’ που προκύπτει είναι επίσης ΕΕΔ. Διαλέγουμε την ακμή που θα αφαιρεθεί ως εξής: Έστω w’ η πρώτη κορυφή στον K, πηγαίνοντας από το v στο w, που δεν είναι στο C, και έστω v’ ο κόμβος του K ακριβώς πριν τον w’ (άρα ο v’ είναι στο C). Προσθέτουμε την e στο Τ και αφαιρούμε την (v’,w’) για να πάρουμε το Τ’. Μια και η e είναι ακμή ελάχιστου βάρους με έναν κόμβο στο C και έναν άλλο εκτός C, weight(v’,w’) weight(v,w) Άρα: weight(T) weight(T’) Μια και το Τ είναι ΕΕΔ, πρέπει να έχουμε weight(T) = weight(T’) w’ v’ v Κ w C ΤΜΗΜΑ ΜΠΕΣ
Απόδειξη Ορθότητας Αλγορίθμου του Prim Απόδειξη με Επαγωγή: Θα δείξουμε με επαγωγή ότι σε κάθε βήμα του αλγόριθμου το δέντρο που κατασκευάζεται εμπεριέχεται σε ένα ΕΕΔ. Οπότε με την ολοκλήρωση του αλγόριθμου, το δέντρο θα είναι ένα ΕΕΔ. Όταν ξεκινάμε το δέντρο δεν έχει ακμές και συνεπώς εμπεριέχεται σε όλα τα ΕΕΔ. Άρα το βασικό βήμα της επαγωγής είναι αληθές. Για το επαγωγικό βήμα, έστω Τ το δέντρο που έχει κατασκευαστεί πριν μια επανάληψη. Η επαγωγική υπόθεση είναι ότι το Τ περιέχεται σε ένα ΕΕΔ. Έστω (v,w) η επόμενη ακμή που επιλέγει ο αλγόριθμος, όπου v ανήκει στο T και w δεν ανήκει στο T. Έστω G’ ο υπογράφος που αποτελείται από το Τ και όλους τους κόμβους που δεν είναι στο Τ. Τότε το Τ είναι ένα τμήμα του G’ (ο οποίος είναι υπογράφος ενός ΕΕΔ) και η (v,w) είναι μια ακμή ελαχίστου κόστους με έναν κόμβο στο Τ κι έναν εκτός Τ. Από το προηγούμενο θεώρημα, όταν προστεθεί η (v,w) στο G’, ο γράφος που προκύπτει εμπεριέχεται επίσης σε ένα ΕΕΔ. Άρα το επαγωγικό βήμα τελείωσε και το θεώρημα αποδείχθηκε. ΤΜΗΜΑ ΜΠΕΣ
Απόδειξη Ορθότητας Αλγορίθμου του Kruskal Απόδειξη με Επαγωγή: Θα δείξουμε με επαγωγή ότι σε κάθε βήμα του αλγόριθμου ο υπογράφος που κατασκευάζεται εμπεριέχεται σε ένα ΕΕΔ. Οπότε με την ολοκλήρωση του αλγόριθμου, ο υπογράφος θα είναι ένα ΕΕΔ. Όταν ξεκινάμε ο υπογράφος δεν έχει ακμές και συνεπώς εμπεριέχεται σε όλα τα ΕΕΔ. Άρα το βασικό βήμα της επαγωγής είναι αληθές. Για το επαγωγικό βήμα, έστω G’ ο υπογράφος που έχει κατασκευαστεί πριν μια επανάληψη. Η επαγωγική υπόθεση είναι ότι ο G’ περιέχεται σε ένα ΕΕΔ. Έστω (v,w) η επόμενη ακμή που επιλέγει ο αλγόριθμος, και C το τμήμα του G’ όπου ανήκει o v. Η (v,w) είναι μια ακμή ελαχίστου κόστους με έναν κόμβο στο C κι έναν εκτός C μια και είναι μια ακμή από ένα τμήμα σε κάποιο άλλο. Από το προηγούμενο θεώρημα, όταν προστεθεί η (v,w) στο G’, ο γράφος που προκύπτει εμπεριέχεται επίσης σε ένα ΕΕΔ. Άρα το επαγωγικό βήμα τελείωσε και το θεώρημα αποδείχθηκε. ΤΜΗΜΑ ΜΠΕΣ
Παράδειγμα Λειτουργίας Αλγορίθμων Κοιτάξτε στον πίνακα! ΤΜΗΜΑ ΜΠΕΣ