Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 253: Algorithms Chapter 24 Shortest Paths Credit: Dr. George Bebis.

Similar presentations


Presentation on theme: "CS 253: Algorithms Chapter 24 Shortest Paths Credit: Dr. George Bebis."— Presentation transcript:

1 CS 253: Algorithms Chapter 24 Shortest Paths Credit: Dr. George Bebis

2 2 Shortest Path Problems How can we find the shortest route between two points on a road map? Model the problem as a graph problem: ◦ Road map is a weighted graph: vertices = cities edges = road segments between cities edge weights = road distances ◦ Goal: find a shortest path between two vertices (cities)

3 Shortest Path Problem Input: ◦ Directed graph G = (V, E) ◦ Weight function w : E → R Weight of path p =  v 0, v 1,..., v k  Shortest-path weight from u to v : δ (u, v) = min w(p) : u v if there exists a path from u to v ∞ otherwise Note: there might be multiple shortest paths from u to v p 0 39 511 3 6 5 7 6 s tx yz 2 2 1 4 3

4 4 Negative-Weight Edges Negative-weight edges may form negative-weight cycles If such cycles are reachable from the source, then δ (s, v) is not properly defined! ◦ Keep going around the cycle, and get w(s, v) = -  for all v on the cycle Therefore, negative-weight edges will not be considered here 0 3 -4 2 8 -6 s ab ef -3 y 3 5 6 4 7 c d g

5 Cycles Can shortest paths contain cycles? No! Negative-weight cycles ◦ Shortest path is not well defined (we will not consider this case) If there is a positive-weight cycle, we can get a shorter path by removing the cycle. Zero-weight cycles? ◦ No reason to use them ◦ Can remove them and obtain a path with the same weight

6 Shortest-Paths Notation For each vertex v  V: δ(s, v): shortest-path weight d[v]: shortest-path weight estimate ◦ Initially, d[v]=∞ ◦ d[v]  δ(s,v) as algorithm progresses  [v] = predecessor of v on a shortest path from s ◦ If no predecessor,  [v] = NIL ◦ induces a tree—shortest-path tree 0 39 511 3 6 5 7 6 s tx yz 2 2 1 4 3

7 7 Initialization Alg.: INITIALIZE-SINGLE-SOURCE(V, s) 1. for each v  V 2. do d[v] ←  3.  [v] ← NIL 4. d[s] ← 0 All the shortest-paths algorithms start with INITIALIZE-SINGLE-SOURCE

8 Relaxation Step Relaxing an edge (u, v) = testing whether we can improve the shortest path to v found so far by going through u If d[v] > d[u] + w(u, v) we can improve the shortest path to v  d[v]=d[u]+w(u,v)   [v] ← u 59 2 uv 57 2 uv RELAX(u, v, w) 56 2 uv 56 2 uv After relaxation: d[v]  d[u] + w(u, v) ss no change

9 Dijkstra’s Algorithm Single-source shortest path problem: ◦ No negative-weight edges: w(u, v) > 0,  (u, v)  E Vertices in (V – S) reside in a min-priority queue ◦ Keys in Q are estimates of shortest-path weights d[u] Repeatedly select a vertex u  (V – S), with the minimum shortest-path estimate d[u] Relax all edges leaving u STEPS 1) Extract a vertex u from Q (i.e., u has the highest priority) 2) Insert u to S 3) Relax all edges leaving u 4) Update Q

10 10 Dijkstra (G, w, s) 0   10 1 5 2 s tx yz 2 3 9 7 4 6 0   1 5 2 s tx yz 2 3 9 7 4 6 5 S=<> Q= S= Q=

11 Example (cont.) 0 10  5  1 5 2 s tx yz 2 3 9 7 4 6 814 7 0 8 5 7 10 1 5 2 s tx yz 2 3 9 7 4 6 13 S= Q=

12 Example (cont.) 0 8 13 57 10 1 5 2 s tx yz 2 3 9 7 4 6 9 0 8 9 57 1 5 2 s tx yz 2 3 9 7 4 6 S= Q= S= Q=<>

