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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(elementary graph algorithms)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ελάχιστα Γεννητορικά ένδρα

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

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

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

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

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

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

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

(elementary graph algorithms)

Αλγόριθµοι + οµές εδοµένων = Προγράµµατα

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

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

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

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

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

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

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

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

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

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

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

ιαδικασία Προθεµατικής ιάσχισης 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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-5

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

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

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

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

ιαδικασία Breadth-First Search 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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-2

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

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

topsort( graph G ){ int I[ V ]; Προσπάθεια for each vertex u I[u]=; for each vertex u for each edge (u,v) I[v]++; Χρόνος Εκτέλεσης: 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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-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 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26-25