1 Διάσχιση κατευθυνόμενων γραφημάτων

Σχετικά έγγραφα
1 Το πρόβλημα της συντομότερης διαδρομής

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αναζήτηση Κατά Πλάτος

Αναζήτηση Κατά Βάθος. Επιμέλεια διαφανειών: Δ. Φωτάκης Συμπληρώσεις: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αναζήτηση Κατά Πλάτος

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Αναζήτηση Κατά Βάθος. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αναζήτηση Κατά Πλάτος

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Αναζήτηση Κατά Βάθος. Επιµέλεια διαφανειών:. Φωτάκης διαφάνειες για SCC: A. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 3

ΤΕΙ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑ ΥΠΟΛΟΓΙΣΤΩΝ

(elementary graph algorithms)

Αναζήτηση Κατά Πλάτος

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

Διερεύνηση γραφήματος

Αλγόριθµοι Γραφηµάτων

Αναζήτηση στους γράφους. - Αναζήτηση η κατά βάθος Συνεκτικές Συνιστώσες - Αλγόριθμος εύρεσης συνεκτικών συνιστωσών

Εισαγωγή στους Αλγόριθμους

Σχεδίαση Αλγορίθμων - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

Στοιχεία Θεωρίας Γράφων (Graph Theory)

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ 2 ΠΡΟΒΛΗΜΑΤΑ ΔΙΚΤΥΩΝ ΚΑΙ ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΡΟΛΟΓΟΣ. Θεσσαλονίκη, Μάρτιος Οι συγγραφείς. Κ. Παπαρρίζος, Ν. Σαμαράς, Α. Σιφαλέρας.

Κεφάλαιο 3. Γραφήματα. v1.3 ( ) Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

ΠΛΗ 20, 6 η ΟΣΣ: Δέντρα Εξετάσεις

ΘΕΩΡΙΑ ΓΡΑΦΩΝ. 10 η Διάλεξη Κατευθυνόμενοι Γράφοι Βασικά χαρακτηριστικά Αλγόριθμοι διάσχισης κατευθυνόμενων γράφων Λίγα Λόγια για Αλυσίδες Markov

Εφαρμόζονται σε προβλήματα στα οποία δεν υπάρχει πληροφορία που να επιτρέπει την αξιολόγηση των καταστάσεων του χώρου αναζήτησης.

Εισαγωγή στους Αλγορίθμους

Αλγόριθμοι Γραφημάτων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Αλγόριθμοι Γραφημάτων

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαπεράσεις Μη Κατευθυνόμενων Γραφημάτων

Ενότητα 10 Γράφοι (ή Γραφήµατα)

Εισαγωγή στην Επιστήμη των Υπολογιστών

Κεφάλαιο 3. Γραφήµατα v1.0 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

Εισαγωγή στους Αλγορίθμους Ενότητα 7η

Εισαγωγή στους Αλγορίθμους

Προσεγγιστικοί Αλγόριθμοι

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές δεδομένων. Ενότητα 10η: Γράφοι Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Θέματα Μεταγλωττιστών

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στην Επιστήμη των Υπολογιστών

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 1: Δικτυωτή Ανάλυση (Θεωρία Γράφων)

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

7ο ΕΡΓΑΣΤΗΡΙΟ AAAABBBBAAAAABBBBBBCCCCCCCCCCCCCCBBABAAAABBBBBBCCCCD

Κεφάλαιο 4 Γραφήματα και Δένδρα

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

ΠΛΗ111. Ανοιξη Μάθηµα 10 ο. Γράφοι. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

(elementary graph algorithms)

Επίλυση Προβλημάτων 1

Προσεγγιστικοί Αλγόριθμοι

Κεφάλαιο 3. Γραφήµατα v1.1 ( ) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Κατανεμημένα Συστήματα Ι

Δομές Δεδομένων και Αλγόριθμοι

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 11: ΠΡΟΒΛΗΜΑ ΔΙΑΤΡΕΞΗΣ ΓΡΑΦΗΜΑΤΟΣ

Για παράδειγμα η αρχική και η τελική κατάσταση αναπαριστώνται ως εξής: (ένα λίτρο)

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Γράφοι: κατευθυνόμενοι και μη

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 10

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

