Σχεδίαση & Ανάλυση Αλγορίθμων Ενότητα 4.2 Διαδρομές σε Γραφήματα Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros
Πρόβλημα Οδικό Δίκτυο
Πρόβλημα Ελάχιστες Διαδρομές από κάποια πόλη
Πρόβλημα 120 km 15 km Ελάχιστες Διαδρομές από την πόλη S S 12 km
Πρόβλημα X 2 6 80 7 120 Ελάχιστες Διαδρομές από την πόλη S 4 8 15 75 5 5 9 12 S d(s,x) = 18
Πρόβλημα X 75 2 4 5 6 80 5 7 8 9 12 15 S 120 Ελάχιστες Διαδρομές από την πόλη S d(s,x) = 18 Y d(s,y) = 12
Πρόβλημα X 75 2 4 5 6 80 5 7 8 9 12 Z 15 S 120 Ελάχιστες Διαδρομές από την πόλη S d(s,x) = 18 Y d(s,y) = 12 d(s,z) = 100
Ελάχιστες Διαδρομές Απλού Ζεύγους Ορισμοί
Ελάχιστες Διαδρομές Απλού Ζεύγους Ορισμοί
Ελάχιστες Διαδρομές Απλού Ζεύγους Παράδειγμα για Συζήτηση
Ελάχιστες Διαδρομές Απλού Ζεύγους Δένδρα Ελάχιστων Αποστάσεων
Ελάχιστες Διαδρομές - Ιδιότητες Βασική Παρατήρηση P ελάχιστη διαδρομή x Q ελάχιστη διαδρομή y y z? P Q είναι ελάχιστη x z x y z 2 2 4
Ελάχιστες Διαδρομές - Ιδιότητες Shortest Path Property Έστω ότι η ελάχιστη διαδρομή x z x z y η οποία αποτελείται από την διαδρομή P: x ακολουθούμενη από την Q: y z y Τότε: P είναι ελάχιστη διαδρομή x Q είναι ελάχιστη διαδρομή y y z
Ελάχιστες Διαδρομές - Ιδιότητες Λήμμα 1 (Υποδιαδρομές από ε.δ είναι ε.δ) Έστω G = (V, E) εμβαρο γράφημα και έστω P = (v 1, v 2,, v n ) μια ε.δ v 1 v n. Έστω Q = (v p, v p+1,, v q ) μια υποδιαδρομή v P v q της ε.δ P. Τότε`η Q είναι ελάχιστη διαδρομή v P v q. v 1 P 1 Q P 2 v p v q v n Q Εάν υπήρχε Q συντομότερη της Q, τότε P δεν θα ήταν ε.δ.
Ελάχιστες Διαδρομές - Ιδιότητες Πόρισμα 1 Έστω ότι η ελάχιστη διαδρομή P=(s,, v) διαμερίζεται Τότε, P P: s u v d(s, v) = d(s, u) + w(u, v) Απόδειξη: Από Λήμμα 1, η διαδρομή P είναι ελάχιστη από το κόμβο s στο κόμβο u. Επομένως, d(s, v) = w(p) = w(p ) + w(u, v) = d(s, u) + w(u, v)
Ελάχιστες Διαδρομές - Ιδιότητες Triangle Property Έστω G = (V, E) ένα εμβαρο γράφημα και έστω s V Τότε, για κάθε ακμή (u, v) E ισχύει: d(s, v) d(s, u) + w(u, v) s 20 u 10 v 8 x 12
Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s BFS-tree s d(s,s)=0 a b BFS d(s,a)=1 a d(s,b)=1 b c d e d d(s,d)=2 c d(s,c)=2 d(s,e)=3 e
Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s s 5 a d 1 2 1 3 2 c 2 1 b e a d c b e
Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγοριθμικές Σκέψεις!!! s a d 1 2 5 1 3 2 c 2 1 b e BFS d(s,a)=1 d()=2 d()=3 d()=4 d()=5 a d d(s,d)=5 BFS-tree s d()=2 d()=6 d(s,s)=0 c d()=1 d()=2 d()=3 b d(s,b)=2 d(s,c)=4 e d(s,e)=5
Ελάχιστες Διαδρομές Απλού Ζεύγους Αλγόριθμος «Αφύπνισης» d(s,s)= 0 s d(s,a)= 1 a b 2 5 6 5 1 d 1 2 3 2 c 2 4 1 e 5 Ρύθμισε ένα ρολόι για τον κόμβο s να χτυπήσει την χρονική στιγμή 0 Επανέλαβε έως ότου χτυπήσουν όλα τα ρολόγια! Έστω ότι το επόμενο ρολόι χτυπά την χρονική στιγμή t για τον κόμβο u, τότε: Η απόσταση του u από τον s είναι d(s, u)=t Για κάθε γείτονα v του u στο G: Εάν δεν αφύπνιση για τον v ή κάποια χρονική στιγμή t > t + w(u,v) τότε ρύθμισε την αφύπνιση του v ίση με t + w(u,v), άλλως μη κάνεις τίποτε!
Ελάχιστες Διαδρομές Απλού Ζεύγους Θα παρουσιάσουμε 2 γνωστούς Αλγορίθμους για το πρόβλημα υπολογισμού των Ελάχιστων Διαδρομών ενός έμβαρου γραφήματος G=(V,E) από ένα κόμβο S. 1. Αλγόριθμος Dijkstra 2. Αλγόριθμος Bellman-Ford
Ελάχιστες Διαδρομές Απλού Ζεύγους Βασικές Ιδιότητες!!! 1. Αλγόριθμος Dijkstra Τα βάρη των ακμών είναι μη-αρνητικοί αριθμοί 2. Αλγόριθμος Bellman-Ford Επιτρέπει αρνητικά βάρη. Εντοπίζει κύκλους αρνητικού βάρους (κόστους)
Ελάχιστες Διαδρομές & Update Αλγοριθμική Ρύθμιση της «Αφύπνισης» d(s, v) = d(v) ή dist(v) Update(u,v,w): if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u d(u) = 5 d(v) = 9 7 d(u) = 5 d(v) = 6 u 2 v u 2 v
Ελάχιστες Διαδρομές - Dijkstra Βασική Ιδέα!!! 1. Αλγόριθμος Dijkstra Επέκταση του Δένδρου Ελάχιστων Αποστάσεων κατά ένα κόμβο!!!!!!! x y s S u v V-S
Ελάχιστες Διαδρομές - Dijkstra 1. Αλγόριθμος Dijkstra Initialize(G,s) 1. για κάθε κόμβο v V: d(v) prev(v) NIL 3 u 1 2. d(s) 0 0 s 2 2 v 8 w
Ελάχιστες Διαδρομές - Dijkstra 1. Αλγόριθμος Dijkstra Dijkstra(G,w,s) 1. 2. 3. Initialize(G,s) S ; Q V = V-S while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w) 4. return d(), prev() 0 s 3 8 if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u 2 3 u w 6 2 1 v 4
Ελάχιστες Διαδρομές - Dijkstra Παράδειγμα
Ελάχιστες Διαδρομές - Dijkstra Παράδειγμα
Ελάχιστες Διαδρομές - Dijkstra Θεώρημα 1 Έστω G = (V, E) εμβαρο γράφημα με μη-αρνητικά βάρη, s V, και έστω (S, V-S) μια διαμέριση του V. Έστω s S και d(s, u) οι ελάχιστες αποστάσεις u S. Εάν (u, v) είναι η ακμή που ελαχιστοποιεί την ποσότητα d(s, u) + w(u, v) μεταξύ όλων των ακμών (x, y) με x S και y V-S, τότε P = (s,, u, v) είναι ε.δ s v. x y s S u v V-S
Ελάχιστες Διαδρομές - Dijkstra Απόδειξη y s S u e v V-S Έστω e = (u, v) και έστω (s,, u) η ελάχιστη διαδρομή από τον s στον u. Για την διαδρομή P = (s,, u, v) από τον s στον v ισχύει: w(p) = d(s,u) + w(e) (1)
Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Έστω Q = (s,, x, y,, v) μια ελάχιστη διαδρομή από τον s στον v, και έστω y ο πρώτος κόμβος της διαδρομής Q : y V-S. Θα δείξουμε ότι w(p) w(q).
Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Από Eq.(1) και από την επιλογή της ακμής e = (u, v), έχουμε: w(p) = d(s,u) + w(e) d(s, x) + w(x, y) (2)
Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Η διαδρομή (s,, x) είναι ελάχιστη με τιμή d(s, x). Από Shortest Path Property, επειδή (s,, x, y) είναι τμήμα (υποδιαδρομή) της ε.δ Q = (s,, x, y,, v) και οι ακμές έχουν μη-αρνητικά βάρη, έχουμε: d(s, x) + w(x, y) w(q) (3)
Ελάχιστες Διαδρομές - Dijkstra Απόδειξη x y s S u e v V-S Από Eq.(2) και Eq.(3), παίρνουμε: w(p) w(q)
Ελάχιστες Διαδρομές - Dijkstra Θεώρημα 2 (Ορθότητα Αλγορίθμου Dijkstra) Έστω G = (V, E) εμβαρο γράφημα με μη-αρνητικά βάρη και έστω s V. Ο αλγόριθμος του Dijkstra υπολογίζει τις ε.δ και τις ε.α d(s, v) από τον κόμβο s V προς κάθε κόμβο v V του G που είναι προσπελάσιμος από τον s. Απόδειξη. Με επαγωγή στην ακολουθία των κόμβων όπως αυτή δημιουργείται από την πρόσθεσή τους στο δένδρο ελάχιστων-διαδρομών. Χρήση Θεωρήματος 1.
Ελάχιστες Διαδρομές - Dijkstra Πολυπλοκότητα Dijkstra Δομικά παρόμοιος με τον αλγόριθμο BFS Πιο αργός από BFS (ουρά προτεραιότητας vs ουράς) Απαιτεί n λειτουργίες insert στην ουρά, και επομένως: n extract-min n+m insert/updata Υλοποίηση ουράς με Heap O((n+m)logn)
Ελάχιστες Διαδρομές - Bellman-Ford Βασική Ιδέα!!! 2. Αλγόριθμος Bellman-Ford!!!!!! s 3 4 a b -2
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Ο αλγόριθμος Dijkstra λειτουργεί διότι η ε.δ s v πρέπει να περάσει αποκλειστικά μέσω κόμβων που είναι πιο κοντά στον s. Αυτό ΔΕΝ ισχύει όταν τα ακμικά βάρη του G μπορεί να είναι αρνητικά. Η ε.δ s a = (s, b, a) περνά μέσω του b που είναι πιο μακριά στον s. s 3 4 a b -2
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Ο αλγόριθμος του Dijkstra δεν λειτουργεί σωστά!!! Θα δώσει λανθασμένα : d(s, a) = 3 Ενώ ισχύει: d(s, a) = 2 s 3 4 a b -2 Τι πρέπει να αλλάξουμε στον Dijkstra?
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μια κρίσιμη παρατήρηση είναι ότι, κατά τη διάρκεια λειτουργίας του Dijkstra, ισχύει: a 3 d(.) είναι είτε υπερεκτιμημένες s -2 είτε σωστές!!! Αρχικοποιούνται d(.)= και αλλάζουν μόνο: Update(u,v,w): if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) 4 b
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μια κρίσιμη παρατήρηση είναι ότι, κατά τη διάρκεια λειτουργίας του Dijkstra, ισχύει: a 3 d(.) είναι είτε υπερεκτιμημένες s -2 είτε σωστές!!! Αρχικοποιούνται d(.)= και αλλάζουν μόνο: Update(u,v,w): d(v) min{d(v), d(u) + w(u,v)} 4 b
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Update(u,v,w): d(v) min{d(v), d(u) + w(u,v)} (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v Όταν η d(v) πάρει σωστή τιμή (την τιμή της ε.δ s v), από εκεί και μετά, όσες φορές και να εφαρμόσουμε την Update(u,v,w), η τιμή της d(v) δεν αλλάζει!!!
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Μπορούμε να θεωρήσουμε τον αλγόριθμο του Dijkstra απλώς ως μια ακολουθία εκτελέσεων της Update() H ακολουθία εκτελέσεων Update() του αλγόριθμου του Dijkstra δεν λειτουργεί σωστά με αρνητικά βάρη!!! Ερώτημα!!! Υπάρχει κάποια άλλη ακολουθία εκτελέσεων της Update() που λειτουργεί σωστά???
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Εάν υπάρχει μια τέτοια ακολουθία εκτελέσεων της Update(), τι ιδιότητες πρέπει να έχει? Έστω s v μια ε.δ u 1 s u 2 u 3 u k v Μια τέτοια διαδρομή σε ένα γράφημα τάξης n έχει το πολύ n-1 ακμές (βλέπετε γιατί?)
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις u 1 s u 2 u 3 u k v Εάν η ακολουθία εκτελέσεων Update() περιλαμβάνει τις ακμές (s,u 1 ),(u 1,u 2 ),(u 2,u 3 ),,(u k,v) με αυτή τη σειρά, τότε λόγω τις (1) η τιμή d(v) θα υπολογιστεί σωστά! (1) Δίνει τη σωστή τιμή στην d(v) (τιμή ε.δ) όταν ο κόμβος u είναι προτελευταίος στην ε.δ s v
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις u 1 s u 2 u 3 u k v Λόγω της (2), στον υπολογισμό της τιμής d(v), δεν παίζει ρόλο ποιες άλλες ενημερώσεις Update() έγιναν σε αυτές τις ακμές (s,u 1 ), (u 1,u 2 ), (u 2,u 3 ),,(u k,v) ή τι συμβαίνει στο υπόλοιπο γράφημα! (2) Δεν θα δώσει ποτέ στην d(v) τιμή μικρότερη από την τιμή της ε.δ s v
Ελάχιστες Διαδρομές - Bellman-Ford Ενδιαφέρουσες Παρατηρήσεις Όμως!!! u 1 s u 2 u 3 u k v ΔΕΝ γνωρίζουμε εκ των προτέρων όλες τις ε.δ του G και, επομένως, ΔΕΝ μπορούμε να είμαστε βέβαιοι ότι ενημερώνουμε, με Update(), τις σωστές ακμές με τη σωστή σειρά!!!
Ελάχιστες Διαδρομές - Bellman-Ford Ορίστε μια Λύση!!!! u 1 s u 2 u 3 u k v Ενημέρωσε, με Update(), ΟΛΛΕΣ τις ακμές n-1 φορές! Η διαδικασία αυτή είναι, απλά, ο γνωστός αλγόριθμος των Bellman-Ford
Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford Initialize(G,s) 1. για κάθε κόμβο v V: 2. d(s) 0 d(v) prev(v) NIL 0 s 3 4 u -2 w 2 1 v
Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford 2 u Bellman-Ford(G,w,s) 3 1 1. Initialize(G,s) 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: 0 s 4-2 w 4 2 v 3 Update(u,v,w) 3. return d(.)
Ελάχιστες Διαδρομές - Bellman-Ford Παραδείγματα 0 s 4 u -3 1 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v y V = {s, u, v, x, y} Ε = {(y,x),(u,x),(y,v),(s,u),(x,v),(s,v)} -2
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 u 4-3 1 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3-2 y 1 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 x 2 5 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3 2-2 y 2 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 3 η Επανάληψη S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 1 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 4 η Επανάληψη Καμία Αλλαγή Γιατί??? S1: (y,x), (u,x), (y,v), (s,u), (x,v), (s,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 2 0 s 4 u 4-3 1 x 2 5 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 3 2-2 y 1 η Επανάληψη S1: (s,u), (u,x), (y,x), (s,v), (x,v), (y,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παράδειγμα 2 0 s 4 4 u -3 1 5 x 2 n = 5 m = 6 Update στις 6 ακμές 4 φορές 3 v 2-2 y 2 η Επανάληψη Καμία Αλλαγή Γιατί??? S1: (s,u), (u,x), (y,x), (s,v), (x,v), (y,v)
Ελάχιστες Διαδρομές - Bellman-Ford Παρατήρηση!!! u 0 s x n = 5 m = 6 Update στις 6 ακμές 4 φορές v y 0 s u v x y
Ελάχιστες Διαδρομές - Bellman-Ford Παρατήρηση!!! 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) Διάμετρος = k G = (V,E)
Ελάχιστες Διαδρομές - Bellman-Ford Αρνητικοί Κύκλοι 2? 3 u 1 3 u 1 0 s 4-2 w 2 v 3 0 s 4-4 w 2 v? 4? Εάν υπάρχει αρνητικός κύκλος δεν έχει νόημα να αναζητούμε ελάχιστες διαδρομές!!!
Ελάχιστες Διαδρομές - Bellman-Ford 1. Αλγόριθμος Bellman-Ford Bellman-Ford(G,w,s) 1. Initialize(G,s) 2. επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) 0 s 3 4-4? u w? 2 1 v? 3. για κάθε ακμή (u,v) E: if d(v) > d(u) + w(u,v) then return FALSE 4. return d(.)
Ελάχιστες Διαδρομές - Bellman-Ford Πολυπλοκότητα Bellman-Ford Βήμα 1: Βήμα 2:
Ελάχιστες Διαδρομές - Bellman-Ford Πολυπλοκότητα Bellman-Ford Βήμα 3: Συνολική Πολυπλοκότητα: Ο(n m)
Ελάχιστες Διαδρομές σε DAG Ελάχιστες Διαδρομές σε DAG Υπάρχουν δύο κλάσεις γραφημάτων οι οποίες αποκλείουν την εμφάνιση αρνητικών κύκλων: Γραφήματα χωρίς αρνητικές ακμές Γραφήματα χωρίς κύκλους
Ελάχιστες Διαδρομές σε DAG Ελάχιστες Διαδρομές σε DAG Οι ελάχιστες διαδρομές σε ένα κατευθυνόμενο άκυκλο γράφημα G (DAG), τάξης n και μεγέθους m, από ένα κόμβο s, υπολογίζονται σε χρόνο O(n+m) Ο αλγόριθμος εκμεταλλεύεται την τοπολογική ταξινόμηση του DAG.
Ελάχιστες Διαδρομές σε DAG Dag-Shortest-Paths(G,w,s) 1. Initialize(G,s) 2. Topological-Sorting(G) 3. για κάθε κόμβο u V σε τοπολογική σειρά: για κάθε ακμή (u,v) E: Update(u,v,w) 4. return d(.)
Ελάχιστες Διαδρομές σε DAG Παράδειγμα r 2 5 1 3 6 9-5 s u v x 6-2 8 t Αρχικό DAG
Ελάχιστες Διαδρομές σε DAG Παράδειγμα r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t Αρχικό DAG Επιλογή κόμβου αφετηρίας: s
Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t 3. while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w)
Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3-5 s u v x 6-2 8 t Update(s,u, 3) Update(s,v, 2)
Ελάχιστες Διαδρομές σε DAG Βήμα 1 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t
Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t 3. while Q : u extract-min(q); S S {u} για κάθε ακμή (u,v) E: Update(u,v,w)
Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t
Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 1 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(u,v, 6) Update(u,x,-2) Update(u,t, 8)
Ελάχιστες Διαδρομές σε DAG Βήμα 2 r 2 5 2 1 1 6 9 0 3 3-5 s u v x 6-2 8 11 t Update(u,v, 6) Update(u,x,-2) Update(u,t, 8)
Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1 1 6 9 0 3 3-5 s u v x 6-2 8 11 t
Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1 6 9 0 3 1 3-5 s u v x 6-2 8 11 t Update(v,x,-5) Update(v,t, 5)
Ελάχιστες Διαδρομές σε DAG Βήμα 3 r 2 5 2 1-3 6 9 0 3 3-5 s u v x 6-2 8 7 t Update(v,x,-5) Update(v,t, 5)
Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t
Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t
Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 7 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(x,t, 9)
Ελάχιστες Διαδρομές σε DAG Βήμα 4 r 2 5 1-3 6 6 9 0 3 2 3-5 s u v x 6-2 8 t Update(x,t, 9)
Ελάχιστες Διαδρομές σε DAG Βήμα 5 r 2 5 1-3 6 6 9 0 3 2 3-5 s u v x 6-2 8 t Όλες οι ελάχιστες διαδρομές από τον κόμβο σε χρόνο O(n+m) s
Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v)
Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u
Ελάχιστες Διαδρομές Παρατηρήσεις Dijkstra u extract-min(q); για κάθε ακμή (u,v) E: Update(u,v,w) Bellman-Ford επανέλαβε n-1 φορές: για κάθε ακμή (u,v) E: Update(u,v,w) if d(v) > d(u) + w(u,v) then d(v) d(u) + w(u,v) prev(v) u f(v) characteristic(u)
Ελάχιστες Διαδρομές Θα ξαναδούμε αλγορίθμους υπολογισμού ελάχιστων Διαδρομών!!! Δυναμικός Προγραμματισμός Δυναμικός Σχεδιασμός
Τέλος Ενότητας Ευχαριστώ για τη Συμμετοχή σας!!! Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros