Διάλεξη 18: Γράφοι I - Εισαγωγή

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

Διάλεξη 18: Γράφοι I Εισαγωγή

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

Διάλεξη 20: Γράφοι I - Εισαγωγή

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Βασικές Δοµές Δεδοµένων. Σύντοµη επανάληψη (ΕΠΛ 035).

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

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

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

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

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

Πανεπιστήμιο Στερεάς Ελλάδας Τμήμα Πληροφορικής Εξάμηνο ΣΤ ΘΕΩΡΙΑ ΓΡΑΦΩΝ

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

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

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

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

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

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

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

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

Θεωρία Υπολογισμού και Πολυπλοκότητα Μαθηματικό Υπόβαθρο

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

Διάλεξη 11: Δέντρα Ι - Εισαγωγή σε Δενδρικές Δομές Δεδομένων

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Διάλεξη 11: Δέντρα Ι Εισαγωγή σε Δενδρικές Δομές Δεδομένων

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Διδάσκων: Κωνσταντίνος Κώστα

(elementary graph algorithms)

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

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

Γράφοι. Ένας γράφος ή αλλιώς γράφηµα αποτελείται απο. Εφαρµογές: Τηλεπικοινωνιακά και Οδικά ίκτυα, Ηλεκτρονικά Κυκλώµατα, Β.. κ.ά.

Διάλεξη 21: Γράφοι IV - Βραχύτερα Μονοπάτια σε Γράφους

Εισαγωγή στη Θεωρία Γράφων

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

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Γράφοι. Αλγόριθμοι και πολυπλοκότητα. Στάθης Ζάχος, Δημήτρης Φωτάκης

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

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

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

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

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

Αυτοματοποιημένη Επαλήθευση

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων

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

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

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

Network Science. Θεωρεία Γραφηµάτων (2)

Αλγόριθμοι Ισχυρά συνεκτικές συνιστώσες Εφαρμογές, BFS

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

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

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

Γράφοι. κόµβοι) και ένα σύνολο από γραµµές (που λέγονται ακµές) οι οποίες

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

Γηάιεμε 19: Δηζαγσγή ζηνπο Γξάθνπο

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

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

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

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

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

Βασικές Δομές Δεδομένων

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

Συντομότερες Διαδρομές

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

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 5: Μείωσε και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

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

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

Αλγόριθµοι και Πολυπλοκότητα

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Συντομότερες Διαδρομές

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Θεωρία Υπολογισμού. Ενότητα 3 : Γραφήματα & Αποδείξεις. Αλέξανδρος Τζάλλας

Συντομότερες ιαδρομές

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

Κατευθυνόμενα γραφήματα. Μαθηματικά Πληροφορικής 6ο Μάθημα. Βρόγχοι. Μη κατευθυνόμενα γραφήματα. Ορισμός

ΑΝΤΙΣΤΟΙΧΗΣΕΙΣ ΟΡΩΝ ΠΟΥ ΧΡΗΣΙΜΟΠΟΙOΥΝΤΑΙ ΣΤΟΥΣ ΤΟΜΟΥΣ Α ΚΑΙ Β ΤΗΣ ΘΕ «ΔΙΑΚΡΙΤΑ ΜΑΘΗΜΑΤΙΚΑ» Ένα γράφημα αποτελείται από ένα σύνολο 94.

Διδάσκων: Παναγιώτης Ανδρέου

Σχεδιαση Αλγοριθμων -Τμημα Πληροφορικης ΑΠΘ - Κεφαλαιο 9ο

(elementary graph algorithms)

Network Science Θεωρεία Γραφηµάτων (1)

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΓΡΑΦΗΜΑΤΑ

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

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

Δομές Δεδομένων Ενότητα 6

Transcript:

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 18: Γράφοι I - Εισαγωγή Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Γράφοι - ορισμοί και υλοποίηση - Διάσχιση Γράφων