Τεχνητή Νοημοσύνη. 2η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Τεχνητή Νοημοσύνη. 3η διάλεξη ( ) Ίων Ανδρουτσόπουλος.

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ιδάσκοντες: Φ. Αφράτη,. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Outline 1 Άσκηση 1 2 Άσκηση 2 3 Άσκηση 3 4 Άσκηση 4 5 Άσκηση 5 6 Προγραμματιστική Άσκηση 1 7 Προγραμματιστική Άσκηση 2 (CoReLab - NTUA) Αλγόριθμοι - 3

Επίλυση προβλημάτων με αναζήτηση

3η Σειρά Γραπτών Ασκήσεων

Κατανεμημένα Συστήματα Ι

Ενότητα 5: Αλγόριθμοι γράφων και δικτύων

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Δένδρα. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4

Στοιχεία Θεωρίας Γραφηµάτων (4) - έντρα

Θέματα Υπολογισμού στον Πολιτισμό - Δένδρα. Δένδρα

3η Σειρά Γραπτών Ασκήσεων

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 2: Μαθηματικό Υπόβαθρο

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

Κεφάλαιο 3. Γραφήματα. ver. 21/12/2014. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Κατανεμημένα Συστήματα Ι

Τεχνητή Νοημοσύνη (ΥΠ23) 6 ο εξάμηνο Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ουρανία Χατζή

Transcript:

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΛΑΜΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2010 11 Ιστοσελίδα μαθήματος: http://eclass.teilam.gr/di288 5ο ΕΡΓΑΣΤΗΡΙΟ 1 Διάσχιση κατευθυνόμενων γραφημάτων Διάσχιση ή διαπέραση ή διάβαση ή εξερεύνηση γραφήματος χαρακτηρίζεται η διαδικασία συστηματικής και εξαντλητικής επίσκεψης όλων των κορυφών ενός γραφήματος χρησιμοποιώντας τους δεσμούς ή τα τόξα του. Υπάρχουν δύο βασικοί τρόποι διάσχισης των γραφημάτων. αναζήτηση σε βάθος(depth first search ή DFS). αναζήτηση κατά πλάτος(breadth first search ή BFS). 1.1 Αναζήτηση σε βάθος σε κατευθυνόμενα γραφήματα Διαισθητικά η βασική ιδέα της αναζήτησης σε βάθος είναι ότι αρχίζουμε από μια κορυφή και προχωράμε από κορυφή σε κορυφή ώστε να απομακρυνόμαστε από την αρχική κορυφή. Ηαναζήτησησεβάθοςενόςκατευθυνόμενουγραφήματος G = (V,U)υλοποιείταιμετηβοήθειαμιας στοίβας S και ενός βοηθητικού πίνακα A. Οπίνακας Aέχειμέγεθοςίσοςμετοναριθμότωνκορυφώντουγραφήματοςκαιστηναρχήόλατα στοιχεία του πίνακα έχουν τιμή 1. Ο πίνακας A χρησιμοποιείται για να σημειώνεται αν μια κορυφή έχει ήδη εξερευνηθεί. Σ αυτή την υλοποίηση κρατάμε επιπλέον την πληροφορία με ποιά σειρά έχουμε επισκεφτεί την αντίστοιχη κορυφή, για το σκοπό αυτό χρησιμοποιούμε την βοηθητική μεταβλητή pre. Στην στοίβα S αποθηκεύονται οι κορυφές που(ενδεχομένως) δεν έχουμε ακόμη επισκεφτεί. Η στοίβα S χρησιμοποιείται έτσι ώστε όταν φτάσουμε σε αδιέξοδο να γυρίζουμε γρήγορα πίσω για να συνεχίσουμε στην επόμενη υποψήφια κορυφή για εξερεύνηση. Παρατήρηση. Υπάρχουν πολλές υλοποιήσεις της αναζήτησης σε βάθος, η διαφορά τους έγκειται στο ποιες ενέργειες πραγματοποιούνται ή ποιες πληροφορίες επεξεργάζονται κατά την επίσκεψη των κορυφών. Ταβήματατουαλγορίθμουαναζήτησηςσεβάθος,ξεκινώνταςαπότηνκορυφή v j,είναιταακόλουθα: 1.Αρχικά,όλεςοικορυφέςτου Gείναιανεξερεύνητες,επομένωςσεόλεςτιςθέσειςτουπίνακα A θέτουμε 1.Επίσηςθέτουμε pre = 0 2.Τοποθετούμετηνκορυφή v j στηνστοίβα S. 3. Οσοηστοίβα Sείναιμηκενήεκτελούμεταακόλουθαβήματα (αʹ)εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,έστωτο v k. (βʹ)αν A[k] 1,δενεκτελούμεκαμιάενέργεια,αφούηκορυφή v k έχειήδηεξερευνηθεί. (γʹ) Αν A[k] = 1,δηλαδήηκορυφή v k είναιανεξερεύνητη,τηνεπισκεπτόμαστε,καιθέτουμε pre = pre+1και A[k] = pre. Επίσης, είτε από τον πίνακα γειτνίασης είτε από την λίστα γειτονικότητας βρίσκουμε όλες τιςκορυφέςστιςοποίεςκαταλήγουντόξαπουαρχίζουναπότην v k,καιτιςτοποθετούμε στη στοίβα. 1

