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



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

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

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

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

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

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

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

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

Ελαφρύτατες διαδρομές

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

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

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

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

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

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

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

1 Το πρόβλημα της συντομότερης διαδρομής

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

Κατανεμημένα Συστήματα Ι

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

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

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

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

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

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

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

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

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

Σχεδίαση & Ανάλυση Αλγορίθμων

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

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

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

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

Τομές Γραφήματος. Γράφημα (μη κατευθυνόμενο) Συνάρτηση βάρους ακμών. Τομή : Διαμέριση του συνόλου των κόμβων σε δύο μη κενά σύνολα

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

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

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

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

Συντομότερα Μονοπάτια για Όλα τα Ζεύγη Κορυφών

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

3η Σειρά Γραπτών Ασκήσεων

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Πρόβλημα συντομότερης διαδρομής - Shortest path problem. Κηρυττόπουλος Κωνσταντίνος Επ. Καθηγητής ΕΜΠ

Μέγιστη Ροή Ελάχιστη Τομή

Graph Algorithms. Παρουσίαση στα πλαίσια του μαθήματος «Παράλληλοι Αλγόριθμοι» Καούρη Γεωργία Μήτσου Βάλια

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

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

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Αλγόριθμοι εύρεσης ελάχιστων γεννητικών δέντρων (MST)

Αλγόριθμοι και πολυπλοκότητα Τα συντομότερα μονοπάτια(shortest Paths)

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

ΔΙΑΧΕΙΡΙΣΗ ΕΦΟΔΙΑΣΤΙΚΗΣ ΑΛΥΣΙΔΑΣ

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

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

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

Κεφάλαιο 4. Αλγόριθμος του Dijkstra. Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

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

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

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

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

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)

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

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

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

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 7 Φεβρουαρίου 2017 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 7 Φεβρουαρίου / 38

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

4η Γραπτή Ασκηση Αλγόριθμοι και Πολυπλοκότητα CoReLab ΣΗΜΜΥ 3/2/2019 CoReLab (ΣΗΜΜΥ) 4η Γραπτή Ασκηση 3/2/ / 37

(elementary graph algorithms)

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

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

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

ΑΣΚΗΣΗ 1 Για τις ερωτήσεις 1-4 θεωρήσατε τον ακόλουθο γράφο. Ποιές από τις παρακάτω προτάσεις αληθεύουν και ποιές όχι;

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

(elementary graph algorithms)

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

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

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

Γ. Κορίλη Αλγόριθµοι ροµολόγησης

Θεωρία Γραφημάτων 6η Διάλεξη

3η Σειρά Γραπτών Ασκήσεων

έντρα ιδάσκοντες:. Φωτάκης,. Σούλιου Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Ουρά Προτεραιότητας (priority queue)

Αλγόριθμοι Eλάχιστα μονοπάτια

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Διακριτά Μαθηματικά. Ενότητα 3: Δένδρα

Κατανεμημένα Συστήματα Ι

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

Συνεκτικότητα Γραφήματος

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

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

1 Διάσχιση κατευθυνόμενων γραφημάτων

Θεωρία Γραφημάτων και Εφαρμογές - Διακριτά Μαθηματικά ΙΙ Σεπτέμβριος 2017

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

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

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Διαπεράσεις Μη Κατευθυνόμενων Γραφημάτων

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

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

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

Transcript:

Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 18 Dijkstra s Shortest Path Algorithm 1 / 12

Ο αλγόριθμος εύρεσης της συντομότερης διαδρομής του Dijkstra Ο αλγόριθμος δέχεται ως είσοδο ένα γράφημα G = (V, E) (κατευθυνόμενο ή μη) και μια κορυφή του γραφήματος s η οποία αποτελεί την αφετηρία Υπολογίζει για όλες τις κορυφές v V το μήκος του συντομότερου μονοπατιού από το s στο v Προϋπόθεση λειτουργίας του αλγορίθμου Κάθε ακμή θα πρέπει να έχει μη αρνητικό βάρος Αν το γράφημα περιέχει ακμές με αρνητικό βάρος τότε μπορεί να χρησιμοποιηθεί ο αλγόριθμος των Bellman-Ford Αρχικά βρίσκεται η πλησιέστερη κορυφή προς την αφετηρία s και στη συνέχεια η δεύτερη πλησιέστερη, η τρίτη πλησιέστερη κοκ 2 / 12

Περιγραφή του αλγορίθμου 1 Ο αλγόριθμος εντοπίζει τις συντομότερες διαδρομές προς τις κορυφές του γραφήματος σε σειρά απόστασης από την κορυφή αφετηρία 2 Σε κάθε βήμα του αλγορίθμου η αφετηρία και οι ακμές προς τις κορυφές για τις οποίες έχει ήδη βρεθεί συντομότερο μονοπάτι σχηματίζουν το υποδένδρο S του γραφήματος 3 Οι κορυφές που είναι προσπελάσιμες με 1 ακμή από το υποδένδρο S είναι υποψήφιες να αποτελέσουν την επόμενη κορυφή που θα εισέλθει στο υποδένδρο Επιλέγεται μεταξύ τους η κορυφή που βρίσκεται στη μικρότερη απόσταση από την αφετηρία 4 Για κάθε υποψήφια κορυφή u υπολογίζεται το άθροισμα της απόστασής της από την πλησιέστερη κορυφή v του δένδρου συν το μήκος της συντομότερης διαδρομής από την αφετηρία s προς την κορυφή v Στη συνέχεια επιλέγεται η κορυφή με το μικρότερο άθροισμα 5 Όταν επιλεγεί η κορυφή που πρόκειται να προστεθεί στο δένδρο τότε προστίθεται στο σύνολο των κορυφών που απαρτίζουν το υποδένδρο S και για κάθε μία από τις υποψήφιες κορυφές που συνδέονται με μια ακμή με την κορυφή που επιλέχθηκε ενημερώνεται η απόστασή της από το υποδένδρο εφόσον προκύψει μικρότερη τιμή 3 / 12

