§3 shortest path algorithms given a digraph g = ( v, e ), and a cost function c( e ) for e e( g )....

17
§3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e E( G ). The length of a path P from source to destination is (also called weighted path length). P e i i e c ) ( 1. Single-Source Shortest-Path Problem Given as input a weighted graph, G = ( V, E ), and a distinguished vertex, s, find the shortest weighted path from s to every other vertex in G. v 1 v 2 v 6 v 7 v 3 v 4 v 5 2 4 2 1 3 10 2 5 8 4 6 1 v 1 v 2 v 6 v 7 v 3 v 4 v 5 2 4 2 1 3 10 2 5 8 4 6 1 Negative- cost cycle Note: If there is no negative-cost cycle, the shortest path from s to s is defined to be zero. 1/17

Upload: garrett-myatt

Post on 14-Dec-2015

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

Given a digraph G = ( V, E ), and a cost function c( e )

for e E( G ). The length of a path P from source to

destination is (also called weighted path length).Pe

i

i

ec )(

1. Single-Source Shortest-Path Problem

Given as input a weighted graph, G = ( V, E ), and a distinguished vertex, s, find the shortest weighted path from s to every other vertex in G.

v1 v2

v6 v7

v3 v4 v5

2

4

2

1 3 10

2

58 4 6

1

v1 v2

v6 v7

v3 v4 v5

2

4

2

13

–10

2

58 4 6

1

Negative-cost cycle

Note: If there is no negative-cost cycle, the shortest path from s to s is defined to be zero.

Note: If there is no negative-cost cycle, the shortest path from s to s is defined to be zero.

1/17

Page 2: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

Unweighted Shortest Paths

v1 v2

v6 v7

v3 v4 v50

0: v3

1: v1 and v6

1

1

2: v2 and v4

2

2

3: v5 and v7

3

3

Sketch of the idea

Breadth-first search

Implementation

Table[ i ].Dist ::= distance from s to vi /* initialized to be except for s */

Table[ i ].Known ::= 1 if vi is checked; or 0 if not

Table[ i ].Path ::= for tracking the path /* initialized to be 0 */

2/17

Page 3: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

void Unweighted( Table T ){ int CurrDist; Vertex V, W; for ( CurrDist = 0; CurrDist < NumVertex; CurrDist ++ ) { for ( each vertex V )

if ( !T[ V ].Known && T[ V ].Dist == CurrDist ) { T[ V ].Known = true; for ( each W adjacent to V ) if ( T[ W ].Dist == Infinity ) {

T[ W ].Dist = CurrDist + 1;T[ W ].Path = V;

} /* end-if Dist == Infinity */} /* end-if !Known && Dist == CurrDist */

} /* end-for CurrDist */}

The worst case: v1v2v6v7 v3v4v5v9 v8

T = O( |V|2 )

If V is unknown yet has Dist < Infinity, then Dist is either CurrDist or Cur

rDist+1.

3/17

Page 4: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms Improvement

void Unweighted( Table T ){ /* T is initialized with the source vertex S given */ Queue Q; Vertex V, W; Q = CreateQueue (NumVertex ); MakeEmpty( Q ); Enqueue( S, Q ); /* Enqueue the source vertex */ while ( !IsEmpty( Q ) ) { V = Dequeue( Q ); T[ V ].Known = true; /* not really necessary */ for ( each W adjacent to V )

if ( T[ W ].Dist == Infinity ) { T[ W ].Dist = T[ V ].Dist + 1; T[ W ].Path = V; Enqueue( W, Q );} /* end-if Dist == Infinity */

} /* end-while */ DisposeQueue( Q ); /* free memory */}

v1 v2

v6 v7

v3 v4 v5

0

v1

Dist Path

v2

0v3

v4

v5

v6

v7

0000000 v3

v71 v3

v1

1 v3 v6

1

1

2

2

v1

v2

2

2

v1

v4

3

3

v2

v5

3

3

v4

T = O( |V| + |E| )

4/17

Page 5: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

Dijkstra’s Algorithm (for weighted shortest paths)

Let S = { s and vi’s whose shortest paths have been found }

For any u S, define distance [ u ] = minimal length of path { s ( vi S ) u }. If the paths are generated in non-decreasing order, then the shortest path must go through ONLY vi S ;

Why? If it is not true, thenthere must be a vertex w on this path

that is not in S. Then ...

u is chosen so that distance[ u ] = min{ wS | distance[

w ] } (If u is not unique, then we may select any of them) ; /* Greedy Method */

if distance [ u1 ] < distance [ u2 ] and we add u1 into S, then distance [ u2 ] may change. If so, a shorter path from s to u2 must go through u1 and distance’ [ u2 ] = dist

ance [ u1 ] + length(< u1, u2>).

5/17

Page 6: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

void Dijkstra( Table T ){ /* T is initialized by Figure 9.30 on p.303 */ Vertex V, W; for ( ; ; ) { V = smallest unknown distance vertex; if ( V == NotAVertex )

break; T[ V ].Known = true; for ( each W adjacent to V )

if ( !T[ W ].Known ) if ( T[ V ].Dist + Cvw < T[ W ].Dist ) { Decrease( T[ W ].Dist to

T[ V ].Dist + Cvw );T[ W ].Path = V;

} /* end-if update W */ } /* end-for( ; ; ) */}

v1 v2

v6 v7

v3 v4 v5

2

4

2

1 3 10

2

58 4 6

1

0v1

Dist Path

v2

v3

v4

v5

v6

v7

0

0

0

0

0

0

0

2 v1

1 v1

3 v4

3 v4

9 v4

5 v4

8 v36 v7/* not work for edge with negative cost */

Please read Figure 9.31 on p.304 for printing the path.

/* O( |V| ) */

6/17

Page 7: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms Implementation 1

V = smallest unknown distance vertex;/* simply scan the table – O( |V| ) */

T = O( |V|2 + |E| ) Good if the graph is dense

Implementation 2

V = smallest unknown distance vertex;/* keep distances in a priority queue and call DeleteMin – O( log|V| ) */

Decrease( T[ W ].Dist to T[ V ].Dist + Cvw );

/* Method 1: DecreaseKey – O( log|V| ) */

T = O( |V| log|V| + |E| log|V| ) = O( |E| log|V| )

/* Method 2: insert W with updated Dist into the priority queue */

/* Must keep doing DeleteMin until an unknown vertex emerges */

Good if the graph is sparse

T = O( |E| log|V| ) but requires |E| DeleteMin with |E| space

Other improvements: Pairing heap (Ch.12) and Fibonacci heap (Ch. 11)

Home work: p.339 9.5

Find the shortest pathsp.340 9.10

Modify Dijkstra’s algorithm

7/17

Page 8: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

Graphs with Negative Edge Costs

Hey I have a good idea: why don’t we simply add a constant

to each edge and thus removenegative edges?

Too simple, and naïve… Try this one out:

1

3 4

22

– 2

21

void WeightedNegative( Table T ){ /* T is initialized by Figure 9.30 on p.303 */ Queue Q; Vertex V, W; Q = CreateQueue (NumVertex ); MakeEmpty( Q ); Enqueue( S, Q ); /* Enqueue the source vertex */ while ( !IsEmpty( Q ) ) { V = Dequeue( Q ); for ( each W adjacent to V )

if ( T[ V ].Dist + Cvw < T[ W ].Dist ) { T[ W ].Dist = T[ V ].Dist + Cvw; T[ W ].Path = V; if ( W is not already in Q ) Enqueue( W, Q );} /* end-if update */

} /* end-while */ DisposeQueue( Q ); /* free memory */} /* negative-cost cycle will cause indefinite loop */

/* no longer once per edge */

/* each vertex can dequeue at most |V| times */

T = O( |V| |E| )

8/17

Page 9: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms Acyclic Graphs

If the graph is acyclic, vertices may be selected in topological order since when a vertex is selected, its distance can no longer be lowered without any incoming edges from unknown nodes.

T = O( |E| + |V| ) and no priority queue is needed.

Application: AOE ( Activity On Edge ) Networks —— scheduling a project

vjai ::= activity Signals the completion of ai

EC[ j ] \ LC[ j ] ::= the earliest \ latest completion time for node vj

CPM ( Critical Path Method )Lasting Time

Slack Time

EC Time

LC Time

Index of vertex

9/17

Page 10: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

〖 Example〗 AOE network of a hypothetical project

01

2

3

4

5

6

78

start

finish

a0=6

a1=4

a2=5

a3=1

a4=1

a5=2

a6=9

a7=7

a8=4

a9=2

a10=4

Calculation of EC: Start from v0, for any ai = <v, w>, we have}][{max][ ,

),(wv

EwvCvECwEC

06

4

5

7

7

16

14

18

a11=0

Dummy activity

Calculation of LC: Start from the last vertex v8, for any ai = <v, w>, we have }][{min][ ,

),(wv

EwvCwLCvLC

18

16

14

7

75

6

60

Slack Time of <v,w> = wvCvECwLC ,][][

2

3

2

Critical Path ::= path consisting entirely of zero-slack edges.

10/17

Page 11: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§3 Shortest Path Algorithms

2. All-Pairs Shortest Path Problem

For all pairs of vi and vj ( i j ), find the shortest path between.

Method 1 Use single-source algorithm for |V| times.

T = O( |V|3 ) – works fast on sparse graph.

Method 2 O( |V|3 ) algorithm given in Ch.10, works faster on dense graphs.

11/17

Page 12: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems

〖 Example〗 Consider the following network of pipes:

s

dc

ba

t

3

3

3

2

2

2

1

4

source

sink

Note: Total coming in (v)

Total going out (v)

where v { s, t }

Note: Total coming in (v)

Total going out (v)

where v { s, t }

Determine the maximum amount of flow that can pass from s to t.

12/17

Page 13: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems1. A Simple Algorithm

s

dc

ba

t

3

3

3

2

2

2

1

4

G

s

dc

ba

tFlow Gf

s

dc

ba

tResidual Gr

Step 1: Find any path s t in Gr ;

augmenting path

Step 2: Take the minimum edge on this path as the amount of flow and add to Gf ;

Step 3: Update Gr and remove the 0 flow edges;

Step 4: If (there is a path s t in Gr )

Goto Step 1; Else End.

13/17

Page 14: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems

s

dc

ba

t

3

3

3

2

2

2

1

4

G

It is simple indeed. But I bet that you will point out

some problems here…

You are right!What if I pick up the path

s a d tfirst?

Uh-oh… Seems we cannot be

greedy at this point.

14/17

Page 15: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems2. A Solution – allow the algorithm to undo its decisions

For each edge ( v, w ) with flow fv, w in Gf , add an edge ( w, v ) with flow fv, w in Gr .

s

dc

ba

tFlow Gf

s

dc

ba

t

3

3

3

2

2

2

1

4

G

s

dc

ba

tResidual Gr

3

3

3

2

2

2

1

4

3

3

3

3

31

3

2

222

2

2

21

32

2

1

〖 Proposition〗 If the edge capabilities are rational numbers, this algorithm always terminate with a maximum flow.

Note: The algorithm works for G with cycles as well.

Note: The algorithm works for G with cycles as well.

15/17

Page 16: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems3. Analysis ( If the capacities are all integers )

An augmenting path can be found by an unweighted shortest path algorithm.

T = O( ) where f is the maximum flow.f · |E|

s

t

a b

1 000 000 1 000 000

1 000 000 1 000 000

1

Always choose the augmenting path that allows the largest increase in flow. /* modify Dijkstra’s algorithm */

T = Taugmentation * Tfind a path

= O( |E| log capmax ) * O( |E| log |V| )

= O( |E|2 log |V| ) if capmax is a small integer.

16/17

Page 17: §3 Shortest Path Algorithms Given a digraph G = ( V, E ), and a cost function c( e ) for e  E( G ). The length of a path P from source to destination

§4 Network Flow Problems

Always choose the augmenting path that has the least number of edges.

T = Taugmentation * Tfind a path

= O( |E| ) * O( |E| · |V| )

= O( |E|2 |V| )

/* unweighted shortest path algorithm */

Note: If every v { s, t } has either a single incoming edge of capacity

1 or a single outgoing edge of capacity 1, then time bound is reduced to O( |E| |V|1/2 ).

The min-cost flow problem is to find, among all maximum flows, the one flow of minimum cost provided that each edge has a cost per unit of flow.

Note: If every v { s, t } has either a single incoming edge of capacity

1 or a single outgoing edge of capacity 1, then time bound is reduced to O( |E| |V|1/2 ).

The min-cost flow problem is to find, among all maximum flows, the one flow of minimum cost provided that each edge has a cost per unit of flow.

Home work:

p.341 9.11

A test case.

17/17