Αλγόριθμοι Ισχυρά συνεκτικές συνιστώσες Εφαρμογές, BFS Μάρθα Σιδέρη Προτεινόμενη βιβλιογραφία: ββ S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani «Αλγόριθμοι» Κλειδάριθμος 2009 Κεφάλαιο 3. http://www.cs.berkeley.edu/~vazirani/algorithms/chap3.pdf epl333 lect5 20 Έως τώρα στα προηγούμενα μαθήματα είπαμε Καθοδική ιερεύνηση (Depth First Search, dfs) Γρήγορος τρόπος Θ(n) για να εξερευνήσουμε ένα γράφημα (να δούμε όλους τους κόμβους και τις ακμές του). Υπολογίζουμε για κάθε κόμβο v: πότε τον είδαμε πρώτη φορά pre(v) και ποτέ τον είδαμε τελευταία φορά post(v) και χωρίζουμε τις ακμές σε 4 κατηγορίες (tree, back, cross,forward )που χρησιμεύουν σε άλλους αλγορίθμους. Γραφήματα δίχως κύκλους, ακυκλικά (Directed Acyclic Graphs, DAGs). Περιγράφουν διάταξη, ο αλγόριθμος που βρίσκει τη διάταξη λέγεται τοπολογική ταξινόμηση: (α) με DFS ή (β) βάσει του ορισμού των DAG. Αποσύνθεση γραφημάτων: Χώρισε το γράφημα σε συνεκτικές συνιστώσες (τμήματα που για κάθε ζεύγος (u,v) μπορείς να πας από u στο v ). Πως γίνεται? Με δύο DFS, για να αποδείξουμε ορθότητα βασιζόμαστε στο ότι το γράφημα των συνιστωσών είναι DAG epl333 lect5 20 2
Στο προηγούμενο μάθημα: Συζητήσαμε τη χρήση του DFS για να χωρίσουμε το γράφημα σε Ισχυρά Συνεκτικές Συνιστώσες (SCC). Εξηγήσαμε γιατί χρειαζόμαστε 2 DFS: Το πρώτο DFS χρησιμεύει μόνο για να μας δώσει τη σειρά, με την οποία θα καλούμε την explore στο δεύτερο DFS (για να βρούμε τη σωστή σειρά δουλεύουμε στο ανάστροφο γράφημα). Aν κάθε φορά που από το DFS καλούμε την explore me τη συγκεκριμένη σειρά κόμβων, η explore πάει σε όλους τους κόμβους μιας SCC και μόνο σε αυτούς. epl333 lect5 20 3 A,B,D, E C,F K G,H,I,J L epl333 lect5 20 4 2
είτε παράδειγμα εκτέλεσης αλγορίθμου εύρεσης ισχυρά συνεκτικών συνιστωσών http://eclass.aueb.gr/modules/doc ument/file.php/inf6/examples% 2020/SCC3.pps epl333 lect5 20 5 Κατασκευάζουμε το ανάστροφο epl333 lect5 20 6 3
8 9 2 3 20 2 7 0 4 5 6 9 3 6 4 5 7 8 Κατατάσσουμε κατά φθίνουσα σειρά post 2 22 Και κάνουμε DFS L,K,G,I,J,H,C,F,A,D,B,E 23 24 Και κάνουμε epl333 DFS lect5 στο 20αρχικό 7 γράφημα με βάση αυτή τη σειρά L,K,G,I,J,H,C,F,A,D,B,E A,B,D, E C,F K G,H,I,J L epl333 lect5 20 8 4
L K G I J H C F A D B E 2 5 2 3 4 6 7 8 9 0 7 24 3 6 8 23 4 5 9 22 epl333 lect5 20 20 2 9 Άρα οι SCC θα είναι A,B,D, E C,F K G,H,I,J L epl333 lect5 20 0 5
Αλγόριθμος για ισχυρά συνεκτικές συνιστώσες: απόδειξη ορθότητας Αρχικός αλγόριθμος repeat Βρες οποιοδήποτε κόμβο v σε συνεκτική συνιστώσα, η οποία είναι καταβόθρα (sink). Κάλεσε την explore(v) Όλοι οι κόμβοι για τους οποίους καλείται αναδρομικά η explore(v) ανήκουν στην ίδια ισχυρά χρ συνεκτική συνιστώσα με τον v-- σβήσε τους κόμβους αυτούς και τον v από το γράφημα Until να σβηστούν όλοι οι κόμβοι. epl333 lect5 20 Βρες οποιοδήποτε κόμβο v σε συνεκτική συνιστώσα, η οποία είναι καταβόθρα. Πως???? Ξέρουμε ότι: Ο κόμβος που βγήκε τελευταίος από τη στοίβα (ο κόμβοςμε το μεγαλύτερο post) ανήκει σε ισχυρά συνεκτική συνιστώσα, η οποία είναι πηγή (source). (Στον κόμβο αυτό προσπίπτουν μόνο ακμές back.) epl333 lect5 20 2 6
Θέλαμε κόμβο σε sink ισχυρά συνεκτική συνιστώσα. Ο DFS μας δίνει κόμβο σε source ισχυρά συνεκτική συνιστώσα???? Τι να κάνουμε? Τα G, G-transpose έχουν τις ίδιες ισχυρά συνεκτικές συνιστώσες. και η συνιστώσα που ειναι sourse στο G-traspose είναι sink στο G. Για να βρούμε κόμβο σε sink ισχυρά συνεκτική συνιστώσα κάνουμε DFS στο G-transpose. epl333 lect5 20 3 Πως συνεχίζουμε; Πώς θα βρούμε την δεύτερη συνιστώσα; Οταν σβήσουμε όλους τους κόμβους μιας συνεκτικής συνιστώσας που είναι πηγή, τότε ο κόμβος, ο οποίος έχει το μεγαλύτερο post από τους υπόλοιπους κόμβους, ανήκει σε νέα πηγή συνεκτική συνιστώσα. epl333 lect5 20 4 7
Stronlgy connected components(g=(v, E): graph). Υπολόγισε το ανάστροφο γράφημα G T. (Tο G T περιλαμβάνει την ακμή (u, v) ανν το G περιλαμβάνει την (v, u)) 2. Κάνε DFS στο G T 3. Διάταξε τους κόμβους του G κατά φθίνουσα σειρά post από το βήμα 2. 4. Κάνε DFS στο G. Οι κόμβοι εξετάζονται με τη σειρά, ηοποία καθορίστηκε στο βήμα 3. Κάθε φορά που καλείται λί η explore() από το DFS γράψε: «νέα ισχυρά συνεκτική συνιστώσα». Κάθε φορά που καλείται η previsit για κάποιο κόμβο v γράψε: «κόμβος» v. epl333 lect5 20 5 Πρόβλημα SAT satisfiability Γιατί μας ενδιαφέρει?? ( x x x )( x x )( x x )( x x )( x x x ) 2 3 2 2 3 3 2 3 Literals--στοιχεία x, True αν x, x, x True αν x 0 Clauses---συνθήκες. Πρέπει να κάνουμε TRUE ένα (τουλάχιστον) στοιχείο σε κάθε clause. Μας δίνουν τις clauses (και τις μεταβλητές):υπάρχουν τιμές των μεταβλητών που ικανοποιούν (satisfy) όλες τις clauses? epl333 lect5 20 6 8
( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 epl333 lect5 20 7 ( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 epl333 lect5 20 8 9
( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 0 0 epl333 lect5 20 9 ( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 0 0 0 0 epl333 lect5 20 20 0
( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 0 0 0 0 0 0 0 epl333 lect5 20 2 ( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 0 0 0 0 0 0 0 0 epl333 lect5 20 22
( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 x x2 x3 0 0 0 0 0 0 0 0 0 0 0 0 epl333 lect5 20 23 ( x x x)( x x)( x x)( x x)( x x x) 2 3 2 2 3 3 2 3 ΟΧΙ!! x x2 x3 0 0 0 0 0 0 0 0 0 0 0 0 2 n epl333 lect5 20 24 2
x: o A. είναι αθώος y: o A. έχει άλλοθι στις 8μμ z: o φόνος έγινε στις 8μμ x : o A. δεν είναι αθώος z y x ( z, y, x) Ειδική περίπτωση Horn Λογικός προγραμματισμός w: o B. είναι αθώος v: o Γ. είναι αθώος ( x, wv, ) Δεν μπορεί να είναι όλοι αθώοι epl333 lect5 20 25 SAT γιατί μας ενδιαφέρει? Ιστορικά το πρώτο ΝP-πλήρες πρόβλημα Το πρώτο «δύσκολο» πρόβλημα εν ξέρουμε γρήγορο αλγόριθμο. Gödel 954 S. Cook 97 P και ΝΡ Αρχικά προτάθηκε από τον Gödel to 954, Stephen Cook, D. Karp 97, 972 D. Karp 972 epl333 lect5 20 26 3
SAT SAT (SATisfiability, πρόβλημα ικανοποιησιμότητας): ίδεται σύνολο από μεταβλητές και σύνολο από συνθήκες (clauses) στις μεταβλητές αυτές. Κάθε συνθήκη περιλαμβάνει ένα σύνολο από στοιχεία (literals) δηλαδή μεταβλητές ή αρνήσεις μεταβλητών. (Tουλάχιστον ένα από τα στοιχεία που περιλαμβάνει κάθε συνθήκη πρέπει να έχει την τιμή.) Eρώτημα υπάρχει απόδοση τιμών αληθείας (truth assignment) στις μεταβλητές, με την οποία να ικανοποιούνται όλες οι συνθήκες; Το SAT ήταν το πρώτο NP-πλήρες πρόβλημα. epl333 lect5 20 27 Πρόβλημα 3-SAT 3-satisfiability ΟΧΙ Μήπως η κατάσταση είναι ευκολότερη αν είχαμε το πολύ 3 στοιχεία σε κάθε παρένθεση? ( x x x )( x x )( x x )( x x )( x x x ) 2 3 2 2 3 3 2 3 epl333 lect5 20 28 4
Πρόβλημα 2-SAT 2-satisfiability ΝΑΙ Μήπως η κατάσταση είναι ευκολότερη αν είχαμε το πολύ (η ακριβώς) 2 στοιχεία σε κάθε παρένθεση? Παράδειγμα : δεν υπάρχει απόδοση τιμών αληθείας που το ικανοποιεί. ( x x2 )( x x2 )( x2 x3)( x3 x )( x x2 ) Παράδειγμα 2: ικανοποιείται από την,, ( x x2 )( x x2 )( x2 x3)( x3 x )( x x2 ) epl333 lect5 20 29 Υπάρχει γρήγορος αλγόριθμος για το 2-SAT!. Από τις clauses φτιάχνω γράφημα. ΠΩΣ?? 2. Το χωρίζω σε SCC. 3. Αποφασίζω αν η πρόταση είναι ικανοποιήσιμη. ΠΩΣ?? epl333 lect5 20 30 5
Αλγόριθμος 2-SAT. /* Από τις clauses φτιάχνω γράφημα*/ 2-SAT σε G(V, E). V: για κάθε μεταβλητή x κατασκευάζω δύο κόμβους (x και ^x). Ε: Για κάθε συνθήκη (x, y) δύο ακμές στο σύνολο E των ακμών. Μια από το ^x στο y και μια από το ^y στο x. 2. Υπολογίζουμε ισχυρά συνεκτικές συνιστώσες στο G(V, E). 3. /* Αποφασίζω αν η πρόταση είναι ικανοποιήσιμη.*/ Αν το x και ^x βρεθούν στην ίδια συνιστώσα, η πρόταση δεν είναι ικανοποιήσιμη, αλλιώς είναι. ( x x2 )( x x2 )( x2 x3 )( x3 x )( x x2 ) ( x x )( x x )( x x )( x x ) 2 2 2 3 3 epl333 lect5 20 3 είτε παράδειγμα εκτέλεσης αλγορίθμου, με τον οποίο αποφασίζουμε εάν μια πρόταση 2-SAT είναι ικανοποιήσιμη. http://eclass.aueb.gr/modules/doc ument/file.php/inf6/examples% 2020/2SAT_.ppsx epl333 lect5 20 32 6
x x x x x x x x Για κάθε μεταβλητή x 2 2 2 3 3 κατασκευάζω δύο κόμβους, x και x x x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 2 x 2 x 3 x 3 epl333 lect5 20 33 x x x x x x x x Για κάθε μεταβλητή x 2 2 2 3 3 κατασκευάζω δύο κόμβους, x και x x x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 2 x 2 x 3 x 3 epl333 lect5 20 34 7
x x x x x x x x Για κάθε μεταβλητή x 2 2 2 3 3 κατασκευάζω δύο κόμβους, x και x x x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 2 x 2 x 3 x 3 epl333 lect5 20 35 x x x x x x x x Για κάθε μεταβλητή x 2 2 2 3 3 κατασκευάζω δύο κόμβους, x και x x x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 2 x 2 x 3 x 3 epl333 lect5 20 36 8
x x x x x x x x 2 2 2 3 3 Και υπολογίζουμε τις SCC. x x x 2 x 2 x 3 x 3 epl333 lect5 20 37 x x x x x x x x 2 2 2 3 3 Κατασκευάζουμε το ανάστροφο x x 2 5 0 Και κάνουμε DFS για να πάρουμε τη φθίνουσα σειρά post των κόμβων 2 x 2 x 2 7 8 x 3 x 3 3 4 6 9 epl333 lect5 20 38 9
x x x x x x x x 2 2 2 3 3 x x 6 7 2 Και κάνουμε DFS στο κανονικό διάγραμμα με βάση τη σειρά αυτή x, x, x, x, x, x 2 3 2 3 x 2 3 4 x 2 8 x 3 x 3 2 5 9 0 epl333 lect5 20 39 x x x x x x x x 2 2 2 3 3 Επομένως θα έχουμε 2 SCC x, x2, x x 3, x2, x3 Πηγή SCC, Όλα = 0 Και από τη στιγμή που xi και x i δε βί βρίσκονται στην ίδια SCC η πρόταση είναι ικανοποιήσιμη Βρείτε μια αποτίμηση που ικανοποιεί την πρόταση! (,,) epl333 lect5 20 40 20
είτε δεύτερο παράδειγμα εκτέλεσης αλγορίθμου, με τον οποίο αποφασίζουμε εάν μια πρόταση 2-SAT είναι ικανοποιήσιμη. http://eclass.aueb.gr/modules/doc ument/file.php/inf6/examples% 2020/2SAT_2.ppsx epl333 lect5 20 4 x x x x x x x x x x 2 2 2 3 3 2 x x x 2 x 2 Για κάθε μεταβλητή x κατασκευάζω δύο κόμβους, x και x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 3 x 3 epl333 lect5 20 42 2
x x x x x x x x x x 2 2 2 3 3 2 x x x 2 x 2 Για κάθε μεταβλητή x κατασκευάζω δύο κόμβους, x και x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 3 x 3 epl333 lect5 20 43 x x x x x x x x x x 2 2 2 3 3 2 x x x 2 x 2 Για κάθε μεταβλητή x κατασκευάζω δύο κόμβους, x και x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 3 x 3 epl333 lect5 20 44 22
x x x x x x x x x x 2 2 2 3 3 2 x x x 2 x 2 Για κάθε μεταβλητή x κατασκευάζω δύο κόμβους, x και x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 3 x 3 epl333 lect5 20 45 x x x x x x x x x x 2 2 2 3 3 2 x x x 2 x 2 Για κάθε μεταβλητή x κατασκευάζω δύο κόμβους, x και x Και για κάθε ακμή (x,y) κατασκευάζω δύο ακμές, μια από το x y και μια από το y x x 3 x 3 epl333 lect5 20 46 23
x x x x x x x x x x 2 2 2 3 3 2 Και υπολογίζουμε τις SCC. x x x 2 x 2 x 3 x 3 epl333 lect5 20 47 x x x x x x x x x x 2 2 2 3 3 2 Κατασκευάζουμε το ανάστροφο 2 x x x 2 2 5 0 x 2 7 8 Και κάνουμε DFS για να πάρουμε τη φθίνουσα σειρά post των κόμβων x 3 x 3 3 4 6 9 epl333 lect5 20 48 24
x x x x x x x x x x 2 2 2 3 3 2 x x 2 4 7 Και κάνουμε DFS στο κανονικό διάγραμμα με βάση τη σειρά αυτή x, x, x, x, x, x 2 3 2 3 x 2 5 6 x 2 2 9 x 3 x 3 0 3 8 epl333 lect5 20 49 x x x x x x x x x x 2 2 2 3 3 2 Επομένως θα έχουμε SCC x, x, x, x, x, x 2 3 2 3 Και από τη στιγμή που xi και x i βί βρίσκονται στην ίδια SCC η πρόταση δεν είναι ικανοποιήσιμη epl333 lect5 20 50 25
Τελειώσαμε επιτέλους με τις διερευνήσεις γραφημάτων? Όχι! epl333 lect5 20 5 Πως συλλέγονται οι σελίδες από τις search engines? Google Crawler (Brin and Page, 998) is described in some detail.there is a URL server that sends lists of URLs to be fetched by several crawling processes. During parsing, the URLs found were passed to a URL server that checked if the URL have been previously seen. If not, the URL was added to the queue of the URL server. Παρατηρείστε: χρησιμοποιείται ουρά (queue) όχι στοίβα Γιατί??? epl333 lect5 20 52 26
Μη αναδρομική DFS procedure explore(s : vertex) 2 { S: stack of nodes; 3 push(s); 4 while S nonempty do 5 { v=pop(s); 6 if (visited(v)=false) { 7 previsit(v); 8 for each edge (v, w) out of v do 9 if visited(w)=false then 0 push(w);} }} 0 procedure previsit(v: vertex) {visited(v)=true; pre(v)=clock++;} epl333 lect5 20 53 είτε παράδειγμα εκτέλεσης αλγορίθμου μη αναδρομικής DFS (αναζήτησης σε βάθος). http://eclass.aueb.gr/modules/doc ument/file.php/inf6/examples% 2020/nonRecDFS_.pps epl333 lect5 20 54 27
BFS, ελάχιστα μονοπάτια epl333 lect5 20 55 Αναζήτηση κατά πλάτος Breadth First Search, BFS procedure BFS_explore(s : vertex) 2 { Q: queue of nodes; 3 enqueue(s); 4 dist(s)=0; 5 while Q nonempty do 6 { v=dequeue(q); 7 previsit(v); 8 for each edge (v, w) out of v { 9 if dist(w)=undefined then 0 {dist(w)=dist(v)+; enqueue(w);}}}} epl333 lect5 20 56 28
είτε παράδειγμα εκτέλεσης αλγορίθμου ΒFS (αναζήτησης κατά πλάτος). http://eclass.aueb.gr/modules/doc ument/file.php/inf6/examples% 2020/BFS.ppsx epl333 lect5 20 57 dista=0 A epl333 lect5 20 58 29
distb= dista=0 disth= distg= AB G H epl333 lect5 20 59 distb= dista=0 2 disth= distg= distf=2 3 B GH HF epl333 lect5 20 60 30
distb= dista=0 distc=3 disth= distg= distf=2 2 3 4 C H F 5 epl333 lect5 20 6 distb= dista=0 distc=3 distd=4 disth= distg= distf=2 2 3 4 DC 5 6 epl333 lect5 20 62 3
distb= dista=0 distc=3 distd=4 disth= distg= distf=2 diste=5 2 3 4 DE 5 6 7 epl333 lect5 20 63 distb= dista=0 distc=3 distd=4 disth= distg= distf=2 diste=5 2 3 4 E 5 6 8 7 epl333 lect5 20 64 32