Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Γράφοι – Graphs (Εισαγωγή)

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Γράφοι – Graphs (Εισαγωγή)"— Μεταγράφημα παρουσίασης:

1 Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Γράφοι – Graphs (Εισαγωγή)

2 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 11-2 Γράφοι Ένα γράφος αποτελείται από ένα σύνολο V κορυφών (vertices), ή σημείων, ή κόμβων, και ένα σύνολο Ε ακμών (edges). Παράδειγμα γράφου:

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

4 Ορισμοί Ένας γράφος ονομάζεται κατευθυνόμενος (directed graph, digraph) αν κάθε μια από τις ακμές του είναι προσανατολισμένη προς μία κατεύθυνση. Ένας γράφος ονομάζεται μη-κατευθυνόμενος (undirected) αν οι ακμές του δεν είναι προσανατολισμένες. Ένας μη κατευθυνόμενος γράφος λέγεται συνεκτικός (connected) αν για κάθε ζευγάρι κορυφών υπάρχει διαδρομή που τις συνδέει. Διδάσκων: Παύλος Παυλικκάς4

5 Πίνακας γειτνίασης - adjacency matrix Ένας γράφος με n κορυφές μπορεί να αναπαρασταθεί με έναν πίνακα nxn όπου θα έχει τον αριθμό 1 στις θέσεις που συνδέεται ο κόμβος i με τον κόμβος j διαφορετικά θα έχει τον αριθμό 0. Σε περίπτωση που ο γράφος είναι με βάρη τότε στη θέση του αριθμού 1 θα υπάρχει το βάρος Διδάσκων: Παύλος Παυλικκάς5

6 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 11-6 Πίνακας γειτνίασης - adjacency matrix ΓράφοςΠίνακας Γειτνίασης Το πλεονέκτημα του πίνακα γειτνίασης είναι ότι έχει τις ευκολίες που παρέχει ένας πίνακας όσο αφορά την προσπέλαση του. Το μειονέκτημα του είναι ότι για μεγάλους γράφους χρειαζόμαστε τεράστιους πίνακες το μεγαλύτερο μέρος των οποίων έχει αποθηκευμένες άχρηστες πληροφορίες (0). Όπως φαίνεται θα μπορούσαμε να χρησιμοποιήσουμε μια άλλη δομή δεδομένων. 0 1 2 3 4 4 3 2 1 0 1 43210 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

7 ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 11-7 Λίστες Γειτνίασης Γράφος Λίστα Γειτνίασης 0 1 2 3 4 0 1 2 3 4 23 2 3 4 1

8 Παράδειγμα 1 Σε μια χώρα υπάρχουν 10 πόλεις που συνδέονται μεταξύ τους. Μέσα στο αρχείο par1.in υπάρχουν οι συνδέσεις μεταξύ των πόλεων. Να δημιουργήσετε το πρόγραμμα που τυπώνει τον πίνακα γειτνίασης στο αρχείο par1.out Διδάσκων: Παύλος Παυλικκάς8

9 9 1 2 3 4 5 6 0 7 8 9

10 Παράδειγμα 1 #include using namespace std; int adj[10][10]; int main(){ int a,b,i,j; ifstream fin ("par1.in"); ofstream fout("par1.out"); for(i=0;i<10;i++) for(j=0;j<10;j++) adj[i][j]=0; while(!fin.eof()){ fin>>a>>b; adj[a][b]=1; } for(i=0;i<10;i++){ for(j=0;j<10;j++) fout<<adj[i][j]<<" "; fout<<"\n"; } fin.close(); fout.close(); return 0; } Διδάσκων: Παύλος Παυλικκάς10

11 Παράδειγμα 1 Διδάσκων: Παύλος Παυλικκάς11

12 Παράδειγμα 2 Το ίδιο παράδειγμα να λυθεί με λίστες γειτνίασης. Σημείωση: Στη λύση που ακολουθεί χρησιμοποιώ vectors για να υλοποιήσω τις λίστες γειτνίασης Διδάσκων: Παύλος Παυλικκάς12

13 Παράδειγμα 2 #include using namespace std; vector > adj; int main(){ int a,b,i,j; ifstream fin ("par1.in"); ofstream fout("par1.out"); for(i=0;i<10;i++) adj.push_back(vector ()); while(!fin.eof()){ fin>>a>>b; adj[a].push_back(b); } for(i=0;i<10;i++){ fout<<i<<":"; for(j=0;j<adj[i].size();j++) fout<<adj[i][j]<<" "; fout<<"\n"; } fin.close(); fout.close(); return 0; } Διδάσκων: Παύλος Παυλικκάς13

14 Παράδειγμα 2 Διδάσκων: Παύλος Παυλικκάς14


Κατέβασμα ppt "Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Γράφοι – Graphs (Εισαγωγή)"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google