Ψευδοκώδικας Το σύνολο S περιέχει τις κορυφές για τις οποίες έχει προσδιοριστεί η συντομότερη διαδρομή από την κορυφή s ενώ το διάνυσμα d περιέχει τις αποστάσεις από την κορυφή s Αρχικά S = {s}, d s = 0 και για όλες τις κορυφές i s, d i = + Μέχρι να γίνει S = V Εντοπισμός του στοιχείου v / S με τη μικρότερη τιμή d v και προσθήκη του στο S Για κάθε ακμή από την κορυφή v στη κορυφή u με βάρος w ενημερώνεται η τιμή d u έτσι ώστε d u = min(d u, d v + w) 4 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου Δεδομένα γραφήματος 1 2,2 6,3 2 2,1 3,3 1,4 3 6,1 3,2 4,4 3,5 4 1,2 4,3 2,5 10,6 5 3,3 2,4 5,6 6 10,4 5,5 S = {1} d 1 = 0 d 2 = + d 3 = + d 4 = + d 5 = + d 6 = + 5 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου (συνέχεια) Από το S μπορούμε να φτάσουμε στις κορυφές 2 και 3 με μήκος διαδρομής 2 και 6 αντίστοιχα Επιλέγεται η κορυφή 2 Το σύνολο S και οι αποστάσεις d ενημερώνονται S = {1, 2} d 1 = 0 d 2 = 2 d 3 = 5 ενημερώθηκε d 4 = 3 ενημερώθηκε d 5 = + d 6 = + 6 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου (συνέχεια) Το σύνολο S και οι αποστάσεις d ενημερώνονται Από το S μπορούμε να φτάσουμε στις κορυφές 3 και 4 με μήκος διαδρομής 5 και 3 αντίστοιχα Επιλέγεται η κορυφή 4 S = {1, 2, 4} d 1 = 0 d 2 = 2 d 3 = 5 d 4 = 3 d 5 = 5 ενημερώθηκε d 6 = 13 ενημερώθηκε 7 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου (συνέχεια) Από το S μπορούμε να φτάσουμε στις κορυφές 3, 5 και 6 με μήκος διαδρομής 5, 5 και 13 αντίστοιχα Επιλέγεται (με τυχαίο τρόπο) ανάμεσα στις κορυφές 3 και 5 η κορυφή 3 Το σύνολο S και οι αποστάσεις d ενημερώνονται S = {1, 2, 4, 3} d 1 = 0 d 2 = 2 d 3 = 5 d 4 = 3 d 5 = 5 8 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου (συνέχεια) Από το S μπορούμε να φτάσουμε στις κορυφές 5 και 6 με μήκος διαδρομής 5 και 13 αντίστοιχα Επιλέγεται η κορυφή 5 Το σύνολο S και οι αποστάσεις d ενημερώνονται S = {1, 2, 4, 3, 5} d 1 = 0 d 2 = 2 d 3 = 5 d 4 = 3 d 5 = 5 9 / 12

Παράδειγμα εκτέλεσης του αλγορίθμου (συνέχεια) Το σύνολο S και οι αποστάσεις d ενημερώνονται Η μοναδική κορυφή στην οποία μένει να φτάσουμε από το S είναι η κορυφή 6 και το μήκος διαδρομής της συντομότερης διαδρομής από την 1 στην 6 είναι 10 S = {1, 2, 4, 3, 5, 6} d 1 = 0 d 2 = 2 d 3 = 5 d 4 = 3 d 5 = 5 d 6 = 10 10 / 12

Μια απλή υλοποίηση του αλγορίθμου σε C++ void compute_shortest_paths_to_all_vertices(list<pair<int, int >>* g, int V, int source, int * distance) { list <int> S; set<int> V_S; for ( int i = 1; i <= V; i++) if ( i == source) {Spush_back(i); distance[ i ] = 0;} else {V_Sinsert( i ) ; distance[ i ] = INT_MAX;} while (! V_Sempty()) { int min = INT_MAX, pmin = 1; for ( int v1 : S) { for (pair<int, int > w_v : g[v1]) { int weight = w_v first, v2 = w_vsecond; bool is_in_v_s = V_Sfind(v2)!= V_Send(); if ((is_in_v_s) && (distance[v1] + weight < min)) { min = distance[v1] + weight; pmin = v2; } } } distance[pmin]=min; Spush_back(pmin); V_Serase(pmin); } } 11 / 12

Η απόδοση του αλγορίθμου Η ταχύτητα εκτέλεσης του αλγορίθμου εξαρτάται από τις δομές δεδομένων που χρησιμοποιούνται για να αναπαρασταθεί το γράφημα και από τη χρήση ουράς προτεραιότητας έτσι ώστε να επιταχυνθούν οι διαγραφές στοιχείων από τις κορυφές που δεν έχουν εισαχθεί στο δένδρο ακόμη Πρόκειται για ένα εξαιρετικά γρήγορο αλγόριθμο (εφόσον υλοποιηθεί κατάλληλα) με πολυπλοκότητα χειρότερης περίπτωσης O( E log V ) 12 / 12