Άσκηση 1 Ψευδοκώδικας Kruskal Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα. Αντιστοιχίζω τους κόμβους με αριθμούς από το 0 έως το 4. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 2
Η παραπάνω αντιστοίχιση έχει να κάνει με την αναζήτηση που κάνει η find για το εάν δύο κόμβοι ανήκουν στην ίδια ομάδα ή όχι. Με βάση την αρίθμηση λοιπόν, φτιάχνω και τον αντίστοιχο πίνακα. Οι μωβ αριθμοί απεικονίζουν την θέση του κάθε κόμβου στον πίνακα. Ταξινόμηση ακμών 1. (b, d) = 3 2. (c, d) = 3 3. (b, e) = 4 4. (a, b) = 6 5. (a, c) = 7 6. (d, e) = 7 7. (b, c) = 8 8. (c, e) = 9 Η αρχική κατάσταση είναι η παρακάτω: Εξετάζω τις ακμές με την παραπάνω σειρά ταξινόμησης. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 3
(b, d) Κανένας από τους δύο κόμβους δεν ανήκει σε κάποια ομάδα, οπότε τους ομαδοποιώ. Και ο πίνακας γίνεται: (c, d) Ο κόμβος d ανήκει ήδη σε μια ομάδα και ο c όχι. Έτσι, ο κόμβος c εντάσσεται στην ομάδα του d. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 4
(b, e) Ο κόμβος b ανήκει ήδη σε μια ομάδα και ο e όχι. Έτσι, ο κόμβος e εντάσσεται στην ομάδα του b. (a, b) Ο κόμβος b ανήκει ήδη σε μια ομάδα και ο α όχι. Έτσι, ο κόμβος α εντάσσεται στην ομάδα του b. Ο αλγόριθμος τερματίζει, διότι έχουν ομαδοποιηθεί όλοι οι κόμβοι. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 5
Το ΕΣΔ που προκύπτει από την παραπάνω διαδικασία είναι το παρακάτω: 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 6
Άσκηση 2 Ψευδοκώδικας Prim Παρακάτω βλέπουμε την εφαρμογή του στο συνδεδεμένο γράφημα. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 7
Διαλέγω τυχαία να αρχίσω από τον κόμβο b. Κρατάω και μια λίστα με τους κόμβους που έχουμε επισκεφθεί: Visited { b } Η ακμή με το μικρότερο βάρος είναι η (b,d). Επιλέγεται αυτή. Ο d προστίθεται στην Visited. Visited { b, d } Εξετάζω τώρα όλες τι ακμές που συνδέονται και με τους δύο κόμβους που έχω επισκεφθεί. H ακμή με το μικρότερο βάρος είναι η (d,c). Visited { b, d, c } 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 8
Από τους 3 κόμβους τώρα, η ακμή με το μικρότερο βάρος είναι η (b,e). Visited { b, d, c, e } Η ακμή με το μικρότερο βάρος είναι η (a,b). Visited { b, d, c, e } 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 9
Ο αλγόριθμος τερματίζει διότι έχουν επισκεφθεί όλοι οι κόμβοι. Προκύπτει και το ΕΣΔ που είχαμε και στην πρώτη άσκηση. Άρα ξέρουμε ότι είμαστε σωστοί. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 10
Άσκηση 3 A) Απόδειξη Δείχνουμε ότι d[v] =δ(s,v) μετά από V -1 χαλαρώσεις. Αρχικά έχουμε το πιο κάτω λήμμα. Λήμμα 3: Πάντοτε d[v] δ(s,v). Απόδειξη: Αρχικά αληθής. Υποθέτουμε (για να φθάσουμε σε αντίφαση) ότι υπάρχουν κορυφές για τις οποίες δεν ισχύει η πρόταση του λήμματος. Έστω v η κορυφή για την οποία συμβαίνει για πρώτη φορά ότι d[v]< δ(s,v). Έστω u η κορυφή που προκάλεσε αλλαγή της d[v]: d[v] = d[u] + w(u,v). Τότε d[v] < δ(s,v) δ(s,u) + δ(u,v) δ(s,u) + w(u,v) d[u] + w(u,v) το οποίο αποτελεί αντίφαση στο ότι d[v] = d[u] + w(u,v). 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 11
Θεώρημα 1: Ο αλγόριθμος Bellman-Ford είναι ορθός, δηλ. μετά από V -1 χαλαρώσεις όλες οι τιμές του d είναι σωστές (εφόσον τα ελάχιστα μονοπάτια υπάρχουν). Απόδειξη Έστω v μια κορυφή, και θεωρήστε το ελάχιστο μονοπάτι από την πηγή s στη v(υποθέτοντας ότι δεν περνά κύκλος αρνητικού κόστους από κάποια κορυφή πάνω σε κάποιο μονοπάτι από την s στη v): s v1... v κ v Αρχικά, d[s]=0, το οποίο είναι ορθό και δεν μεταβάλλεται στη συνέχεια (ο κώδικάς μπορεί µόνο να μειώσει το d, ενώ από το Λήμμα 3, πάντοτε d[s] δ(s,s) = 0.) Μετά από την πρώτη χαλάρωση (πρώτο πέρασμα μέσα από τις ακμές), η τιμή d[v1] είναι ορθή και δεν μεταβάλλεται στη συνέχεια, διότι: Όπως ήδη δείξαμε, η τιμή της d[s] είναι ορθή και, από τη δομή της βέλτιστης λύσης, η ελάχιστη απόσταση από το s στο v1 είναι ίση µε w(s, v1). Tο πρώτο πέρασμα θέτει d[v1] = d[s] + w(s, v1) που είναι η σωστή απάντηση, και η τιμή αυτή δεν μεταβάλλεται στη συνέχεια, γιατί, γράφοντας d [v1] για τη τιμή που παίρνει η d[v1] σε οποιαδήποτε επόμενη στιγμή της εκτέλεσης, τότε d [v1] δ(s, v1) d [v1] d[v1] = δ(s, v1) Παρόμοια, ισχύει ότι, μετά από τη δεύτερη χαλάρωση, η τιμή d[v2] είναι ορθή και δεν μεταβάλλεται στη συνέχεια. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 12
Ψευδοκώδικας BF Τρέξιμο στον γράφο Ο πίνακας πριν επιλέξω έναν starting node: Επιλέγω ως starting node τον κόμβο a. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 13
Σημείωση: Οι ακμές διαλέγονται με τυχαίο τρόπο και όχι με κάποια συγκεκριμένη σειρά. Παρακάτω παρουσιάζονται και οι πέντε επαναλήψεις πάνω στον γράφο: 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 14
2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 15
2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 16
2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 17
2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 18
Ο οποίος πίνακας είναι και ο τελικός μετά τις επαναλήψεις. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 19
Συγκεντρωτικά, παρουσιάζονται οι επαναλήψεις και στον παρακάτω πίνακα: α b c d e t 0 0 1 0-4 -3 2 0-4 -5-6 -3 3 0-4 -9-5 -6-4 4 0-4 -9-5 -6-6 Και για να ελέγξουμε εάν αυτό που έχουμε κάνει είναι σωστό, κάνουμε τα παρακάτω: d[b] d[a]+w -4 0-4 -4-4 d[t] d[a]+w -6 0-3 -6-3 d[d] d[b]+w -5-4 - 1-5 -5 d[e] d[b]+w -6-4 -2-6 -6 d[b] d[c]+w -4-9 +8-4 -1 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 20
d[t] d[c]+w -6-9+3-6 -6 d[a] d[d]+w 0-5+6 0 1 d[t] d[d]+w -6-5+4-6 -1 d[t] d[e]+w -6-6+2-6 -4 d[c] d[e]+w -9-6-3-9 -9 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018 21