S Παράδειγμα Ηαναζήτησησεβάθοςμεαφετηρίατηνκορυφήv 7 στοκατευθυνόμενογράφημαg = (V,U)μεεκτελείται ως εξής: 1. Αρχικάθέτουμεσεκάθεστοιχείοτουπίνακα Aτηντιμή 1καιηστοίβα Sείναικενή. 2. Τοποθετούμετηνκορυφή v 7 στηστοίβα. Α= [-1, -1, -1, -1, -1, -1, -1, -1] S v 7 Α= [-1, -1, -1, -1, -1, -1, -1, -1] 3. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 7. Επειδή A[7] = 1επισκεπτόμαστετηνκορυφή v 7,θέτουμε pre = pre+1 = 1,θέτουμε A[7] = pre. Απότην v 7 αρχίζουντόξαπουκαταλήγουνστις v 2 και v 6,επομένωςτοποθετούμεστηστοίβατις v 2 και v 6. v 6 Α= [-1, -1, -1, -1, -1, -1, -1, 1] 4. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 6. Επειδή A[6] = 1επισκεπτόμαστετηνκορυφή v 6,θέτουμε pre = pre+1 = 2,θέτουμε A[6] = 2. Απότην v 6 αρχίζουντόξαπουκαταλήγουνστις v 1 και v 2,επομένωςτοποθετούμεστηστοίβατις v 1 και v 2. v 2 v 1 Α= [-1, -1, -1, -1, -1, -1, 2, 1] 2

5. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 2. Επειδή A[2] = 1επισκεπτόμαστετηνκορυφή v 2,θέτουμε pre = pre+1 = 3,θέτουμε A[2] = pre. Απότην v 2 αρχίζουντόξαπουκαταλήγουνστην v 3,επομένωςτοποθετούμεστηστοίβατην v 3. v 3 v 1 Α= [-1, -1, 3, -1, -1, -1, 2, 1] 6. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 3. Επειδή A[3] = 1επισκεπτόμαστετηνκορυφή v 3,θέτουμε pre = pre+1 = 4,θέτουμε A[3] = pre. Απότην v 3 αρχίζουντόξαπουκαταλήγουνστην v 7,επομένωςτοποθετούμεστηστοίβατην v 7. v 7 v 1 Α= [-1, -1, 3, 4, -1, -1, 2, 1] 7. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 7. Επειδή A[7] = 1 1δενεκτελούμεκαμιάενεργεια v 1 Α= [-1, -1, 3, 4, -1, -1, 2, 1] 8. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 1. Επειδή A[1] = 1επισκεπτόμαστετηνκορυφή v 1,θέτουμε pre = pre+1 = 5,θέτουμε A[1] = pre. Απότην v 1 αρχίζουντόξαπουκαταλήγουνστις v 2 και v 5,επομένωςτοποθετούμεστηστοίβατις v 2 και v 5. v 5 v 2 Α= [-1, 5, 3, 4, -1, -1, 2, 1] 3

9. Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 5. Επειδή A[5] = 1επισκεπτόμαστετηνκορυφή v 5,θέτουμε pre = pre+1 = 6,θέτουμε A[5] = pre. Απότην v 5 αρχίζουντόξαπουκαταλήγουνστην v 4,επομένωςτοποθετούμεστηστοίβατην v 4. v 4 v 2 Α= [-1, 5, 3, 4, -1, 6, 2, 1] 10.Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 4. Επειδή A[4] = 1επισκεπτόμαστετηνκορυφή v 4,θέτουμε pre = pre+1 = 7,θέτουμε A[4] = pre. Απότην v 4 αρχίζουντόξαπουκαταλήγουνστην v 0,επομένωςτοποθετούμεστηστοίβατην v 0. v 0 v 2 Α= [-1, 5, 3, 4, 7, 6, 2, 1] 11.Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 0. Επειδή A[0] = 1επισκεπτόμαστετηνκορυφή v 0,θέτουμε pre = pre+1 = 8,θέτουμε A[0] = pre. Απότην v 0 δεναρχίζουντόξα,επομένωςδενκάνουμεάλληενέργεια v 2 Α= [8, 5, 3, 4, 7, 6, 2, 1] 12.Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 2. Επειδή A[2] = 3 1δενεκτελούμεκαμιάενέργεια. Α= [8, 5, 3, 4, 7, 6, 2, 1] 4

S S 13.Επειδήηστοίβαείναιμηκενή,εξάγουμετοκορυφαίοστοιχείοτηςστοίβας,τηνκορυφή v 2. Επειδή A[2] = 3 1δενεκτελούμεκαμιάενέργεια. Α= [8, 5, 3, 4, 7, 6, 2, 1] 14. Επειδή η στοίβα είναι κενή, δεν υπάρχουν άλλες κορυφές προς επίσκεψη και επομένως η αναζήτηση σε βάθος ολοκληρώθηκε. Παρατηρήσεις. Α= [8, 5, 3, 4, 7, 6, 2, 1] 1. Στο προηγούμενο παράδειγμα η σειρά με την οποία επισκεφτήκαμε τις κορυφές του γραφήματος ξεκινώνταςαπότηνκορυφή v 7 είναιαποθηκευμένηστιςθέσειςτουπίνακα A = [8,5,3,4,7,6,2,1]. v 7 v 6 v 2 v 3 v 1 v 5 v 4 v 0 2. Στο προηγούμενο παράδειγμα σε ορισμένες περιπτώσεις εισάγαμε στη στοίβα το ίδιο στοιχείο δύο φορές, ή εισάγαμε ένα στοιχείο το οποίο είχαμε ήδη επισκεφτεί. Υπάρχουν υλοποιήσεις της αναζήτησης σε βάθος που αποφεύγουν αυτές τις επαναλήψεις και φυσικά με αυτή την τροποποίηση η σειρά επίσκεψης των κορυφών αλλάζει, η κεντρική ιδέα όμως της αναζήτησης σε βάθος παραμένει ίδια και στις δύο περιπτώσεις. Στην τροποποίηση αυτή σε κάθε βήμα του αλγορίθμου απαιτείται αναζήτηση στη στοίβα και έλεγχος της αντίστοιχης τιμής του πίνακα. 1.1.1 Δένδρο DFS Εστω G = (V,U)ένακατευθυνόμενογράφημα. Σεκάθεεκτέλεσηαναζήτησηςσεβάθοςμεαφετηρία μιακορυφήτουγραφήματοςgαντιστοιχείένακατευθυνόμενοδιατεταγμένοδένδρο T G,τοοποίοονομάζεται δένδρο DFS. Η ρίζα του δένδρου είναι η κορυφή αφετηρίας, οι υπόλοιπες κορυφές του είναι κορυφές που επισκεπτόμαστε κατά την αναζήτηση σε βάθος. Τα τόξα του δένδρου είναι ένα υποσύνολο των τόξων του γραφήματος.συγκεκριμένα,απότατόξατουγραφήματοςμεαρχήτην v k καιτέλοςτην v l στοδένδρο T G κρατάμε εκείνα για τα οποία ισχύουν τα ακόλουθα: (α)αμέσωςμετάτην v k επισκεπτόμαστετην v l (β)αμέσωςμετάτην v m επισκεπτόμαστετην v l,ηv m δενσυνδέεταιμετην v l καιηv k είναιηπιοκοντινή προηγούμενητης v m πουσυνδέεταιμετην v l Το δένδρο DFS παράγεται ως εξής: 1. Αρχικά θέτουμε ως ρίζα του δένδρου την κορυφή αφετηρίας. 2. Ανμετάτηνκορυφή v i επισκεπτόμαστετηνκορυφή v j καιαπότην v i αρχίζειτόξομετέλοςτην v j τότεθέτουμετην v j τελευταίοπαιδίτης v i,αλλιώςβρίσκουμετονπιοκοντινόπρόγονοτης v i για τονοποιοαρχίζειτόξομετέλοςτης v j καιθέτουμετην v j τελευταίοπαιδίαυτούτουπρογόνου. Συνεχίζουμε με τον ίδιο τρόπο μέχρι να εξαντλήσουμε όλες τις κορυφές που επισκεπτόμαστε. 5

