ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ Φροντιστήριο #7: Ελάχιστα Επικαλυπτικά Δένδρα, Αλγόριθμος Kruskal, Δομές Union-Find Άσκηση # 0 5 0 0 0 5 5 7 6 5 6 Έστω το παραπάνω μη κατευθυνόμενο βεβαρημένο συνεκτικό γράφημα G=(V,E,w). Να δείξετε το ελάχιστο επικαλυπτικό δένδρο (Minimum Spanning Tree MST) που προκύπτει μετά την εφαρμογή του αλγορίθμου Kruskal. Σε περιπτώσεις που υπάρχουν παραπάνω από μια επιλογές, προκρίνεται εκείνη η ακμή που ενώνει κορυφές με το μικρότερο άθροισμα. Υπόδειξη: Η κεντρική φιλοσοφία του αλγορίθμου Kruskal συμπυκνώνεται στα ακόλουθα βήματα (για μια αναλυτική παρουσίαση, δείτε τη σχετική διάλεξη). Ο αλγόριθμος του Kruskal εξετάζει τις ακμές σε αύξουσα σειρά βάρους. Σε κάθε βήμα του αλγορίθμου, εξετάζεται η ακμή με το μικρότερο βάρος (που δεν έχει ήδη εξεταστεί) και προστίθεται στο MST εφόσον πληροί το cut property (δηλαδή δε δημιουργεί κύκλο με τις ακμές που έχουν ήδη προστεθεί στο MST). Η διαδικασία ολοκληρώνεται όταν προστεθούν V - ακμές. Αλγόριθμος Kruskal ο βήμα: Προσθήκη της ακμής (5,6) που έχει βάρος ο βήμα: Προσθήκη της ακμής (0,) που έχει βάρος ο βήμα: Προσθήκη της ακμής (,) που έχει βάρος ο βήμα: Προσθήκη της ακμής (,) που έχει βάρος 5 ο βήμα: Προσθήκη της ακμής (,) που έχει βάρος 6 ο βήμα: Η ακμή (0,) δεν μπορεί να προστεθεί γιατί παραβιάζει το cut property 7 ο βήμα: Προσθήκη της ακμής (5,7) που έχει βάρος 5
8 ο βήμα: Η ακμή (6,7) δεν μπορεί να προστεθεί γιατί παραβιάζει το cut property 9 ο βήμα: Προσθήκη της ακμής (,5) που έχει βάρος 6 0 6 5 6 5 7 Σχήμα : Το MST του γραφήματος μετά την εφαρμογή του Αλγορίθμου του Kruskal. Άσκηση #: Έστω το ακόλουθο μη κατευθυνόμενο βεβαρημένο συνεκτικό γράφημα G=(V,E,w). Να δείξετε το ελάχιστο επικαλυπτικό δένδρο (Minimum Spanning Tree MST) που προκύπτει μετά την εφαρμογή του αλγορίθμου Kruskal με δομές union-find και ένωση με βαθμό (union by rank). Σε περιπτώσεις που υπάρχουν παραπάνω από μια επιλογές, προκρίνεται εκείνη η ακμή που ενώνει κορυφές με το μικρότερο λεξικογραφικό άθροισμα. A C E 5 B D F Υπόδειξη: Η κεντρική φιλοσοφία του αλγορίθμου Kruskal όταν υλοποιείται με union by rank συμπυκνώνεται στα ακόλουθα βήματα (για μια αναλυτική παρουσίαση, δείτε τη σχετική διάλεξη). Αρχικά έχω V σύνολα, καθένα από τα οποία αποτελείται από μια μόνο κορυφή. Ο βαθμός (rank) κάθε κορυφής (δηλ. το ύψος του δένδρου στο οποίο ανήκει) είναι προφανώς 0. (Γενικά, το rank μιας κορυφής είναι το ύψος του υποδένδρου με ρίζα τη συγκεκριμένη κορυφή).
Σε κάθε βήμα εξετάζεται η ακμή με το μικρότερο βάρος (που δεν έχει ήδη εξεταστεί). Αν οι κορυφές αυτής της ακμής ανήκουν στην ίδια συνεκτική συνιστώσα (δηλ. στο ίδιο δένδρο), η ακμή δεν προστίθεται στο MST και δε χρειάζεται να κάνω union των κορυφών αυτών. Αν οι κορυφές αυτής της ακμής ανήκουν σε διαφορετική συνεκτική συνιστώσα, προχωρώ στο union των κορυφών ως εξής: Έστω a και b οι κορυφές που θέλουμε να κάνουμε ένωση. Έστω r a και r b οι ρίζες των δένδρων που ανήκουν τα a, b. Έστω rank(r a ) και rank(r b ) οι αντίστοιχοι βαθμοί. o Αν rank(r a )=rank(r b ), τότε δημιουργείται ένα νέο δένδρο με ρίζα το r b και το r a να είναι άμεσο παιδί της (και το δένδρο αυτό γίνεται υποδένδρο του νέου δένδρου). Σε αυτή την περίπτωση το νέο rank του r b ισούται με rank(r b )+ ενώ όλα τα άλλα ranks παραμένουν αμετάβλητα. o Αν rank(r a )>rank(r b ), τότε το δένδρο με ρίζα το r b γίνεται υποδένδρο του δένδρου με ρίζα το r a. Σε αυτή την περίπτωση δε μεταβάλλεται κάποιο rank. o Αν rank(r a )<rank(r b ), τότε το δένδρο με ρίζα το r a γίνεται υποδένδρο του δένδρου με ρίζα το r b. Σε αυτή την περίπτωση δε μεταβάλλεται κάποιο rank. Ο αλγόριθμος ολοκληρώνεται όταν πραγματοποιηθούν V - union. Από το σημείο αυτό και μετά αποκλείεται να αλλάξει το rank κάποιου κόμβου και η ρίζα του μοναδικού πια δένδρου θα έχει το μεγαλύτερο rank που μπορεί να προκύψει. Χρησιμοποιώ τον ακόλουθο συμβολισμό με τον αριθμό που είναι δείκτης του κόμβου να αντιστοιχεί στο rank του συγκεκριμένου κόμβου. Αρχική Κατάσταση: BB0 C 0 D 0 E 0 F 0 ο βήμα: Ακμή (A,C) βάρους. union (A,C): Το C γίνεται ρίζα με παιδί το Α και rank(c)=.
D 0 B 0 C E 0 F 0 ο βήμα: Ακμή (D,F) βάρους. union (D,F): Το F γίνεται ρίζα με παιδί το D και rank(f)=. B 0 C E 0 F D 0 ο βήμα: Ακμή (B,D) βάρους. union (B,D): Το B γίνεται παιδί του F και rank(b)=0 (δεν αλλάζει το rank κάποιου κόμβου). C E 0 F D 0 B 0 ο βήμα: Ακμή (C,D) βάρους. union (C,D): Το F γίνεται ρίζα του νέου δένδρου με το C να είναι παιδί του και rank(f)=.
5 E 0 F D 0 C B 0 5 ο βήμα: Ακμή (A,B) βάρους. Τα Α, Β ανήκουν στο ίδιο δένδρο, οπότε δε χρειάζεται να κάνω union 6 ο βήμα: Ακμή (B,C) βάρους. Τα Β, C ανήκουν στο ίδιο δένδρο, οπότε δε χρειάζεται να κάνω union 7 ο βήμα: Ακμή (C,F) βάρους. Τα C, F ανήκουν στο ίδιο δένδρο, οπότε δε χρειάζεται να κάνω union 8 ο βήμα: Ακμή (C,E) βάρους. union (C,E): Το E γίνεται παιδί του F και rank(e)=0 (δεν αλλάζει το rank κάποιου κόμβου). F D 0 C B 0 E 0
6 9 ο βήμα: [Περιττό καθόσον έχουν ήδη πραγματοποιηθεί V - union]. Ακμή (E,F) βάρους 5. Τα E, F ανήκουν στο ίδιο δένδρο, οπότε δε χρειάζεται να κάνω union Οπότε, το MST είναι το ακόλουθο και έχει βάρος 0. A C E B D F Άσκηση # Έστω το ακόλουθο μη κατευθυνόμενο βεβαρημένο συνεκτικό γράφημα G=(V,E,w). Να δείξετε το ελάχιστο επικαλυπτικό δένδρο (Minimum Spanning Tree MST) που προκύπτει μετά την εφαρμογή: a. του αλγορίθμου Kruskal b. του αλγορίθμου Kruskal αν υλοποιηθεί με δομές union find και union by rank Σε περιπτώσεις που υπάρχουν παραπάνω από μια επιλογές, προκρίνεται εκείνη η ακμή που ενώνει κορυφές με το μικρότερο λεξικογραφικό άθροισμα.