13 Dijkstra (G, w, s) 1. INITIALIZE-SINGLE-SOURCE( V, s ) 2. S ← s 3. Q ← V[G] 4. while Q   5. do u ← EXTRACT-MIN(Q) 6. S ← S  { u } 7. for each vertex v  Adj[u] 8. do RELAX( u, v, w ) 9. Update Q (DECREASE_KEY)  (V)  (V) build min-heap Executed  (V) times  (lgV)  (E) times (max)  (lgV)  (VlgV)  (ElgV) Running time:  (VlgV + ElgV) =  (ElgV)

14 Dijkstra’s SSSP Algorithm (adjacency matrix) b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 5 1  S new L[i] = Min{ L[i], L[k] + W[k, i] } where k is the newly-selected intermediate node and W[.] is the distance between k and i

15 b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 5 1   a b c d e f new L [.] = 1 0 3 1 5  SSSP cont. new L[i] = Min{ L[i], L[k] + W[k, i] } where k is the newly-selected intermediate node and W[.] is the distance between k and i

16 b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 3 1 5  a b c d e f new L [.] = 1 0 3 1 5 3 new L[i] = Min{ L[i], L[k] + W[k, i] } where k is the newly-selected intermediate node and W[.] is the distance between k and i

17 b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 3 1 5 3 a b c d e f new L [.] = 1 0 3 1 4 3

18 b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 3 1 4 3 a b c d e f new L [.] = 1 0 3 1 4 3

19 b a d c f e 1 1 1 5 5 3 2 4 2 a b c d e f a 0 1 3   2 b 1 0 5 1   c 3 5 0 2 1  d  1 2 0 4  e   1 4 0 5 f 2    5 0 a b c d e f L [.] = 1 0 3 1 4 3 a b c d e f new L [.] = 1 0 3 1 4 3 Running time:  (V 2 ) (array representation)  (ElgV) (Min-Heap+Adjacency List) Which one is better?

20 All-Pairs Shortest Paths Given: Directed graph G = (V, E) Weight function w : E → R Compute: The shortest paths between all pairs of vertices in a graph Result: an n × n matrix of shortest-path distances δ(u, v) We can run Dijkstra’s algorithm once from each vertex: ◦ O(VElgV) with binary heap and adjacency-list representation ◦ if the graph is dense  O(V 3 lgV) ◦ We can achieve O(V 3 ) by using an adjacency-matrix. 1 2 3 54 3 3 7 6 2 4 1 9 8

21 21 Problem 1 We are given a directed graph G=(V, E) on which each edge (u,v) has an associated value r(u,v), which is a real number in the range 0 ≤ r(u,v) ≤ 1 that represents the reliability of a communication channel from vertex u to vertex v. We interpret r(u,v) as the probability that the channel from u to v will not fail, and we assume that these probabilities are independent. Design an efficient algorithm to find the most reliable path between two given vertices.

22 22 Problem 1 (cont.) ◦ r(u,v) = Pr(channel from u to v will not fail) ◦ Assuming that the probabilities are independent, the reliability of a path p= is: r(v 1,v 2 ) r(v 2,v 3 ) … r(v k-1,v k ) Solution 1: modify Dijkstra’s algorithm ◦ Perform relaxation as follows: if d[v] < d[u] w(u,v) then d[v] = d[u] w(u,v) ◦ Use “EXTRACT_MAX” instead of “EXTRACT_MIN”

23 Problem 1 (cont.) Solution 2: use Dijkstra’s algorithm without any modifications! ◦ We want to find the channel with the highest reliability, i.e., ◦ But Dijkstra’s algorithm computes ◦ Take the log

24 Problem 1 (cont.) Turn this into a minimization problem by taking the negative: Run Dijkstra’s algorithm using


Download ppt "CS 253: Algorithms Chapter 24 Shortest Paths Credit: Dr. George Bebis."

Similar presentations


Ads by Google