Για παράδειγμα στο γράφημα του προηγούμενου παραδείγματος μεαφετηρίατηνκορυφή v 7 ησειράεπίσκεψηςτωνκορυφώνήτανηεξής: v 7 v 6 v 2 v 3 v 1 v 5 v 4 v 0 επομένως αντιστοιχεί το επόμενο κατευθυνόμενο διατεταγμένο δένδρο. v 7 v 6 v 2 v 1 v 3 v 5 v 4 v 0 Μεβάσητοδένδρο DFSπουπροκύπτειαπότηναναζήτησησεβάθοςμεαφετηρίαμιακορυφή,μπορούμε να κατηγοριοποιήσουμε όλα τα τόξα ενός γραφήματος G σε 4 κατηγορίες: ακμές δένδρου, αν αποτελούν τμήμα του δένδρου DFS. εμπροσθοακμές, αν συνδέουν έναν πρόγονο με έναν απόγονο του δένδρου DFS. DFS οπισθοακμές, αν συνδέουν έναν απόγονο με έναν πρόγονο του δένδρου DFS. διασταυρώσεις, αν συνδέουν κορυφές που δεν είναι η μια πρόγονος ή απόγονος της άλλης. Για παράδειγμα τα τόξα του γραφήματος G του προηγούμενου παραδείγματος κατηγοριοποιούνται ως εξής: εμπροσθοακμή v 7 v 6 οπισθοακμή v 2 v 1 v 3 v 5 διασταύρωση v 4 v 0 Παρατήρηση. Ο εντοπισμός κύκλου σε ένα κατευθυνόμενο γράφημα ανάγεται στην εύρεση μια οπισθοακμής στο αντίστοιχο δένδρο DFS. Στοπροηγούμενοπαράδειγματοτόξο(v 3,v 7 )είναιοπισθοακμή,ηοποίαανήκειστονκύκλοv 7,v 6,v 2,v 3,v 7. 6

