Page 620 Single-Source Shortest Paths

advertisement
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 vV , 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 uV-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)
vV-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 yyS.
(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)
vV-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 yyS 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
Download