Γλώσσες & Τεχνικές 4 ο Εξάμηνο - Ενότητα 9 - Προβλήματα που βασίζονται σε γράφους Δημοσθένης Σταμάτης http://www.it.tith.gr/~mos Τμήμα Πληροφορικής ATEI ΘΕΣΣΑΛΟΝΙΚΗΣ To Πρόβλημα της Αναζήτησης του Θησαυρού Το παρακάτω γράφημα παριστάνει μία σπηλιά με επιμέρους χώρους. Να βρεθεί διαδρομή από την είσοδο στην έξοδο που να περνάει από το θησαυρό αλλά να μην περνάει από τους ληστές.
To Πρόβλημα της Αναζήτησης του Θησαυρού nxt_to(εισοδος,βγονια). nxt_to(εισοδος,πηγη). nxt_to(πηγη,αδιεξοδο). nxt_to(πηγη,ληστες). nxt_to(πηγη,τροφιμα). nxt_to(πηγη,σταλακτιτες). nxt_to(ληστες,εξοδος). nxt_to(τροφιμα,θησαυρος). nxt_to(βαγονια,τροφιμα). nxt_to(βαγονια,θησαυρος). nxt_to(σταλακτιτες,εξοδος). nxt_to(θησαυρος,εξοδος). nxt_to(ληστες,θησαυρος). To Πρόβλημα της Αναζήτησης του Θησαυρού joint_with(pl,pl2) :- nxt_to(p,pl2). joint_with(pl,pl2) :- nxt_to(p2,pl). voi([αδιεξοδο,ληστες]). trvsrs(pl,pl2) :- ανοί(dngrs), pth (Pl,Pl2,Dngrs,[Pl]). 2
To Πρόβλημα της Αναζήτησης του Θησαυρού pth(pl,pl2,dngrs,mmory) :- mmr(pl2,mmory), mmr(θησυρoς,mmory), rvrs_writ(mmory). pth (Pl,Pl2,Dngrs,Mmory):- joίnt_wίth(pl,nwpl), not mmr(nwpl,dngrs), not mmr(nwpl,mmory), pth(nwpl,pl2,dngrs,[nwpl Mmory]). rvrs_writ([ ]). rvrs_writ([h Til]) :- rvrs_writ(til), ηl, writ(h). ΠΑΡΑΡΤΗΜΑ Γραφήματα ή Γράφοι (Grphs) Ορισμοί-Αναπαράσταση-Επίλυση 3
Γράφημα (Grph) Oρισμός : Έστω το μη κενό και πεπερασμένο σύνολο V με n διακεκριμένα στοιχεία V = {v, v 2,..., v n }, και E ένα σύνολο με m 0 με μη-διατεταγμένα ζεύγη ij = {v i, v j }, i =/= j, στοιχείων του V. Τότε το διατεταγμένο ζεύγος G = (V,E) ονομάζεται μη κατευθυνόμενο γράφημα (unirt grph) ή απλώς γράφημα. Μη κατευθυνόμενο γράφημα Στο παράδειγμα: G = (V, E) με: V = {,,,,, }, και E = { {, }, {, }, {, }, {, }, {, }, {, }, {, } } 4
Παραδείγματα Γραφημάτων: Συνδεδεμένες δομές δεδομένων L... null irstno lstno null... null A D B F B C D A C G E F G H I J K L M E Παραδείγματα Γραφημάτων: Δίκτυα Υπολογιστών 5
Παραδείγματα Γραφημάτων: Κοινωνικά δίκτυα Κοινωνικά δίκτυα 6
Αναπαράσταση Προβλημάτων με Γραφήματα Τάξη γραφήματος Oρισμός 2: Τάξη (orr) ενός γραφήματος ονομάζεται το πλήθος των κορυφών του, ενώ μέγεθος (siz) ονομάζεται το πλήθος των ακμών του. Στο παράδειγμα η orr = 6 και siz = 7 7
Διπλανές κορυφές γραφήματος Oρισμός 3: Δύο κορυφές v i, v j ονομάζονται διπλανές (jnt) όταν υπάρχει ακμή ij = {v i, v j }, i =/= j που να τις έχει άκρα. Δύο κορυφές που δεν είναι διπλανές ονομάζονται ανεξάρτητες ( inpnnt). Στο παράδειγμα οι και είναι διπλανές ενώ οι και ανεξάρτητες Βαθμός κορυφής ενός γραφήματος Oρισμός 4: Βαθμός (gr) μιας κορυφής ονομάζεται το πλήθος των διπλανών κορυφών της, ή αλλιώς το πλήθος των ακμών που πρόσκεινται στην κορυφή. Μια κορυφή ονομάζεται άρτια ή περιττή ανάλογα με το αν ο βαθμός της είναι άρτιος ή περιττός Στο παράδειγμα η είναι άρτια και ο βαθμός της είναι 4 8
Τερματική κορυφή γραφήματος Oρισμός 5: Μία κορυφή v i ονομάζεται τερματική κορυφή (n vrtx) αν gr(v i ) =. Στο παράδειγμα η κορυφή είναι τερματική Απομονωμένη κορυφή γραφήματος Oρισμός 6: Μία κορυφή v i ονομάζεται απομονωμένη (isolt), αν ο βαθμός της gr(v i ) = 0 Στο παράδειγμα η κορυφή είναι απομονωμένη 9
Πλήρες Γράφημα (Grphs) Oρισμός 7: Ένα γράφημα ονομάζεται πλήρες (omplt grph) όταν περιλαμβάνει όλους τους δυνατούς συνδυασμούς ακμών ανάμεσα στις κορυφές του. Παρατήρηση: Δεν αποτελεί συνηθισμένη περίπτωση! Κατευθυνόμενο Γράφημα (Dirt Grph) Oρισμός 8: Έστω το μη κενό και πεπερασμένο σύνολο V με n διακεκριμένα στοιχεία V = {v, v 2,..., v n }, και E ένα σύνολο με m 0 με διατεταγμένα ζεύγη ij = {v i, v j }, i =/= j, στοιχείων του V. Τότε το διατεταγμένο ζεύγος DG = (V,E) ονομάζεται κατευθυνόμενο γράφημα (irt grph). 0
Περίπατος γραφήματος Oρισμός 9: Ονομάζουμε περίπατο (wlk) σε ένα γράφημα G μία ακολουθία κορυφών του γραφήματος, της μορφής W = <v 0, v, v 2,..., v n > και λέμε ότι έχει μήκος n. Στο παράδειγμα: W = <,,,,, > με μήκος 5 Μονοπάτι γραφήματος Oρισμός 0: Ονομάζουμε μονοπάτι (pth) σε ένα γράφημα G μία ακολουθία κορυφών του γραφήματος, της μορφής P = <v 0, v, v 2,..., v n >που είναι περίπατος στον οποίο καμία κορυφή δεν επαναλαμβάνεται Στο παράδειγμα: P = <,,, > με μήκος 3
Πίνακας διπλανών κορυφών Αναπαράσταση γραφήματος Έστω ένα κατευθυνόμενο γράφημα με n κορυφές, οι οποίες μπορούν να αριθμηθούν με διακριτές συνεχόμενες τιμές. Η αναπαράστασή του μπορεί να γίνει με τη βοήθεια ενός δισδιάστατου πίνακα D με διαστάσεις n x n, στον οποίο: η θέση του πίνακα (i,j) δηλώνει την ύπαρξη ή όχι ακμής D(i,j)=, αν υπάρχει η ακμή, D(i,j)=0, αν δεν υπάρχει 0 0 0 0 0 D = 0 0 0 0 0 0 0 0 0 0 0 0 Αρίθμηση κορυφών: -> 0, ->, -> 2, -> 3, -> 4 Λίστες διπλανών κορυφών Αναπαράσταση γραφήματος Έστω ένα κατευθυνόμενο γράφημα με n κορυφές, οι οποίες μπορούν να αριθμηθούν με διακριτές συνεχόμενες τιμές. Η αναπαράστασή του μπορεί να γίνει με τη βοήθεια ενός μονοδιάστατου πίνακα συνδεδεμένων λιστών: η θέση i του πίνακα αντιστοιχεί στον κόμβο i το περιεχόμενο του πίνακα στη θέση i είναι η λίστα των κόμβων που συνδέονται με τον i 0 2 3 4 2 3 0 4 4 Αρίθμηση κορυφών: -> 0, ->, -> 2, -> 3, -> 4 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γ ΕΞΑΜΗΝΟ 2
Επίλυση προβλήματος γραφήματος Αναζητούμε ένα μονοπάτι το οποίο να ξεκινάει από έναν κόμβο Χ (κόμβος αρχή) και να καταλήγει σε έναν κόμβο Υ (κόμβος στόχος). Αντίστοιχα μπορεί να αναζητούμε έναν περίπατο ο οποίος να ξεκινάει από έναν κόμβο Χ (κόμβος αρχή) και να καταλήγει σε έναν κόμβο Υ (κόμβος στόχος). Το γενικότερο πρόβλημα μπορεί να περιλαμβάνει:. θετικούς περιορισμούς (πρέπει οπωσδήποτε να περάσουμε από κάποιους κόμβους). 2. Αρνητικούς περιορισμούς (πρέπει οπωσδήποτε να αποφύγουμε κάποιους κόμβους). 3. Πρέπει να λάβουμε υπόψη μας τα βάρη σύνδεσης των κόμβων (προβλήματα ελαχιστοποίησης ή μεγιστοποίησης Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Στόχος μας είναι να επισκεφτούμε όλους τους κόμβους του γραφήματος Παράδειγμα: Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Ξεκινώντας από έναν κόμβο i: επισκεπτόμαστε τον κόμβο i επισκεπτόμαστε αναδρομικά κάθε κόμβο που συνδέεται με τον κόμβο i με την προϋπόθεση ότι δεν τον έχουμε ήδη επισκεφθεί. 3
Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: g h Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 2 g h 4
Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 2 g h Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 2 g 4 h 5
Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 2 5 g 4 h Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 6 2 5 g 4 h 6
Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 7 6 2 5 g 4 h ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Γ ΕΞΑΜΗΝΟ Αλγόριθμοι Επίσκεψης κόμβων γραφήματος Αλγόριθμος «πρώτα σε βάθος» (pth irst srh) Σειρά επίσκεψης των κόμβων: 3 7 6 8 2 5 g 4 h 7
Λίγη ιστορία: οι γέφυρες του Konigsrg Lonhr Eulr (707-783) 8