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

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

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

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

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

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

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

ιαφάνειες παρουσίασης #6 (α)

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

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

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

ιαφάνειες παρουσίασης #5 (β)

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

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

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

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

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

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

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

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

Διάλεξη 21η: Απλά Συνδεδεμένες Λίστες

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

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

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

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

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

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

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

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

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

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

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

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

(elementary graph algorithms)

Σημειωματάριο Τετάρτης 29 Νοε. 2017

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

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

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

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

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

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

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

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

Φροντιστήριο 4 Σκελετοί Λύσεων

Φροντιστήριο 4 Σκελετοί Λύσεων

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

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

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

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

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

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 10: Δομές Δεδομένων Ι (Στοίβες & Ουρές)

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

u v 4 w G 2 G 1 u v w x y z 4

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

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

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

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

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

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

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

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

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

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

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

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

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

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

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

Δοµές Δεδοµένων & Ανάλυση Αλγορίθµων 3ο Εξάµηνο. Γραφήµατα. (Graphs)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

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

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

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

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

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

Ιδιοκτησία Αντικειµένου

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

Μη κατευθυνόµενα γραφήµατα. Στοιχεία Θεωρίας Γραφηµάτων (1) Υπογραφήµατα.

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

Μάθημα 21: Ουρές (Queues)

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

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

Transcript:

