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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(elementary graph algorithms)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #11

Γράφοι (συνέχεια) Ο αλγόριθµος Dijkstra για εύρεση βραχυτέρων µονοπατιών Ta µονοπάτια Euler

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

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

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

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

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

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

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

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

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

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

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

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

Γραφήματα. Κεφάλαιο Εισαγωγικές έννοιες Ορισμός

βασικές έννοιες (τόμος Β)

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

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

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

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

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

Θεωρία και Αλγόριθμοι Γράφων

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

ΕΠΛ 232: Αλγόριθµοι και Πολυπλοκότητα. Κατ οίκον Εργασία 2A Σκελετοί Λύσεων

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

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

Δυναµικός Προγραµµατισµός (ΔΠ)

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Βασικές Έννοιες Δοµών Δεδοµένων

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

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

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

Αλγόριθµοι Ροής σε Γράφους (CLR, κεφάλαιο 27)

Αλγόριθμοι και πολυπλοκότητα Οριζόντια διερεύνηση

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

Transcript:

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

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

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

Ορισµοί Ένας γράφος ονοµάζεται κατευθυνόµενος (directed graph, digraph) αν κάθε µια από τις ακµές του είναι προσανατολισµένη προς µία κατεύθυνση. Ένας γράφος ονοµάζεται µη-κατευθυνόµενος (undirected) αν οι ακµές του δεν είναι προσανατολισµένες. Αν (u,v) είναι ακµή τότε λέµε ότι οι κορυφές u και v είναι γειτονικές (adjacent) ή ότι γειτνιάζουν. Μονοπάτι ή διαδροµή (path) ενός γράφου µήκους n, είναι µια ακολουθία κόµβων v, v,, v n, όπου για κάθε i, i < n, (v i, v i+ ) είναι ακµή του γράφου. Μήκος ενός µονοπατιού είναι ο αριθµός ακµών που περιέχει. Η απόσταση δύο κορυφών είναι το µήκος της συντοµότερης διαδροµής που οδηγεί από τη µια κορυφή στην άλλη. Μια διαδροµή ενός γράφου ονοµάζεται απλή (simple) αν όλες οι κορυφές της είναι διαφορετικές µεταξύ τους, εκτός από την πρώτη και την τελευταία οι οποίες µπορούν να είναι οι ίδιες. ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -4

Ορισµοί Κύκλος (cycle) ονοµάζεται µια διαδροµή µε µήκος > που ικανοποιεί v = v n. Ένας γράφος που δεν περιέχει κύκλους ονοµάζεται άκυκλος (acyclic) Έστω G=(V,E) και G = (V, E ) γράφοι, όπου V V και E E. Tότε ο γράφος G είναι υπογράφος (subgraph) του γράφου G. Ένας µη κατευθυνόµενος γράφος λέγεται συνεκτικός (connected) αν για κάθε ζευγάρι κορυφών υπάρχει διαδροµή που τις συνδέει. Ένας κατευθυνόµενος γράφος που ικανοποιεί την ίδια ιδιότητα ονοµάζεται ισχυρά συνεκτικός (strongly connected). Αν ο µηκατευθυνόµενος γράφος στον οποίο αντιστοιχεί είναι συνεκτικός, τότε ο γράφος ονοµάζεται ελαφρά συνεκτικός (weakly connected). ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -5

Ορισµοί Πόσες ακµές µπορεί να έχει ένας γράφος µε n κορυφές; Ένας γράφος λέγεται αραιός (sparse) αν ο αριθµός των ακµών του είναι της τάξης Ο(n), όπου n είναι ο αριθµός κορυφών του, διαφορετικά λέγεται πυκνός (dense). Συχνά συσχετίζουµε κάθε ακµή ενός γράφου µε κάποιο βάρος (weight). Τότε ο γράφος ονοµάζεται γράφος µε βάρη (weighted graph). Ποιες ιδιότητες ικανοποιούν οι πιο κάτω γράφοι; 2 4 7 5-3 ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -6

Αναπαράσταση γράφων Αναπαράσταση γράφων µε πίνακες γειτνίασης (adjacency matrix) Ένας γράφος G=(V,E) µε n κορυφές µπορεί να αναπαρασταθεί ως ένας n n πίνακας που περιέχει τις τιµές και, και όπου αν η (i,j) είναι ακµή τότε A[(i,j)]=, διαφορετικά A[(i,j)]=. Αν ο γράφος είναι γράφος µε βάρη, και το βάρος κάθε ακµής είναι τύπου t, τότε για την αναπαράσταση του γράφου µπορεί να χρησιµοποιηθεί πίνακας τύπου t µε Α[(i,j)] = βάρος(i,j), αν υπάρχει ακµή (i,j) A[(i,j)] =, αν δεν υπάρχει ακµή (i,j) Αυτή η αναπαράσταση απαιτεί χώρο Ο(n 2 ), όπου n= V. Αν ο γράφος είναι αραιός η µέθοδος οδηγεί σε σπάταλη χώρου. ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -7

Αναπαράσταση γράφων Αναπαράσταση γράφων µε λίστες γειτνίασης (adjacency lists) Ένας γράφος G=(V,E) αναπαρίσταται ως ένας µονοδιάστατος πίνακας Α. Για κάθε κορυφή ω, Α[ω] είναι ένας δείκτης σε µια συνδεδεµένη λίστα στην οποία αποθηκεύονται οι κορυφές που γειτνιάζουν µε την ω. Η µέθοδος απαιτεί χώρο Ο( V + Ε ). Επιτυγχάνεται εξοικονόµηση χώρου για αραιούς γράφους. Στην περίπτωση γράφων µε βάρη στη λίστα γειτνίασης αποθηκεύουµε επίσης το βάρος κάθε ακµής. ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -8

ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -9 Αναπαράσταση γράφων Γράφος Πίνακας Γειτνίασης Λίστα Γειτνίασης 2 3 4 4 3 2 4 3 2 2 3 4 2 3 2 3 4

Δοµές Υλοποίησης Πίνακας Γειτνίασης struct graph{ int matrix[max][max]; int size; } Λίστα Γειτνίασης struct node{ struct graph2{ int vertex; struct node *head[max]; struct node *next ; int size; } } ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -

Διάσχιση Γράφων Αν θέλουµε να επισκεφτούµε όλους τους κόµβους ενός γράφου µπορούµε να χρησιµοποιήσουµε έναν από πολλούς τρόπους, οι οποίοι διαφέρουν στη σειρά µε την οποία εξετάζουν τους κόµβους. Διαδικασίες διάσχισης χρησιµοποιούνται για τη διακρίβωση ύπαρξης µονοπατιού µεταξύ δύο κόµβων κ.α. Έχουν πολλές εφαρµογές. Depth-First Search Γενίκευση της προθεµατικής διάσχισης δένδρων: Ξεκινώντας από ένα κόµβο v, επισκεπτόµαστε πρώτα τον v και ύστερα καλούµε αναδροµικά τη διαδικασία στο καθένα από τα παιδιά του. Πως επηρεάζει η ύπαρξη κύκλων την πιο πάνω ιδέα; Θα διατηρήσουµε ένα πίνακα Visited ο οποίος θα κρατά πληροφορίες ως προς το ποιους κόµβους έχουµε επισκεφθεί ανά πάσα στιγµή. ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -

Διαδικασία κατά βάθους διερεύνησης DepthFirstSearch(graph G,vertex v){ for each vertex w in G visited[w] = False; DFS(v); } DFS(vertex v){ } visited[v] = True; for each w adjacent to v if (visited[w]==false) DFS(w) ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -2

Εξειδίκευση DFS για πίνακες γειτνίασης DepthFirstSearch(struct graph *G, int v){ for (w=; w <= G->size; w++) visited[w] = ; DFS(G, visited, v); } DFS(struct graph *G, int *visited[max], int v){ } visited[v] = ; for (w=; w <= G->size; w++) if (G->matrix[v,w] == && visited[w]==) DFS(G, visited, w) Χρόνος Εκτέλεσης: O( V 2 ) ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -3

