Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.