Άσκηση Για το επόμενο κατευθυνόμενο γράφημα G v 8 v 9 v 10 v 11 1. Ναγίνειαναζήτησησεβάθοςμεαφετηρίατηνκορυφή v 1 2. Να κατεσκευασθεί το αντίστοιχο δένδρο DFS 3. Ναχαρακτηρισθούνόλατατόξατουγραφήματοςμεβάσητοδένδρο DFS 4. Να εξετασθεί αν το γράφημα περιέχει κύκλους. 1.2 Αναζήτηση κατά πλάτος Η βασική ιδέα της αναζήτησης κατά πλάτος είναι ότι αρχίζουμε από μια κορυφή επισκεπτόμαστε όλες τις γειτονικές κορυφές της αρχικής, επισκεπτόμαστε τους γείτονες των γειτόνων, κ.ο.κ. Η αναζήτηση κατά πλάτος ενός κατευθυνόμενου γραφήματος G = (V, U) υλοποιείται με τη βοήθεια μιας ουράς L και ενός βοηθητικού πίνακα A. Οπίνακας Aέχειμέγεθοςίσοςμετοναριθμότωνκορυφώντουγραφήματοςκαιστηναρχήόλατα στοιχεία του πίνακα έχουν τιμή 1. Ο πίνακας A χρησιμοποιείται για να σημειώνεται αν μια κορυφή έχει ήδη εξερευνηθεί. Σ αυτή την υλοποίηση κρατάμε επιπλέον την πληροφορία με ποιά σειρά έχουμε επισκεφτεί την αντίστοιχη κορυφή, για το σκοπό αυτό χρησιμοποιούμε την βοηθητική μεταβλητή pre. Στην ουρά L αποθηκεύονται οι κορυφές των οποίων δεν έχουμε εξετάσει ακόμα τους γείτονες. Παρατήρηση. Οπως και στην περίπτωση της αναζήτησης σε βάθος, υπάρχουν πολλές υλοποιήσεις της αναζήτησης κατά πλάτος, η διαφορά τους έγκειται στο ποιες ενέργειες πραγματοποιούνται ή ποιες πληροφορίες επεξεργάζονται κατά την επίσκεψη των κορυφών. Ταβήματατουαλγορίθμουαναζήτησηςκατάπλάτος,ξεκινώνταςαπότηνκορυφή v j,είναιταακόλουθα: 1.Αρχικά,όλεςοικορυφέςτου Gείναιανεξερεύνητες,επομένωςσεόλεςτιςθέσειςτουπίνακα A θέτουμε 1.Επίσηςθέτουμε pre = 1 2.Επισκεπτόμαστετηνκορυφή v j,θέτουμε A[j] = preκαιεισάγουμετην v j στηνουρά L. 3. Οσοηουρά Lείναιμηκενήεκτελούμεταακόλουθαβήματα: (αʹ) Επίσης, είτε από τον πίνακα γειτνίασης είτε από την λίστα γειτνίασης βρίσκουμε όλες τις κορυφές στις οποίες καταλήγουν τόξα που αρχίζουν από πρώτο στοιχείο της ουράς L. (βʹ)γιακάθεμιααπότιςγειτονικέςκορυφές,έστωτη v k,ελέγχουμεανείναιεξερευνημένη. Αν A[k] 1, δηλαδή είναι εξερευνημένη, δεν εκτελούμε καμια ενέργεια. Αν A[k] = 1, δηλαδή δεν είναι εξερευνημένη, τότε επισκεπτόμαστε την κορυφή, θέτουμε pre = pre+1,θέτουμε A[k] = pre,καιεισάγουμετην v k στοτέλοςτηςουράς L. (γʹ) Αφαιρούμε το πρώτο στοιχείο της ουράς. 7

L Παράδειγμα Ηαναζήτησηκατάπλάτοςμεαφετηρίατηνκορυφή v 7 στοκατευθυνόμενογράφημα G = (V,U)με εκτελείται ως εξής: 1. Αρχικάθέτουμεσεκάθεστοιχείοτουπίνακα Aτηντιμή 1καιηουρά Lείναικενή.Επίσης pre = 1. Α= [-1, -1, -1, -1, -1, -1, -1, -1] 2. Επίσκεπτόμαστετηνκορυφή v 7,θέτουμε A[7] = 1,εισάγουμετην v 7 στηνουρά. L v 7 Α= [-1, -1, -1, -1, -1, -1, -1, 1] 3. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 7.Οιγείτονέςτηςείναιοικορυφές v 2 και v 6. Επειδή A[2] = 1,επισκεπτόμαστετηνκορυφή v 2,θέτουμε pre = pre + 1 = 1 + 1 = 2,θέτουμε A[2] = 2καιτοποθετούμετην v 2 στοτέλοςτηςουράς. Επειδή A[6] = 1,επισκεπτόμαστετηνκορυφή v 6,θέτουμε pre = pre + 1 = 2 + 1 = 3,θέτουμε A[6] = 3καιτοποθετούμετην v 6 στοτέλοςτηςουράς. Αφαιρούμετηνκορυφή v 7 απότηνουρά. L v 2 v 6 Α= [-1, -1, 2, -1, -1, -1, 3, 1] 8

4. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 2.Ογείτονάςτηςείναιηκορυφή v 3. Επειδή A[3] = 1,επισκεπτόμαστετηνκορυφή v 3,θέτουμε pre = pre + 1 = 3 + 1 = 4,θέτουμε A[3] = 4καιτοποθετούμετην v 3 στοτέλοςτηςουράς. Αφαιρούμετηνκορυφή v 2 απότηνουρά. L v 6 v 3 Α= [-1, -1, 2, 4, -1, -1, 3, 1] 5. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 6.Οιγείτονέςτηςείναιοικορυφές v 1 και v 2. Επειδή A[1] = 1,επισκεπτόμαστετηνκορυφή v 1,θέτουμε pre = pre + 1 = 4 + 1 = 5,θέτουμε A[1] = 5καιτοποθετούμετην v 1 στοτέλοςτηςουράς. Επειδή A[2] = 2 1,δενεκτελούμεκαμίαενέργεια. Αφαιρούμετηνκορυφή v 6 απότηνουρά. L v 3 v 1 Α= [-1, 5, 2, 4, -1, -1, 3, 1] 6. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 3.Ογείτονάςτηςείναιηκορυφή v 7. Επειδή A[7] = 1 1,δενεκτελούμεκαμίαενέργεια. Αφαιρούμετηνκορυφή v 3 απότηνουρά. L v 1 Α= [-1, 5, 2, 4, -1, -1, 3, 1] 7. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 1.Ογείτονάςτηςείναιηκορυφή v 5. Επειδή A[5] = 1,επισκεπτόμαστετηνκορυφή v 5,θέτουμε pre = pre + 1 = 5 + 1 = 6,θέτουμε A[5] = 6καιτοποθετούμετην v 5 στοτέλοςτηςουράς. Αφαιρούμετηνκορυφή v 1 απότηνουρά. L v 5 Α= [-1, 5, 2, 4, -1, 6, 3, 1] 9

L L 8. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 5.Ογείτονάςτηςείναιηκορυφή v 4. Επειδή A[4] = 1,επισκεπτόμαστετηνκορυφή v 4,θέτουμε pre = pre + 1 = 6 + 1 = 7,θέτουμε A[4] = 7καιτοποθετούμετην v 4 στοτέλοςτηςουράς. Αφαιρούμετηνκορυφή v 5 απότηνουρά. L v 4 Α= [-1, 5, 2, 4, 7, 6, 3, 1] 9. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 4.Ογείτονάςτηςείναιηκορυφή v 0. Επειδή A[0] = 1,επισκεπτόμαστετηνκορυφή v 0,θέτουμε pre = pre + 1 = 7 + 1 = 8,θέτουμε A[0] = 8καιτοποθετούμετην v 0 στοτέλοςτηςουράς. Αφαιρούμετηνκορυφή v 4 απότηνουρά. L v 0 Α= [-1, 5, 2, 4, 7, 6, 3, 1] 10. Επειδή η ουρά είναι μη κενή, βρίσκουμε τους γείτονες του πρώτου στοιχείου της ουράς, δηλαδή της κορυφής v 0.Ηκορυφή v 0 δενέχειγείτονες. Αφαιρούμετηνκορυφή v 0 απότηνουρά. Α= [8, 5, 2, 4, 7, 6, 3, 1] 11. Επειδή η ουρά είναι κενή, δεν υπάρχουν άλλοι ανεξερεύνητη γείτονες προς επίσκεψη και επομένως η αναζήτηση κατά πλάτος ολοκληρώθηκε. Α= [8, 5, 2, 4, 7, 6, 3, 1] Παρατήρηση. Στο προηγούμενο παράδειγμα η σειρά με την οποία επισκεφτήκαμε τις κορυφές του γραφήματοςξεκινώνταςαπότηνκορυφή v 7 είναιαποθηκευμένηστιςθέσειςτουπίνακα A = [8,5,2,4,7,6,3,1] v 7 v 2 v 6 v 3 v 1 v 5 v 4 v 0 10