Εισαγωγή στους Γράφους Η πιο γενική μορφή δομής δεδομένων, με την έννοια ότι όλες οι προηγούμενες δομές μπορούν να θεωρηθούν ως περιπτώσεις γράφων. Ένας γράφος G(V,E) αποτελείται από ένα σύνολο V κορυφών (vertices), ή σημείων, ή κόμβων, και ένα σύνολο Ε ακμών (edges), ή τόξων, ή γραμμών. Μια ακμή είναι ένα ζεύγος (u,v) από κορυφές. Παράδειγμα γράφου: Α C D Β E F G ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Γράφοι Οι γράφοι προσφέρουν μια χρήσιμη μέθοδο για τη διατύπωση και λύση πολλών προβλημάτων, σε δίκτυα και συστήματα τηλεπικοινωνιών (π.χ. το Internet), χάρτες - επιλογή δρομολογίων, προγραμματισμό εργασιών (scheduling), ανάλυση προγραμμάτων (flow charts). Η θεωρία των γράφων θεωρείται ότι ξεκίνησε από τον Euler στις αρχές του 18ου αιώνα (1736). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3

Εφαρμογές Γράφων ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4 graph vertices edges communication telephones, computers fiber optic cables circuits gates, registers, processors wires mechanical joints rods, beams, springs hydraulic reservoirs, pumping stations pipelines financial stocks, currency transactions transportation street intersections, airports highways, airway routes scheduling tasks precedence constraints software systems functions function calls internet web pages hyperlinks games board positions legal moves social relationship people, actors friendships, movie casts neural networks neurons synapses protein networks proteins protein-protein interactions chemical compounds molecules bonds

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5 High School Dating Bearman, Moody, and Stovel, 2004 Image by Mark Newman

Internet Movie Database Πώς να αναπαραστήσουμε τις σχέσεις μεταξύ των ηθοποιών και των ταινιών; Να χρησιμοποιήσουμε τον τύπο δεδομένων γράφο. Κόμβος: ηθοποιός ή ταινία. Ακμή: σύνδεση του ηθοποιού με την ταινία. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Graph Sample API ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Graph Sample API ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9 Ορισμοί Ένας γράφος ονομάζεται κατευθυνόμενος (directed graph, digraph) αν κάθε μια από τις ακμές του είναι προσανατολισμένη προς μία κατεύθυνση. (πχ: ένα οδικό δίκτυο με λωρίδες μονής κατεύθυνσης) Α Β D E C F G Ένας γράφος ονομάζεται μηκατευθυνόμενος (undirected) αν οι ακμές του δεν είναι προσανατολισμένες.(πχ: ένα οδικό δίκτυο με λωρίδες διπλής κατεύθυνσης) Α Β D E C F G Αν (u,v) είναι ακμή τότε λέμε ότι οι κορυφές u και v είναι γειτονικές (adjacent) ή ότι γειτνιάζουν. Α B

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10 Ορισμοί Μονοπάτι ή διαδρομή (path) ενός γράφου μήκους n, είναι μια ακολουθία κόμβων v 0, v 1,, v n, όπου για κάθε i, 0 i < n, (v i, v i+1 ) είναι ακμή του γράφου. Μήκος ενός μονοπατιού είναι ο αριθμός ακμών που περιέχει (εκτός και εάν ορίζεται διαφορετικά) Α C Μήκος = 3 F G Βραχύτερο Μονοπάτι μεταξύ δυο κορυφών (Shortest Path): To μονοπάτι μεταξύ δυο κορυφών που έχει το ελάχιστο μήκος. Α D C Μια διαδρομή ενός γράφου ονομάζεται απλή (simple path) αν όλες οι κορυφές της είναι διαφορετικές μεταξύ τους, εκτός από την πρώτη και την τελευταία οι οποίες μπορούν να είναι οι ίδιες. Κυκλική Διαδρομή (cycle) ονομάζεται μια διαδρομή με μήκος >1 οπου v 0 = v n. Β Β Α C