Εξειδίκευση DFS για λίστες γειτνίασης DepthFirstSearch(struct graph2 *G, int v){ for (w=; w <= G->size; w++) visited[w] = ; DFS(G, visited, v); } DFS(struct graph2 *G, int *visited[max], int v){ } visited[v] = ; for (p = G->head[v]; p!= NULL; p = p->next) w = p->vertex; if (Visited[w]==) DFS(G, visited, w) Χρόνος Εκτέλεσης: O( V + E ) ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -4

Κατά βάθος διερεύνηση Αν ο γράφος δεν είναι συνεκτικός αυτή η στρατηγική πιθανό να αγνοήσει µερικούς κόµβους. Αν ο στόχος µας είναι να επισκεφθούµε όλους τους κόµβους τότε µετά το τέλος της εκτέλεσης του 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); } ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -5

Παράδειγµα Depth-First-Search A B Γ Ε Δ Ζ DepthFirstSearch(G, A) Α Β Γ Δ Ε Ζ Α Β Γ Δ Ε Ζ A B Γ 2 3 Δ 6 Ε 5 4 Ζ ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -6

ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -7 Παράδειγµα Depth-First-Search 2 DepthFirstSearch(G, A) 2 A B Ε Δ Γ A B Ε Δ Γ Ζ Ζ 3 4 5 6 Α Β Γ Δ Ε Ζ Α Β Γ Δ Ε Ζ

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

Κατά πλάτος διερεύνηση Ξεκινώντας από ένα κόµβο v, επισκεπτόµαστε πρώτα το v, ύστερα τους κόµβους που γειτνιάζουν µε τον v, ύστερα τους κόµβους που βρίσκονται σε απόσταση 2 από τον v, και ούτω καθεξής. Ε B A Δ Α Β Δ Γ Ε Θ Ζ Ζ Γ Θ Output: Α Β Δ Γ Ε Θ Ζ ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -9

Διαδικασία κατά πλάτους διερεύνησης 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); Visit(w); for each u adjacent to w if (Visited[u]=False) Visited[u]=True; Enqueue(u,Q); } ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -2

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

Παράδειγµα V Τοπολογικές Ταξινοµήσεις του γράφου: V2 V3 V, V2, V4, V3, V5, V6, V7 V, V2, V3, V5, V6, V7, V4 V4 V5 V, V3, V2, V5, V6, V4, V7 V6 V7 ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -22

Αλγόριθµος για Τοπολογική Ταξινόµηση Ο βαθµός εισόδου (in-degree) ενός κόµβου είναι ο αριθµός των ακµών που καταλήγουν στον κόµβο. (Στο πρόβληµα µας, ο αριθµός των προαπαιτούµενων εργασιών) Για κάθε κορυφή u έστω I[u] ο βαθµός εισόδου της u. Επαναλαµβάνουµε τα εξής βήµατα:. διαλέγουµε κορυφή Α µε Ι[Α]=, 2. τυπώνουµε την Α, 3. για όλες τις κορυφές Β, µε (Α,Β) µειώνουµε την τιµή Ι[Β] κατά. Πως µπορούµε να διακρίνουµε την ύπαρξη κύκλων; ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -23

topsort( graph G ){ int I[ V ]; Προσπάθεια for each vertex u I[u]=; for each vertex u for each edge (u,v) I[v]++; Χρόνος Εκτέλεσης: O( V 2 ) for (i=; i <= V ; i++){ v = FindVertexOfIndegree; if (v == Not_a_Vertex) Error( Graph has a cycle ); return; output v; for each edge (v,w) I[w]--; }} ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -24

Προσπάθεια 2 (µε χρήση βοηθητικής δοµής) topologicalsort( graph G ){ queue Q; int I[ V ]; for each vertex u I[u]=; Χρόνος Εκτέλεσης:? for each vertex u for each edge (u,v) I[v]++; for each vertex u if (I[u]==) Enqueue(u, Q); while (! IsEmpty(Q)){ u = Dequeue(Q); output u; for each (u,v) I[v]--; if (I[v]==) Enqueue (v, Q); }} ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι -25