Page 620 Single-Source Shortest Paths • Problem Definition • Shortest paths and Relaxation • Dijkstra’s algorithm (can be viewed as a greedy algorithm) 2016/5/29 chapter25 1 Problem Definition: • Real problem: A motorist wishes to find the shortest possible route from Chicago to Boston.Given a road map of the United States on which the distance between each pair of adjacent intersections is marked, how can we determine this shortest route? • Formal definition: Given a graph G=(V, E, W), where each edge has a weight, find a shortest path from s to v for some interesting vertices s and v. • s—source • v—destination. 2016/5/29 chapter25 2 Shortest path: • The weight of path p=<v0,v1,…,vk > is the sum of the weights of its constituent edges: k w( p ) w(vi 1, vi ) i 1 The cost of the shortest path from s to v is denoted as (s, v). 2016/5/29 chapter25 3 Negative-Weight edges: • Edge weight may be negative. • negative-weight cycles– the total weight in the cycle (circuit) is negative. • If no negative-weight cycles reachable from the source s, then for all v V, the shortest-path weight (s, v) remains well defined,even if it has a negative value. • If there is a negative-weight cycle on some path from s to v, we define ( s, v) = - . 2016/5/29 chapter25 4 a 3 3 5 s 0 2 -4 b c 6 5 -3 11 e 3 h 2 i -1 4 d f 8 7 g -8 3 j -6 Figure1 Negative edge weights in a directed graph.Shown within each vertex is its shortest-path weight from source s.Because vertices e and f form a negative-weight cycle reachable from s,they have shortest-path weights of - . Because vertex g is reachable from a vertex whose shortest path is - ,it,too,has a shortest-path weight of - .Vertices such as h, i ,and j are not reachable from s,and so their shortest-path weights are , even though they lie on a negative-weight cycle. 2016/5/29 chapter25 5 Representing shortest paths: • we maintain for each vertex vV , a predecessor [ v] that is the vertex in the shortest path right before v. • With the values of , a backtracking process can give the shortest path. (We will discuss that after the algorithm is given) 2016/5/29 chapter25 6 • Observation: (basic) • Suppose that a shortest path p from a source s to a vertex v can be decomposed into p' s u v for some vertex u and path p’. Then, the weight of a shortest path from s to v is ( s, v) ( s, u ) w(u, v) We do not know what is u for v, but we know u is in V and we can try all nodes in V in O(n) time. Also, if u does not exist, the edge (s, v) is the shortest. Question: how to find (s, u), the first shortest from s to some node? 2016/5/29 chapter25 7 Relaxation: • The process of relaxing an edge (u,v) consists of testing whether we can improve the shortest path to v found so far by going through u and,if so,updating d[v] and [v]. • RELAX(u,v,w) • if d[v]>d[u]+w(u,v) d[u]+w(u,v) (based on observation) • then d[v] • [v] u 2016/5/29 chapter25 8 u 5 2 v u 9 5 v 2 6 RELAX(u,v) u 5 2 RELAX(u,v) v u 7 5 (a) 2 v 6 (b) Figure2 Relaxation of an edge (u,v).The shortest-path estimate of each vertex is shown within the vertex. (a)Because d[v]>d[u]+w(u,v) prior to relaxation, the value of d[v] decreases. (b)Here, d[v] d[u]+w(u,v) before the relaxation step,so d[v] is unchanged by relaxation. 2016/5/29 chapter25 9 Initialization: • For each vertex v V, d[v] denotes an upper bound on the weight of a shortest path from source s to v. • d[v]– will be (s, v) after the execution of the algorithm. • initialize d[v] and [v] as follows: . • INITIALIZE-SINGLE-SOURCE(G,s) • for each vertex v V[G] • do d[v] [v] NIL • 0 • d[s] 2016/5/29 chapter25 10 Dijkstra’s Algorithm: • Dijkstra’s algorithm assumes that w(e)0 for each e in the graph. • maintain a set S of vertices such that – Every vertex v S, d[v]=(s, v), i.e., the shortest-path from s to v has been found. (Intial values: S=empty, d[s]=0 and d[v]=) • (a) select the vertex uV-S such that d[u]=min {d[x]|x V-S}. Set S=S{u} D[u]= (s, u) at this moment! Why? • (b) for each node v adjacent to u do RELAX(u, v, w). • Repeat step (a) and (b) until S=V. 2016/5/29 chapter25 11 Continue: • • • • • • • • • DIJKSTRA(G,w,s): INITIALIZE-SINGLE-SOURCE(G,s) S V[G] Q while Q EXTRACT -MIN(Q) do u S {u} S for each vertex v Adj[u] do RELAX(u,v,w) 2016/5/29 chapter25 12 Implementation: • a priority queue Q stores vertices in V-S, keyed by their d[] values. • the graph G is represented by adjacency lists. 2016/5/29 chapter25 13 u v 1 8 8 10 s 0 9 3 2 4 6 7 5 8 8 2 x y (a) 2016/5/29 chapter25 14 u v 1 8 10 10 s 0 9 3 2 4 6 7 5 x 8 5 2 (b) y (s,x) is the shortest path using one edge. It is also the shortest path from s to x. 2016/5/29 chapter25 15 Assume EXTRACT -MIN(Q)=x. (s,x) is the shortest path using one edge. – Why? Since (s, x) is the shortest among all edges starting from s. • It is also the shortest path from s to x. Proof: (1) Suppose that path P: s->u…->x is the shortest path. Then w (s,u) w(s, x). (2) Since edges have non-negative weight, the total weight of path P is at least w(s,u) w(s, x). (3) So, the edge (s, x) is the shortest path from s to x. 2016/5/29 chapter25 16 u v 1 8 14 10 s 0 9 3 2 4 6 7 5 5 7 2 x y (c) 2016/5/29 chapter25 17 Statement: Suppose S={s, x} and d[y]=min d(v). ……(1) vV-S Then d[y] is the cost of the shortest, i.e., either s->x->y or (s->y) is the shortest path from s to y. Why? If (s, y) is the shortest path, d[y] is correct. Consider that case: s->x->y is the shortest path for y. Proof by contradiction. Assume that s->x->y is not the shortest path and that P1: s->yy->…->y is a shortest path and yyS. (At this moment, we already tried the case for yy=s and yy=x in the alg.) Thus, w(P1)< w(s->x->y). (from assumption: s->x-Y is not the shortest) Since w(e)0 for any e, w(s->yy)<w(P1)<w(s->x->y). Therefore, d[yy]<d[y] and (1) is not true. 2016/5/29 chapter25 18 u v 1 8 13 10 s 0 9 3 2 4 6 7 5 5 7 2 x y (d) 2016/5/29 chapter25 19 u v 1 8 9 10 s 0 9 3 2 4 6 7 5 5 7 2 x y (e) 2016/5/29 chapter25 20 u v 1 8 9 10 s 0 9 3 2 4 6 7 5 5 7 2 x y (f) 2016/5/29 chapter25 21 Theorem: Let S be the set in algorithm and d[y]=min d(v). ……(1) vV-S Then d[y] is the cost of the shortest. (hard part) Proof: Assume that (1) for any v in S, y[v] is the cost of the shortest path. We want to show that d[y] is also the cost of the shortest path after execution of Step (a) Assume that (2) d[y] is NOT the cost of the shortest path from s to y and that P1: s…->yy->…->y is a shortest path and yyS is the 1st node in P1 not in S. Thus, w(P1)<d[y]. So, w(s…->yy)<w(P1). (weight of edge >=0) Thus, w(s…->yy)<w(P1)<d[y]. From (1) and (2), after execution of step (a) d[yy]w(s…->yy). Therefore, d[yy]<d[y] and (1) is not true. 2016/5/29 chapter25 22 Time complexity of Dijkstra’s Algorithm: • Time complexity depends on implementation of the Queue. • Method 1: Use an array to story the Queue • EXTRACT -MIN(Q) --takes O(|V|) time. – Totally, there are |V| EXTRACT -MIN(Q)’s. – time for |V| EXTRACT -MIN(Q)’s is O(|V|2). • RELAX(u,v,w) --takes O(1) time. – Totally |E| RELAX(u, v, w)’s are required. – time for |E| RELAX(u,v,w)’s is O(|E|). • Total time required is O(|V|2+|E|)=O(|V|2) • Backtracking with [] gives the shortest path in inverse order. • Method 2: The priority queue is implemented as a Fibonacci heap. It takes O(log n) time to do EXTRACTMIN(Q). The total running time is O(nlog n+E). 2016/5/29 chapter25 23 Assignment 3: (Due week 13, Monday at 7: 30 pm) Question 3: Design a polynomial time algorithm to compute the SCS for three sequences. Just use pseudo-code or English to describe your algorithm. 2016/5/29 chapter25 24