Ορισμοί Ένας γράφος που δεν περιέχει κύκλους ονομάζεται άκυκλος (acyclic graph) Α C Έστω G=(V,E) και G = (V, E ) γράφοι, όπου V V και E E. Tότε ο γράφος G είναι υπογράφος (subgraph) του γράφου G. Β D E F G Απόσταση Κορυφών (Vertex Distance): Tο μήκος της συντομότερης διαδρομής που οδηγεί από τη μια κορυφή στην άλλη. Α Β D C ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

Ορισμοί Συνεκτικός Γράφος (Connected Graph): Ένας μη-κατευθυνόμενος γράφος στον οποίο υπάρχει τουλάχιστο μια διαδρομή μεταξύ όλων των κορυφών. Α Β D C Ισχυρά Συνεκτικός Γράφος (Strongly Connected Graph): Ένας κατευθυνόμενος γράφος στον οποίο υπάρχει μια διαδρομή από οποιαδήποτε κορυφή σε οποιανδήποτε άλλη. Α Β D C Ελαφρά Συνεκτικός Γράφος (Weakly Connected Graph): Ένας κατευθυνόμενος (συνεκτικός) γράφος στον οποίο δεν υπάρχει μια διαδρομή από οποιαδήποτε κορυφή σε οποιανδήποτε άλλη. Α Β D C ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Ορισμοί Πόσες ακμές μπορεί να έχει ένας γράφος με n κορυφές; A) Κατευθυνόμενος: nx(n-1) B) Μη-κατευθυνόμενος: nx(n-1)/2 Αραιός Γράφος (Sparse Graph): Αν ο αριθμός των ακμών του είναι της τάξης Ο(n), όπου n είναι ο αριθμός κορυφών του, διαφορετικά λέγεται Πυκνός Γράφος (Dense Graph) Γράφος με Βάρη (Weighted Graph): Συχνά συσχετίζουμε κάθε ακμή ενός γράφου με κάποιο βάρος (weight). Ποιες ιδιότητες ικανοποιούν οι πιο κάτω γράφοι; ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

Αναπαράσταση γράφων στην Μνήμη Αναπαράσταση γράφων με Πίνακες Γειτνίασης (Adjacency Matrix) Ένας γράφος G=(V,E) με n κορυφές μπορεί να αναπαρασταθεί ως ένας n n πίνακας που περιέχει τις τιμές 0 και 1, και όπου αν η (i,j) είναι ακμή τότε A[(i,j)]=1, διαφορετικά A[(i,j)]=0. Αν ο γράφος είναι γράφος με βάρη, και το βάρος κάθε ακμής είναι τύπου t, τότε για την αναπαράσταση του γράφου μπορεί να χρησιμοποιηθεί πίνακας τύπου t με Α[(i,j)] = βάρος(i,j), αν υπάρχει ακμή (i,j) A[(i,j)] =, αν δεν υπάρχει ακμή (i,j) Αυτή η αναπαράσταση απαιτεί χώρο Θ(n 2 ), όπου n= V. Αν ο γράφος είναι αραιός (δηλαδή τάξης Ο(n)) η μέθοδος οδηγεί σε σπάταλη χώρου. 0 Πίνακας Γειτνίασης (Adjacency Matrix) 0 1 2 3 4 0 1 1 1 1 2 1 3 1 4 1 Γράφος 2 1 3 4 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Αναπαράσταση γράφων στην Μνήμη Αναπαράσταση γράφων με Λίστες Γειτνίασης (Adjacency Lists) Ένας γράφος G=(V,E) αναπαρίσταται ως ένας μονοδιάστατος πίνακας Α. Για κάθε κορυφή v, Α[v] είναι ένας δείκτης σε μια συνδεδεμένη λίστα στην οποία αποθηκεύονται οι κορυφές που γειτνιάζουν με την v. Η μέθοδος απαιτεί χώρο Θ( V + Ε ). Επιτυγχάνεται εξοικονόμηση χώρου για αραιούς γράφους. Στην περίπτωση γράφων με βάρη στη λίστα γειτνίασης αποθηκεύουμε επίσης το βάρος κάθε ακμής. Πίνακας Γειτνίασης (Adjacency Matrix) 0 1 2 3 4 0 Γράφος 2 1 3 4 2 3 2 3 4 1 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Διάσχιση Γράφων Αν θέλουμε να επισκεφτούμε όλους τους κόμβους ενός γράφου μπορούμε να χρησιμοποιήσουμε έναν από πολλούς τρόπους, οι οποίοι διαφέρουν στη σειρά με την οποία εξετάζουν τους κόμβους. Διαδικασίες διάσχισης χρησιμοποιούνται για τη διακρίβωση ύπαρξης μονοπατιού μεταξύ δύο κόμβων κ.α. Άλλα Παραδείγματα 1. Οι μηχανές αναζήτησης (search engines π.χ. Google), χρησιμοποιούν προγράμματα τα οποία ονομάζονται crawlers, για να διασχίσουν όλες τις ιστοσελίδες του WWW. Αυτές εκτελούνε αναδρομικά την εξής διαδικασία: a) Κατέβασε την σελίδα Χ, b) Βρες όλους του επόμενους συνδέσμους (links) από την X, c) Για κάθε σύνδεσμο εκτέλεσε τα βήματα a-c. 2. Προγράμματα ανταλλαγής αρχείων (P2P File-sharing Systems, π.χ. Gnutella), χρησιμοποιούνε αλγόριθμους διάσχισης για να μπορούνε οι χρήστες να αποστέλλουν την αναζήτηση τους (query) στους κόμβους του δικτύου. Αν κάποιος κόμβος έχει κάποιο αρχείο το οποίο ψάχνουμε τότε στέλνει κάποια απάντηση στο query. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

Διάσχιση Γράφων Οι πιο διαδεδομένοι τύποι διάσχισης είναι: 1. Κατά Βάθος Διάσχιση(Depth-First Search (DFS)) 2. Κατά Πλάτος Διάσχιση (Breadth-First Search (BFS)) Depth-First Search Γενίκευση της προθεματικής διάσχισης δένδρων: Ξεκινώντας από ένα κόμβο v, επισκεπτόμαστε πρώτα τον v και ύστερα καλούμε αναδρομικά τη διαδικασία στο καθένα από τα παιδιά του. Δηλαδή: Print_Preorder(treenode u) Output data at u; for each child v of u Print_Preorder(v) Σε ένα δένδρο δεν έχουμε κυκλικές διαδρομές. Σε ένα γράφο όμως έχουμε κυκλικές διαδρομές. Άρα πως θα διασχίσουμε τον γράφο; Θα διατηρήσουμε ένα πίνακα Visited ο οποίος θα κρατά πληροφορίες ως προς το ποιους κόμβους έχουμε επισκεφθεί ανά πάσα στιγμή. Δεν θα επισκεπτόμαστε ξανά τον ίδιο κόμβο ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Διαδικασία Προθεματικής Διάσχισης DepthFirstSearch(graph G,vertex v){ for each vertex w in G visited[w] = False; DFS(v); } Γράφος 0 1 2 3 4 DFS(vertex v){ visited[v] = True; print Visited node v for each w adjacent to v if (visited[w]==false) DFS(w) } Χρόνος Εκτέλεσης: Θ( V + E ) Θα επισκεφτούμε ακριβώς μια φορά όλες τις κορυφές και ακμές Υπόθεση: O γράφος είναι συνεκτικός (connected). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