Γράφοι Ορολογία γράφος ή γράφηµα (graph) Ορισµός: G = (V, E) όπου V:ένα σύνολο E:µια διµελής σχέση στο V Ορολογία (συνέχεια) κάθε v V ονοµάζεται κορυφή (vertex) ή κόµβος (node) κάθε (v 1, v 2 ) Ε ονοµάζεται ακµή (edge) ή τόξο (arrow) v 2 v 4 v 1 (i) v 3 v 5 v 6 v 7 V = { v 1, v 2, v 3, v 4, v 5, v 6, v 7 E = { (v 1, v 2 ), (v 1, v 3 ), (v 2, v 4 ), (v 3, v 4 ), (v 5, v 2 ), (v 5, v 3 ), (v 1, v 5 ), (v 6, v 7 ), (v 7, v 6 ), (v 7, v 7 ) 1

Γράφοι Είδη γράφων Κατευθυνόµενος (directed) γράφος, αν (v 1, v 2 ) Ε είναι διατεταγµένο ζεύγος Μη κατευθυνόµενος (undirected) γράφος, αν (v 1, v 2 ) και (v 2, v 1 ) ταυτόσηµα Ορισµοί ύο κορυφές v 1 και v 2 ονοµάζονται γειτονικές (adjacent) αν (v 1, v 2 ) Ε (ii) v 1 v 2 v 3 v 4 v 5 v 6 v 7 κατευθυνόµενος w 1 w 2 w 4 w 3 µη κατευθυνόµενος 2

Γράφοι Ορισµοί (συνέχεια) Βαθµός (degree) µιας κορυφής v V είναι οαριθµός των γειτονικών κορυφών της deg(w 1 )=2, deg(w 2 )=1 Για κατευθυνόµενους γράφους: µέσα-βαθµός (in-degree) και έξω-βαθµός (out-degree) indeg(v 1 )=0, outdeg(v 1 )=3, indeg(v 2 )=2, outdeg(v 2 )=1 (iii) v 1 v 2 v 3 v 4 v 5 v 6 v 7 κατευθυνόµενος w 1 w 2 w 4 w 3 µη κατευθυνόµενος 3

Γράφοι (iv) Ορισµοί (συνέχεια) Μονοπάτι (path) είναι µια ακολουθία κορυφών v 1, v 2,... v n V τέτοια ώστε (v i, v i+1 ) Ε, i Μήκος µονοπατιού Κύκλος (cycle) είναι ένα µονοπάτι µε v 1 = v n Ακυκλικός (acyclic) γράφος: δεν περιέχει κύκλους b d a c e Μονοπάτι: a, b, c, e, g b d a c e µήκος=4 f g f g Κύκλος: b, c, e, d, b 4

Γράφοι (v) Ορισµοί (συνέχεια) Υπογράφος (subgraph) του G = (V, E) είναι ένας γράφος G = (V, E ) τέτοιος ώστε V V και E E b d a c e G f g a b c f b c f d e g d e G 2 υπογράφος του G G 1 υπογράφος του G 5

Γράφοι Ορισµοί (συνέχεια) Συνδεδεµένος (connected) ή συνεκτικός γράφος: για κάθε ζεύγος κορυφών v 1, v 2 V υπάρχει µονοπάτι από την v 1 στη v 2 Συνδεδεµένα συστατικά (connected components): συνδεδεµένοι υπογράφοι που περιέχουν όλες τις κορυφές και τις ακµές (vi) a b d c e f g συνδεδεµένος a b d c e f g µη συνδεδεµένος 6

Γράφοι Ορισµοί (συνέχεια) Ισχυρά συνδεδεµένος (strongly connected) κατευθυνόµενος γράφος: όπως προηγουµένως Ασθενώς συνδεδεµένος (weakly connected) κατευθυνόµενος γράφος: συνδεδεµένος, αν αγνοήσουµε τις κατευθύνσεις των ακµών (vii) a b d c e f g ισχυρά συνδεδεµένος a b c f? d e g ασθενώς συνδεδεµένος 7

Γράφοι ως ΑΤ Υποθέτουµε ότι προϋπάρχει: Τύπος κορυφής: vertex Πράξεις ΑΤ : graph void empty (graph *g, int n); int isadjacent (graph g, vertex v1, vertex v2); void join (graph *g, vertex v1, vertex v2); void remove (graph *g, vertex v1, vertex v2); 8

Αναπαράσταση γράφων µε ΣΤ ύο από τους κυριότερους τρόπους αναπαράστασης Πίνακας γειτονικών κορυφών (adjacency matrix) Λίστα γειτονικών κορυφών (adjacency list) Άλλοι τρόποι αναπαράστασης Λίστα ακµών (edge list) 9

Πίνακας γειτονικών κορυφών (i) Τρόπος αναπαράστασης Έστω ο γράφος G = (V, E) και n = V Ο γράφος G αναπαρίσταται µε έναν πίνακα a διαστάσεων n n τα στοιχεία του οποίου είναι TRUE ή FALSE a[i, j] = TRUE αν και µόνο αν (v i, v j ) E v 0 v 1 v 3 v 2 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 v 0 v 1 v 3 v 2 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 10

Πίνακας γειτονικών κορυφών (ii) Μέγιστο πλήθος κορυφών #define MAX 10 Τύπος κορυφής typedef unsigned vertex; Τύπος για τις λογικές τιµές typedef enum { FALSE=0, TRUE=1 bool; Ορισµός τύπου graph typedef bool graph[max][max]; 11

Πίνακας γειτονικών κορυφών (iii) Κενός γράφος void empty (graph *g, int n) { vertex v1, v2; for (v1=0; v1<n; v1++) for (v2=0; v2<n; v2++) (*g)[v1][v2] = FALSE; Έλεγχος ύπαρξης ακµής bool isadjacent (graph g, vertex v1, vertex v2) { return g[v1][v2]; 12

Πίνακας γειτονικών κορυφών (iv) Προσθήκη ακµής void join (graph *g, vertex v1, vertex v2) { (*g)[v1][v2] = TRUE; Αφαίρεση ακµής void remove (graph *g, vertex v1, vertex v2) { (*g)[v1][v2] = FALSE; 13

Λίστα γειτονικών κορυφών Τρόπος αναπαράστασης Έστω ο γράφος G = (V, E) και n = V Ο γράφος G αναπαρίσταται µε έναν πίνακα a διάστασης n τα στοιχεία του οποίου είναι γραµµικές λίστες που περιέχουν κορυφές η λίστα a[i] περιέχει την κορυφή j αν και µόνο αν (v i, v j ) E a[0] a[1] a[2] a[3] (i) v 0 v 1 v 3 v 2 2 3 2 2 14

Λίστα γειτονικών κορυφών (ii) Τύπος κορυφής typedef unsigned vertex; Ορισµός τύπου graph typedef struct node_tag { vertex v; struct node_tag * next; node, * graph[]; 15

Λίστα γειτονικών κορυφών (iii) Κενός γράφος void empty (graph *g, int n) { vertex v; *g = malloc(n * sizeof(node *)); if (*g == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); for (v=0; v<n; v++) (*g)[v] = NULL; 16

Λίστα γειτονικών κορυφών (iv) Έλεγχος ύπαρξης ακµής bool isadjacent (graph g, vertex v1, vertex v2) { node * n; for (n=g[v1]; n!= NULL; n=n->next) if (n->v == v2) return TRUE; return FALSE; 17

Λίστα γειτονικών κορυφών (v) Προσθήκη ακµής void join (graph *g, vertex v1, vertex v2) { node * new = malloc(sizeof(node)); if (new == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); new->v = v2; new->next = (*g)[v1]; (*g)[v1] = new; 18

Λίστα γειτονικών κορυφών (vi) Αφαίρεση ακµής void remove (graph *g, vertex v1, vertex v2) { node ** temp = &((*g)[v1]); while (*temp!= NULL) if ((*temp)->v == v2) { node * del = *temp; *temp = (*temp)->next; free(del); else temp = &((*temp)->next); 19

ιάσχιση γράφων (i) Κατά βάθος ξεκινώντας από την κορυφή 0: 1 0 4 0, 1, 2, 6, 3, 4, 5, 7 Κατά πλάτος 2 3 5 7 ξεκινώντας από την κορυφή 0: 6 0, 1, 4, 2, 3, 5, 7, 6 20

ιάσχιση γράφων (ii) Υλοποίηση διάσχισης κατά βάθος σε παράσταση λίστας γειτονικών κορυφών void traversedfs (graph g) { bool visited[n]; vertex v; for (v=0; v<n; v++) visited[v] = false; traversedfs_aux(g, visited, 0); 21

ιάσχιση γράφων (iii) void traversedfs_aux (graph g, bool visited[n], vertex current) { node * adj; printf("vertex %d\n", current); visited[current] = true; for (adj = g[current]; adj!= NULL; adj = adj->next) if (!visited[adj->vertex]) traversedfs_aux(g, visited, adj->vertex); 22

ιάσχιση γράφων (iv) Υλοποίηση διάσχισης κατά πλάτος σε παράσταση λίστας γειτονικών κορυφών void traversebfs (graph g) { node * adj; bool visited[n]; queue q; vertex v; for (v=0; v<n; v++) visited[v] = false; q = queueempty; queueinsert(&q, 0); 23

ιάσχιση γράφων (v) while (!queueisempty(q)) { vertex current = queueremove(&q); printf("vertex %d\n", current); visited[current] = true; for (adj = g[current]; adj!= NULL; adj = adj->next) if (!visited[adj->vertex]) queueinsert(&q, adj->vertex); 24