2016/5/29 chapter25 1

advertisement
2016/5/29
chapter25
1
2016/5/29
chapter25
2
2016/5/29
chapter25
3
2016/5/29
chapter25
4
d*
Spacing of C ≤d(p, q)≤d*.
2016/5/29
chapter25
5
An Example
K=3.
2016/5/29
chapter25
6
4.4 Single-Source Shortest Paths
• Problem Definition
• Shortest paths and Relaxation
• Dijkstra’s algorithm (can be viewed as a
greedy algorithm)
2016/5/29
chapter25
7
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 directed 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
8
B
A
Find a shortest path from station A to station B.
-need serious thinking to get a correct algorithm.
2016/5/29
chapter25
9
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
10
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
11
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
12
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
13
• 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
14
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
15
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
16
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
17
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}
(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
18
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
19
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
20
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
21
u
v
1
8
10/s
10
s
0
9
3
2
4
6
7
5
x
8
5/s
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
22
u
v
1
8/x
14/x
10
s
0
9
3
2
4
6
7
5
5/s
7/x
2
x
y
(c)
2016/5/29
chapter25
23
u
v
1
8/x
13/y
10
s
0
9
3
2
4
6
7
5
5/s
7/x
2
x
y
(d)
2016/5/29
chapter25
24
u
v
1
8/x
9/u
10
s
0
9
3
2
4
6
7
5
5/s
7/x
2
x
y
(e)
2016/5/29
chapter25
25
u
v
1
8/x
9/u
10
s
0
9
3
2
4
6
7
5
5/s
7/x
2
x
y
(f)
Backtracking: v-u-x-s
2016/5/29
chapter25
26
Theorem: Consider the set S at any time in
the algorithm’s execution. For each vS,
the path Pv is a shortest s-v path.
Proof: We prove it by induction on |S|.
1. If |S|=1, then the theorem holds. (Because d[s]=0
and S={s}.)
2. Suppose that the theorem is true for |S|=k for some
k>0.
3. Now, we grow S to size k+1 by adding the node v.
2016/5/29
chapter25
27
Proof: (continue)
Now, we grow S to size k+1 by adding the node v.
Let (u, v) be the last edge on our s-v path Pv.
Consider any other path from P: s,…,x,y, …, v. (red in the Fig.)
Case 1: y is the first node that is not in S and xS.
Since we always select the node with the smallest value d[] in the algorithm,
we have d[v]d[y].
Moreover, the length of each edge is 0.
y
Thus, the length of Pd[y]d[v].
x
That is, the length of any path d[v].
Case 2: such a y does not exist.
s
d[v]=d[u]+w(u, v)d[x]+w(x, v).
That is, the length of any path d[v].
Set S
2016/5/29
chapter25
u
v
28
The algorithm does not work if there are
negative weight edges in the graph
.
u
-10
2
s
v
1
S->v is shorter than s->u, but it is longer than
2016/5/29
s->u->v.
chapter25
29
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
adaptable heap. It takes O(log n) time to do EXTRACTMIN(Q). The total running time is O(|E|log n ).
2016/5/29
chapter25
30
A problem
Let us design a keyboard for a mechanical hand. The
keyboard has 26 letters A, B, …, Z arranged in one row.
The hand is always at the left end of the row and it comes
back to the left end after pressing a key. Assume that we
know the frequency of every letter. Design the order of the
26 letters in the row such that the average length of
movement of the mechanical hand is minimized. Prove
that your solution is correct.
2016/5/29
chapter25
31
Download