Προθεματική Διάσχιση Αν ο γράφος δεν είναι συνεκτικός (disconnected) αυτή η στρατηγική πιθανό να αγνοήσει μερικούς κόμβους. Αν ο στόχος μας είναι να επισκεφθούμε όλους τους κόμβους τότε μετά το τέλος της εκτέλεσης του DFS(v) θα πρέπει να ελέγξουμε τον πίνακα Visited να βρούμε τους κόμβους που δεν έχουμε επισκεφθεί και να καλέσουμε σε αυτούς τη διαδικασία DFS: DepthFirstSearch(graph G,vertex v){ for each vertex w in G Visited[w] = False; DFS(v); for each vertex w in G if (Visited[w]== False) DFS(w); } ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20 Παράδειγμα Depth-First-Search σε Κατευθυνόμενο Γράφο Γράφος 0 1 2 3 4 DFS(G, 1) = 1,2,3,4 0 1 0 2 3 4 Πίνακας Γειτνίασης (Adjacency Matrix) 0 1 2 3 4 0 1 1 1 1 2 1 3 1 4 1 Στον αρχικό γράφο δεν υπάρχει μια διαδρομή μεταξύ όλων των ζευγών Π.χ. 1->0

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21 Παράδειγμα Depth-First-Search σε Μη-Κατευθυνόμενο Γράφο Γράφος 0 1 2 3 4 DFS(G, 0) = 0,2,1,4,3 Πίνακας Γειτνίασης (Adjacency Matrix) 0 1 2 3 4 0 1 1 1 1 1 2 1 1 1 3 1 1 1 4 1 1 0 1 2 3 4

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22 Μερικά Σχόλια Η διαδικασία καλείται σε κάθε κόμβο το πολύ μια φορά. Χρόνος Εκτέλεσης: Θ( V + E ), δηλαδή γραμμικός ως προς τον αριθμό των ακμών και κορυφών. Αρίθμηση DFS των κορυφών ενός γράφου ονομάζεται η σειρά με την οποία επισκέπτεται η διαδικασία DepthFirstSearch τις κορυφές του γράφου. Η διαδικασία μπορεί να κληθεί και για μη-κατευθυνόμενους και για κατευθυνόμενους γράφους. Αντί με αναδρομή η διαδικασία μπορεί να υλοποιηθεί, ως συνήθως, με τη χρήση στοιβών.

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23 Breadth-First Search (BFS) Ξεκινώντας από ένα κόμβο v, επισκεπτόμαστε πρώτα το v, ύστερα τους κόμβους που γειτνιάζουν με τον v, ύστερα τους κόμβους που βρίσκονται σε απόσταση 2 από τον v, και ούτω καθεξής. Α C Διάσχιση με BFS 1 Α Β Β 3 2 D D G F E C 6 F E 5 4 G

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24 BFS: Παράδειγμα 0 0 1 A B C D A B C D E F G H E F G H I J K L I J K L M N O P 0 1 2 A B C D M N O P 0 1 2 3 A B C D E F G H E F G H I J K L I J K L M N O P 0 1 2 3 A B C D M N O P 0 1 2 3 A B C D E F G H E F G H I J K L 4 I J K L 4 M N O P M N O P 5

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25 Διαδικασία Breadth-First Search Διάσχιση Γράφου G ξεκινώντας από το v Ψευδοκώδικας BFSearch(graph G, vertex v){ Q=MakeEmptyQueue(); for each w in G Visited[w]=False; } Visited[v]= True; Enqueue(v,Q); while (!IsEmpty(Q)){ w = Dequeue(Q); Print(w); for each u adjacent to w if (Visited[u]==False){ Visited[u]=True; Enqueue(u,Q); } Υλοποίηση BFS με χρήση ουράς Χρόνος Εκτέλεσης: O( V + E )

Παράδειγμα Εκτέλεσης BFS ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 26 A C D E F H Ουρά Q D C,F F, A A, E, H E, H, B H, B B, G Έξοδος Διαδικασίας D C F A E H B G G B G { }

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 27 Διάλεξη 19: Γράφοι II - Τοπολογική Ταξινόμηση Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Τοπολογική Ταξινόμηση - Εφαρμογές, Παραδείγματα, Αλγόριθμοι

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 28 Τοπολογική Ταξινόμηση (Topological Sort) Δίνεται ένα σύνολο εργασιών και θέλουμε να ορίσουμε τη σειρά με την οποία πρέπει να εκτελέσει τις εργασίες ένας επεξεργαστής, δεδομένης της ύπαρξης περιορισμών ως προς την προτεραιότητά τους. Κάθε εργασία έχει ένα σύνολο προαπαιτούμενων εργασιών, δηλαδή δεν μπορεί να εκτελεσθεί προτού συμπληρωθεί κάθε μια από τις προαπαιτούμενες. Μπορούμε να παραστήσουμε το πρόβλημα ως έναν κατευθυνόμενο γράφο: Οι κορυφές του γράφου αντιστοιχούν σε κάθε μια από τις εργασίες, και η ύπαρξη ακμής από την κορυφή Α στην κορυφή Β δηλώνει ότι η εργασία Α πρέπει να εκτελεστεί πριν από τη Β. Τοπολογική ταξινόμηση του γράφου είναι μια σειρά των κορυφών του, v 1,, v n,, ώστε αν (v i, v j ) είναι ακμή του γράφου τότε i εκτελείται πριν το j (δηλαδή i<j). Α Β

Παράδειγμα Τοπολογικών Ταξινομήσεων ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 29 V2 V1 V3 Τοπολογικές Ταξινομήσεις του γράφου: 1. V1, V2, V4, V3, V5, V6, V7 V4 V5 2. V1, V2, V3, V5, V4, V6, V7 3. V1, V3, V2, V5, V4, V6, V7 V6 4. V7

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 30 Αλγόριθμος για Τοπολογική Ταξινόμηση Βαθμός εισόδου (in-degree): ενός κόμβου είναι ο αριθμός των ακμών που καταλήγουν στον κόμβο. (Στο πρόβλημα μας, ο αριθμός των προαπαιτούμενων εργασιών) Για κάθε κορυφή u έστω I[u] ο βαθμός εισόδου (αριθμός γονέων) της u. ΠΑΡΑΔΕΙΓΜΑ ΑΛΓΟΡΙΘΜΟΣ Επαναλαμβάνουμε τα εξής βήματα: 1. διαλέγουμε κορυφή Α με I[Α]=0, 2. τυπώνουμε την Α, 3. για όλες τις κορυφές Β, όπου υπάρχει η ακμή (Α,Β) μειώνουμε την τιμή Ι[Β] κατά 1. ΑΠΟΤΕΛΕΣΜΑTA(Υπάρχουν αρκετές τοπολογικές ταξινομήσεις) 7,5,3,11,8,2,9,10 7,5,11,2,3,10,8,9..

Κατευθυνόμενοι Μη-Κυκλικοί Γράφοι Ωστόσο η τοπολογική ταξινόμηση δουλεύει μόνο για μια ειδική κλάση γράφων η οποία ονομάζεται DAGs DAG: Directed Acyclic Graphs (Κατευθυνόμενοι Μη-Κυκλικοί Γράφοι): Ένας γράφος στο οποίο κανένα μονοπάτι δεν ξεκινά και τελειώνει στον ίδιο κόμβο. Directed Acyclic Graph Directed Cyclic Graph To γεγονός ότι δουλεύει μόνο για DAGs είναι αναμενόμενο διότι αν υπήρχαν κυκλικά μονοπάτια τότε δεν θα υπήρχε κάποια σειρά (ordering) μεταξύ των στοιχείων (αφού δεν θα ξέραμε ποια είναι η αρχή) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 31

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 32 (Ψευδό)-Υλοποίηση 1 topsort1( graph G ){ // αρχικοποίηση πίνακα μεγέθους V int I[ V ] = {}; // μέτρηση in-degree για κάθε κόμβο for each vertex u for each edge (u,v) O( V + E ) I[v]++; // προσπέλαση του γράφου for (i=1; i <= V ; i++){ v = FindVertexOfIndegree0; Ο( V ) if (v == NULL) {// δεν υπάρχει κόμβος //με in-degree=0 Error( Graph has a cycle ); return; } print v; // εκτύπωση κόμβου for each edge (v,w) // μείωση in-degree I[w]--; // για κάθε παιδί } Χρόνος Εκτέλεσης: Ο( V 2 +Ε) Ο( V 2 + E ) O( Ε )

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 33 (Ψευδό)-Υλοποίηση 2 (Με Χρήση Ουράς) topologicalsort( graph G ){ Queue Q; // ορισμός βοηθητικής ουράς // αρχικοποίηση πίνακα μεγέθους V int I[ V ] = {}; // μέτρηση indegree για κάθε κόμβο for each vertex u for each edge (u,v) I[v]++; Θ( V + E ) // τοποθέτησε κάθε στοιχείο με indegree=0 σε μια ουρά for each vertex u if (I[u]==0) Enqueue(u, Q); Θ( V ) Χρόνος Εκτέλεσης: Θ( V + E ) while (! IsEmpty(Q)){ u = Dequeue(Q); output u; number_of_outputs++; for each (u,v) { I[v]--; Θ( V + E ) if (I[v]==0) Enqueue (v, Q); } } // Εάν δεν εκτυπώθηκαν όλοι οι κόμβοι τότε είχε κύκλο o γράφος γιατί κάποιοι κόμβοι δεν πήραν ποτέ indegree = 0; if (number_of_outputs!= V ) Error( Graph has a cycle );

Σύνοψη Ο χρόνος εκτέλεσης της TopologicalSort είναι Για υλοποίηση με λίστες γειτνίασης: Ο( V + Ε ) Για υλοποίηση με πίνακες γειτνίασης: Ο( V 2 ) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 34 Για αραιούς γράφους όπου Ε Ο( V ) η πολυπλοκότητα αυτή μεταφράζεται σε: Ο( V ), για υλοποίηση με λίστες γειτνίασης, ενώ για υλοποίηση με πίνακες γειτνίασης παραμένει Ο( V 2 ). Για πυκνούς γράφους όπου Ε Ο( V 2 ) η πολυπλοκότητα αυτή μεταφράζεται σε: Ο( V 2 ), για υλοποίηση με λίστες γειτνίασης, και για υλοποίηση με πίνακες γειτνίασης παραμένει Ο( V 2 ).

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 35 Παράδειγμα 1: Εφαρμογή Γράφων Η εταιρεία τηλεπικοινωνιών EPL-NET έχει ένα δίκτυο από σταθμούς που ενώνονται μεταξύ τους από n επικοινωνιακές γραμμές υψηλής ταχύτητας. Το τηλέφωνο του κάθε συνδρομητή της εταιρείας συνδέεται με το σταθμό της περιοχής του. Κάθε σταθμός συνδέεται με άλλους χρήστες αλλά και με άλλους σταθμούς. Οι ερευνητές της εταιρείας έχουν ανακαλύψει μία νέα τεχνολογία που επιτρέπει σε δύο χρήστες να βλέπουν και τρισδιάστατη εικόνα κατά τη διάρκεια της τηλεφωνικής τους επικοινωνίας. Για να είναι όμως η ποιότητα της εικόνας ικανοποιητική, πρέπει ο αριθμός των γραμμών που χρησιμοποιούνται για τη σύνδεση ανάμεσά στους δύο χρήστες (και ενδιάμεσους σταθμούς) να μην ξεπερνά τις 4 συνδέσεις. Να σχεδιάσετε ένα αποδοτικό αλγόριθμο (ψευδοκώδικα) ο οποίος με δεδομένο εισόδου την ταυτότητα κάποιου χρήστη u, να επιστρέφει (εκτύπωση) τη λίστα με όλους τους χρήστες που μπορεί να χρησιμοποιήσουν την καινούρια τεχνολογία με τον u.

Παράδειγμα 1: Εφαρμογή Γράφων Το πρόβλημα μπορεί να μετατραπεί σε πρόβλημα διερεύνησης κατά πλάτος σε γράφο αρχίζοντας από τον χρήστη (κορυφή) u και μετά εκτελώντας την διερεύνηση μέχρι το βάθος 4. ΒFS(vertex u, graph G){ } visited[ V ]; queue Q; Q=MakeEmptyQueue(); for each v in G visited[v]=false; visited[u]= True; Enqueue(u,Q, 0); while (!IsEmpty(Q)){ (w, h) = Dequeue(Q); print(w); } if(h+1>4) continue; for each v adjacent to w if (Visited[v]==False){ Visited[v]=True; Enqueue(v,Q, h+1); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 36