1.3 Δένδρο BFS Εστω G = (V,U)ένακατευθυνόμενογράφημα.Σεκάθεεκτέλεσηαναζήτησηςκατάβάθοςμεαφετηρία μιακορυφήτουγραφήματοςgαντιστοιχείένακατευθυνόμενοδιατεταγμένοδένδρο T G,τοοποίοονομάζεται δένδρο BFS. Η ρίζα του δένδρου είναι η κορυφή αφετηρίας, οι υπόλοιπες κορυφές του είναι κορυφές που επισκεπτόμαστε κατά την αναζήτηση κατά πλάτος. Τα τόξα του δένδρου είναι ένα υποσύνολο των τόξων του γραφήματος. Συγκεκριμένα, το δένδρο BFS παράγεται ως εξής: 1. Αρχικά θέτουμε ως ρίζα του δένδρου την κορυφή αφετηρίας. 2. Στησυνέχειασεκάθεκορυφήv i θέτουμεωςπαιδιά,μετησειράπουτιςεπισκεπτόμαστε,τιςγειτονικές κορυφέςτης v i οιοποίεςείναιανεξερεύνητες. Για παράδειγμα στο γράφημα του προηγούμενου παραδείγματος μεαφετηρίατηνκορυφή v 7 ησειράεπίσκεψηςτωνκορυφώνήτανηεξής: v 7 v 2 v 6 v 3 v 1 v 5 v 4 v 0 επομένως αντιστοιχεί το επόμενο κατευθυνόμενο διατεταγμένο δένδρο. v 7 v 2 v 6 v 3 v 1 v 5 v 4 v 0 Μεβάσητοδένδρο DFSπουπροκύπτειαπότηναναζήτησησεβάθοςμεαφετηρίαμιακορυφή,μπορούμε να κατηγοριοποιήσουμε όλα τα τόξα ενός γραφήματος G σε 3 κατηγορίες: ακμές δένδρου, αν αποτελούν τμήμα του δένδρου DFS. οπισθοακμές, αν συνδέουν έναν απόγονο με έναν πρόγονο του δένδρου DFS. διασταυρώσεις, αν συνδέουν κορυφές που δεν είναι η μια πρόγονος ή απόγονος της άλλης. Παρατήρηση Σε αντίθεση με την αναζήτηση σε βάθος και το δένδρο DFS, στην αναζήτηση κατά πλάτος και το δένδρο BFS δεν υπάρχουν εμπροσθοακμές διότι στην αναζήτηση κατά βάθος επισκεπτόμαστε όλους τους κόμβους που βρίσκονται απόσταση i από την κορυφή αφετηρίας και μετά επισκεπτόμαστε τους κόμβου που βρίσκονται σε απόσταση μεγαλύτερη του i. 11

Για παράδειγμα τα τόξα του γραφήματος G του προηγούμενου παραδείγματος κατηγοριοποιούνται ως εξής: οπισθοακμή v 7 v 2 v 6 v 3 v 1 v 5 διασταύρωση v 4 v 0 Παρατήρηση. Ο εντοπισμός κύκλου σε ένα κατευθυνόμενο γράφημα ανάγεται στην εύρεση μια οπισθοακμής στο αντίστοιχο δένδρο BFS. Στοπροηγούμενοπαράδειγματοτόξο(v 3,v 7 )είναιοπισθοακμή,ηοποίαανήκειστονκύκλοv 7,v 6,v 2,v 3,v 7. Άσκηση Για το επόμενο κατευθυνόμενο γράφημα G v 8 v 9 v 10 v 11 1. Ναγίνειαναζήτησηκατάπλάτοςμεαφετηρίατηνκορυφή v 1 2. Να κατεσκευασθεί το αντίστοιχο δένδρο BFS 3. Ναχαρακτηρισθούνόλατατόξατουγραφήματοςμεβάσητοδένδρο BFS 4. Να εξετασθεί αν το γράφημα περιέχει κύκλους. 12