# cs 253: algorithms chapter 24 shortest paths credit: dr. george bebis

Post on 22-Dec-2015

215 views

Embed Size (px)

TRANSCRIPT

- Slide 1
- CS 253: Algorithms Chapter 24 Shortest Paths Credit: Dr. George Bebis
- Slide 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)
- Slide 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
- Slide 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
- Slide 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
- Slide 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 treeshortest-path tree 0 39 511 3 6 5 7 6 s tx yz 2 2 1 4 3
- Slide 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
- Slide 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
- Slide 9
- Dijkstras 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
- Slide 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=
- Slide 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=
- Slide 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=
- Slide 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)
- Slide 14
- Dijkstras 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
- Slide 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
- Slide 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
- Slide 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
- Slide 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
- Slide 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?
- Slide 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 Dijkstras 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
- Slide 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.
- Slide 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 Dijkstras 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
- Slide 23
- Problem 1 (cont.) Solution 2: use Dijkstras algorithm without any modifications! We want to find the channel with the highest reliability, i.e., But Dijkstras algorithm computes Take the log
- Slide 24
- Problem 1 (cont.) Turn this into a minimization problem by taking the negative: Run Dijkstras algorithm using