Data Science & Engineering Lab Θεωρία & Αλγόριθμοι Γράφων Συντομότερα μονοπάτια Dijkstra, Bellman-Ford, Johnson, Floyd, Warshall Data Science & Engineering Lab
Data Science & Engineering Lab Συντομότερα μονοπάτια Σε μη ζυγισμένο γράφο τα συντομότερα μονοπάτια βρίσκονται με διάσχιση BFS Αλγόριθμοι για ζυγισμένους γράφους Dijkstra (1-to-all, χωρίς αρνητικά βάρη) Bellman-Ford (1-to-all, με αρνητικά βάρη) Johnson (all-to-all, με αρνητικά βάρη) Floyd (all-to-all) Warshall (μεταβατική κλειστότητα) Data Science & Engineering Lab
Data Science & Engineering Lab Edger Wybe Dijkstra 1930, Rotterdam – 2002, Nuenen Έλαβε το Turing Award το 1972 Schlumberger Centennial Chair of Computer Sciences στο University of Texas at Austin (1984-2000) Δημοσίευσε εναντίον της χρήσης της εντολής GOTO στις γλώσσες προγραμματισμού και συντέλεσε στην απαξίωσή της Edsger Dijkstra: “Go To Statement Considered Harmful“, CACM, Vol.11, No.3, pp.147–148, 1968. Συνέγραψε πολλές εργασίες σχετικά με τον προγραμματισμό "Computer Science is no more about computers than astronomy is about telescopes" Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra (1956, 1959) Προσέγγιση: Άπληστη Είσοδος: ζυγισμένος γράφος G={E,V} και κορυφή v∈V, με μη αρνητικά βάρη Έξοδος: τα συντομότερα μονοπάτια (ή τα ίδια τα συντομότερα μονοπάτια) από την κορυφή v∈V προς όλες τις άλλες κορυφές (1-to-all) Ο ίδιος βασικά αλγόριθμος με λίστες προτάθηκε από τους Leyzorek et al. (1957). Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - ψευδοκώδικας Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - ψευδοκώδικας Ψευδοκώδικας εύρεσης μονοπατιού Data Science & Engineering Lab
Aλγόριθμος Dijkstra - ψευδοκώδικας Χρήση ουράς προτεραιότητας Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Aλγόριθμος Dijkstra - animation Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Dijkstra – πολυπλοκότητα H υλοποίηση του Dijkstra χρησιμοποιούσε πίνακες (1956) και συνδεδεμένες λίστες (1959). Με σειριακή αναζήτηση σε πίνακες ή λίστες προκύπτει κόστος O(n2) Για αραιούς γράφους με χρήση συνδεδεμένων λιστών και δυαδικό σωρό προκύπτει O((m+n)∙logn) σωρό Fibonacci προκύπτει O(m+n∙logn) Data Science & Engineering Lab
Data Science & Engineering Lab Bellman-Ford (wiki) Richard Ernest Bellman (1920, NY -1984, LA). He was awarded the IEEE Medal of Honor "for contribu- tions to decision processes and control system theory, particularly the creation and application of dynamic programming“ (1979). His key work is the Bellman equation. He coined the term “curse of dimensionality”. The Bellman Prize in Mathematical Biosciences was created in his honor (1985). Lester Randolph Ford Jr. (1927, Houston). He spe- cialized in network flow problems. Ford's paper with Fulkerson on the maximum flow problem and the Ford- Fulkerson algorithm, published as a technical report in 1954 and in a journal in 1956, established the max-flow min-cut theorem. Ford also developed the Bellman-Ford algorithm for finding shortest paths in graphs that have negatively weighted edges before Bellman. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford Προσέγγιση: Δυναμικός προγραμματισμός Είσοδος: ζυγισμένος γράφος G={E,V} και κορυφή v∈V, με αρνητικά βάρη, χωρίς αρνητικούς κύκλους Έξοδος: τα συντομότερα μονοπάτια (ή τα ίδια τα συντομότερα μονοπάτια) από την κορυφή v∈V προς όλες τις άλλες κορυφές (1-to-all) ή η ένδειξη ότι ότι υπάρχει αρνητικός κύκλος O αλγόριθμος αρχικά προτάθηκε από τον Alfonso Shimbel (1955) αλλά πήρε το όνομα των Richard Bellman και Lester Ford που τον δημοσίευσαν ανεξάρτητα το 1958 και το 1956 αντιστοίχως. Ο Edward Moore επίσης δημοσίευσε τον ίδιο αλγόριθμο το 1957 και για αυτό το λόγο ονομάζεται και αλγόριθμος Bellman-Ford-Moore. Data Science & Engineering Lab
Αλγόριθμος Bellman-Ford - ψευδοκώδικας Πως υλοποιείται ο εσωτερικός βρόχος? Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - animation 6 7 9 2 5 -2 8 -3 -4 s t x y z Σε κάθε πέρασμα εξετάζονται οι ακμές με τη σειρά: (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - animation 6 7 9 2 5 -2 8 -3 -4 s t x y z Σε κάθε πέρασμα εξετάζονται οι ακμές με τη σειρά: (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - animation 6 7 9 2 5 -2 8 -3 -4 4 s t x y z Σε κάθε πέρασμα εξετάζονται οι ακμές με τη σειρά: (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - animation 6 7 9 2 5 -2 8 -3 -4 4 s t x y z Σε κάθε πέρασμα εξετάζονται οι ακμές με τη σειρά: (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - animation 6 7 9 2 5 -2 8 -3 -4 4 s t x y z vertex: s u v x y distance: 2 4 7 -2 predecessor: null Σε κάθε πέρασμα εξετάζονται οι ακμές με τη σειρά: (t,x), (t,y), (t,z), (x,t), (y,x), (y,z), (z,x), (z,s), (s,t), (s,y) Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 6 7 8 -2 1 2 9 5 -8 v1 v3 v4 v5 v6 v7 v8 5 Οι γαλάζιες ακμές δημιουργούν έναν αρνητικό κύκλο Θα εξετασθούν οι κορυφές κατά την αρίθμησή τους Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=1 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 6 16 v5 2 5 -8 v7 9 1 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=2 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 5 15 v5 2 5 -8 v7 8 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=3 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 4 14 v5 2 5 -8 v7 7 -1 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=4 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 3 13 v5 2 5 -8 v7 6 -2 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=5 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 2 12 v5 2 5 -8 v7 5 -3 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=6 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 1 11 v5 2 5 -8 v7 4 -4 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=7 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 10 v5 2 5 Τέλος διπλού βρόχου -8 v7 3 -5 v8 Με έντονο βέλος συμβολίζεται ο predecessor Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα Bellman-Ford – αρνητικοί κύκλοι v2 5 i=8 v3 6 11 6 -2 1 v1 8 7 12 v4 7 9 2 v6 -1 9 v5 2 5 -8 v7 2 -6 v8 Οι καφέ κόμβοι άλλαξαν τιμές υπάρχει κύκλος Data Science & Engineering Lab
Data Science & Engineering Lab Σχόλια για αλγόριθμο Bellman-Ford Η απόσταση για κάποια κορυφή μπορεί να αλλάξει περισσότερο από 1 φορά σε κάθε πέρασμα. Μπορεί ο αλγόριθμος να συγκλίνει σε λιγότερο από n-1 περάσματα. Μπορεί να τερματισθεί νωρίτερα με μία λογική σημαία (σαν bubblesort). Μία άλλη υλοποίηση στον εσωτερικό βρόχο θεωρεί με τη σειρά τις κορυφές και για κάθε μία λαμβάνει τις ακμές που ξεκινούν από αυτήν. Ανεξαρτήτως υλοποίησης η σύγκλιση εξαρτάται από τη σειρά θεώρησης των κορυφών ή των ακμών αλλά η πολυπλοκότητα δεν αλλάζει. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Bellman-Ford - πολυπλοκότητα O(n) O(n∙m) O(m) Η πολυπλοκότητα του αλγορίθμου Bellman-Ford είναι O(n∙m) Data Science & Engineering Lab
Άσκηση - Αλγόριθμος Bellman-Ford τις ακμές με τη σειρά (S,A),(S,G),(A,E),(B,A), (B,C),(C,D),(D,E), (E,B),(F,A), (F,E),(G,F) τις κορυφές με τη σειρά S, G, F, E, D, C, B, A
Data Science & Engineering Lab Donald Johnson (wiki) Donald Bruce Johnson (1933-1994) was a researcher in the design and analysis of algorithms. Johnson received his Ph.D. from Cornell University in 1973 under the supervision of David Gries. He took a faculty position in the CS department at Penn State University, and later moved to the department of mathematics at Dartmouth. When the Dartmouth CS department was founded in 1994, he became its first chair. Johnson invented the d-ary heap data structure, and is also known for Johnson's algorithm for the all-pairs shortest path problem. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Johnson - κίνητρο Για να υπολογίσουμε τα συντομότερα μονοπάτια all-to-all, μπορούμε να τρέξουμε n φορές τον αλγόριθμο Dijkstra που δεν δέχεται ακμές με αρνητικά βάρη και είναι Ο[(m+n)∙logn] τον αλγόριθμο Bellman-Ford που δέχεται ακμές με αρνητικά βάρη και είναι Ο(n∙m) Αν δίνεται ένας αραιός γράφος, τότε οι πολυπλοκότητες είναι Ο(n∙logn) και O(n2). Άρα, ο Dijkstra προτιμητέος. Αν ο αραιός γράφος έχει ακμές με αρνητικό βάρος, τότε ο Dijkstra απαγορευτικός. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Johnson (1977) Ο αλγόριθμος Johnson αποτελείται από τα εξής βήματα: Δημιουργείται ένας νέος κόμβος q και συνδέεται με όλους του κόμβους με ακμές βάρους 0. Χρησιμοποιείται ο αλγόριθμος Bellman-Ford για την εύρεση του μήκους συντομότερου μονοπατιού h(v) κάθε κόμβου v από τον κόμβο q. Οι ακμές του γράφου λαμβάνουν νέα βάρη ως εξής: το νέο βάρος μίας ακμής από τον κόμβο u προς τον κόμβο v και με βάρος w(u,v), ισούται με w(u,v)+h(u)−h(v) Ο κόμβος q διαγράφεται και χρησιμοποιείται ο αλγόρι- θμος Dijkstra για την εύρεση όλων των συντομότερων μονοπατιών (all-to-all). Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα - αλγόριθμος Johnson Ο γράφος έχει αρνητικές ακμές αλλά όχι αρνητικούς κύκλους. Βήμα 1ο. Εισάγουμε τον κόμβο q και τον ενώνουμε με όλους τους κόμβους με ακμές βάρους 0. 2 1 4 3 8 -5 -4 6 7 v1 v2 v3 v4 v5 q Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα - αλγόριθμος Johnson Βήμα 2ο. Τρέχουμε τον αλγόριθμο Bellman-Ford και βρίσκουμε το μήκος των συντομότερων μονοπατιών του κόμβου q από κάθε κόμβο. -1 -5 -4 2 1 4 3 8 6 7 v1 v2 v3 v4 v5 Data Science & Engineering Lab
Data Science & Engineering Lab Παράδειγμα - αλγόριθμος Johnson 2 4 13 10 v1 v2 v3 v4 v5 Βήμα 3ο. Υπολογίζουμε τα νέα βάρη των ακμών που πλέον δεν είναι αρνητικά. Βήμα 4ο. Τρέχουμε τον αλγόριθμο Dijkstra για κάθε κόμβο. Ποιά είναι η πολυπλοκότητα του αλγορίθμου Johnson? Data Science & Engineering Lab
Data Science & Engineering Lab Διατήρηση μονοπατιών Αλλάζουν τα βάρη των ακμών, όχι όμως τα συντομότερα μονοπάτια. Στους δύο γράφους: ποιό είναι το συντομότερο μονοπάτι από τον v1 στον v2 ? ποιό είναι το συντομότερο μονοπάτι από τον v2 στον v5 ? 2 1 4 3 8 -5 -4 6 7 v1 v2 v3 v4 v5 2 4 13 10 v1 v2 v3 v4 v5 Data Science & Engineering Lab
Data Science & Engineering Lab Συντομότερα μονοπάτια σε DAG Ο κατευθυνόμενος άκυκλος γράφος ονομάζεται DAG (directed acyclic graph) Η εύρεση συντομότερων μονοπατιών σε DAG μπορεί να γίνει με Bellman-Ford. Η τοπολογική ταξινόμηση-topological sorting τοποθετεί τους κόμβους ενός DAG επί ευθείας ώστε όλες οι ακμές να έχουν κοινή κατεύθυνση (από αριστερά προς τα δεξιά). Tα συντομότερα μονοπάτια σε ένα DAG μπορούν να βρεθούν με ένα πέρασμα λαμβάνοντας στη σειρά τους κόμβους της τοπολογικής ταξινόμησης. Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 4 3 2 Δίνεται η τοπολογική ταξινόμηση. Ζητούνται τα συντομότερα μονοπάτια από τον κόμβο s. Αρχικοποίηση: μήκος συντομότερου μονοπατιού 0 για τον s και ∞ για τους υπόλοιπους. Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 4 3 2 Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 2 6 4 3 2 Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 2 6 6 4 4 3 2 Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 2 6 5 4 4 3 2 Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 2 6 5 3 4 3 2 Data Science & Engineering Lab
Data Science & Engineering Lab Μονοπάτια σε DAG - animation 6 1 u r s t v w 5 2 7 –1 –2 2 6 5 3 4 3 2 Ποιά είναι η πολυπλοκότητα ? Data Science & Engineering Lab
Data Science & Engineering Lab Robert Floyd (wiki) Robert (Bob) Floyd (1936–2001) Turing award 1978 His contributions include Floyd-Warshal algorithm, which efficiently finds all shortest paths in a graph, Floyd’s cycle-finding algorithm for detecting cycles in a sequence, and his work on parsing. the important concept of error diffusion for rendering images, also called Floyd-Steinberg dithering (though he distinguished dithering from diffusion). pioneering the field of program verification using logical assertions with the 1967 paper Assigning Meanings to Programs. This was an important contribution to what later became Hoare logic. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd (1962) Προσέγγιση: Δυναμικός προγραμματισμός Είσοδος: ζυγισμένος γράφος G={E,V} και κορυφή v∈V, με αρνητικά βάρη αλλά όχι αρνητικούς κύκλους Έξοδος: τα συντομότερα μονοπάτια (ή τα ίδια τα συντομότερα μονοπάτια) από όλες τις κορυφές προς όλες τις άλλες κορυφές (all-to-all). Ο αλγόριθμος Floyd δημοσιεύθηκε το 1962. Ωστόσο, ήταν βασικά ίδιος με έναν αλγόριθμο του Bernard Roy (1959) και με έναν αλγόριθμο του Stephen Warshall (1962) για την εύρεση της μεταβατικής κλειστότητας. Η υλοποίηση του αλγορίθμου με ένα τριπλό βρόχο περιγράφηλε από τον Peter Ingerman (1962). Ο αλγόριθμος είναι γνωστός και ως Floyd- Warshall, Roy–Warshall ή Roy–Floyd ή ως WFI αλγόριθμος. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd - ψευδοκώδικας Πολυπλοκότητα O(n3) Ποιά είναι η διαφορά από τον αλγόριθμο του Dijkstra ? Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd - παράδειγμα 5 ∞ 2 3 7 4 1 Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd – παράδειγμα (2) Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd - ψευδοκώδικας Πολυπλοκότητα ? Εύρεση μονοπατιών Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Floyd – αρνητικοί κύκλοι Μπορεί ο αλγόριθμος Floyd να χειριστεί ακμές με αρνητικά βάρη και αρνητικούς κύκλους? Μπορεί να χειριστεί ακμές με αρνητικές τιμές. Αν υπάρχει αρνητικός κύκλος, τότε το κλειστό μονοπάτι (i, …, i) θα έχει αρνητική τιμή αν και θα έπρεπε να έχει 0. Συνεπώς, αν στο τέλος του αλγορίθμου ο πίνακας dist περιέχει αρνητικές τιμές στην διαγώνιο, αυτό σημαίνει ότι υπάρχει αρνητικός κύκλος και συνεπώς δεν έχει νόημα η εύρεση συντομότερων μονοπάτιων στο γράφο. Data Science & Engineering Lab
Data Science & Engineering Lab Steven Warshall Stephen Warshall (1935 NY – 2006, Gloucester/MA). He carried out research and development in operating systems, compiler design, language design and operations research. There is an interesting anecdote about his proof that the transitive closure algorithm is correct. He and a colleague at Technical Operations bet a bottle of rum on who first could determine whether this algorithm always works. Warshall came up with his proof overnight, winning the bet and the rum, which he shared with the loser of the bet. Because Warshall did not like sitting at a desk, he did much of his creative work in unconventional places such as on a sailboat in the Indian Ocean or in a Greek lemon orchard. Data Science & Engineering Lab
Data Science & Engineering Lab Αλγόριθμος Warshall Προσέγγιση: άπληστη μέθοδος Είσοδος: συνδεδεμένος γράφος G={E,V} και ο πίνακας γειτνίασής του Έξοδος: πίνακας που δίνει τη μεταβατική κλειστότητα (transitive closure) Data Science & Engineering Lab
Data Science & Engineering Lab Μεταβατική κλειστότητα - παράδειγμα Ενώνονται όλες οι κορυφές για τις οποίες υπάρχει μονοπάτι μεταξύ τους Εφαρμόζεται σε κατευθυνόμενους και μη κατευθυνόμενους γράφους Data Science & Engineering Lab
Data Science & Engineering Lab Μεταβατική κλειστότητα - παράδειγμα Δίνεται ο επόμενος γράφος με πίνακα γειτνίασης Α Ο πίνακας C μπορεί να προκύψει με διαδοχικούς πολλαπλασιασμούς του πίνακα Α Αν ο πολλαπλασιασμός γίνει με «λογικό» τρόπο, τότε ο πίνακας C δίνει την προσβασιμότητα (reachability), αλλιώς δίνει το πλήθος μονοπατιών Data Science & Engineering Lab