Top Banner
1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms
22

1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

Dec 20, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

18a-ShortestPathsMore

Shortest Pathsin a Graph (cont’d)

Fundamental Algorithms

Page 2: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

28a-ShortestPathsMore

All-Pairs Shortest PathsWe now want to compute a table giving the length of the shortest path between any two vertices. (We also would like to get the shortest paths themselves.)

We could just call Dijkstra or Bellman-Ford |V| times, passing a different source vertex each time.

It can be done in (V3), which seems to be as good as you can do on dense graphs.

Page 3: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

38a-ShortestPathsMore

Doing APSP with SSSPDijkstra would take time

(V V2) = (V3) (standard version)

(V (VlgV + E)) = (V2lgV + VE)) (modified, Fibonacci heaps),

but doesn’t work with negative-weight edges.

Bellman-Ford would take (V VE) = (V2E).

Page 4: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

48a-ShortestPathsMore

The Floyd-Warshall AlgorithmRepresent the directed, edge-weighted graph in adjacency-matrix form.

W= matrix of weights =

w w w

w w w

w w w

11 12 13

21 22 23

31 32 33

• wij is the weight of edge (i, j), or if there is no such edge.

• Return a matrix D, where each entry dij is (i,j).• Could also return a predecessor matrix, P, where

each entry ij is the predecessor of j on the shortest path from i.

Page 5: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

58a-ShortestPathsMore

Floyd-Warshall: IdeaConsider intermediate vertices of a path:

i j

Say we know the length of the shortest path from i to j whose intermediate vertices are only those with numbers 1, 2, ..., k-1. Call this length

Now how can we extend this from k-1 to k? In other words, we want to compute . Can we use , and if so how?

d ijk( ) 1

d ijk( )

d ijk( ) 1

Page 6: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

68a-ShortestPathsMore

Floyd-Warshall Idea, 2

Two possibilities:

1. Going through the vertex k doesn’t help— the path through vertices 1...k-1 is still the shortest.

2. There is a shorter path consisting of two subpaths, one from i to k and one from k to j. Each subpath passes only through vertices numbered 1 to k-1.

j

k

i

Page 7: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

78a-ShortestPathsMore

Floyd-Warshall Idea,3Thus,

(since there are no intermediate vertices.)

When k = |V|, we’re done.

ijk

ijk

ikk

kjk

ij ij

d d d d

d w

( ) ( ) ( ) ( )

( )

min( , )

1 1 1

0Also,

Page 8: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

88a-ShortestPathsMore

Dynamic ProgrammingFloyd-Warshall is a dynamic programming algorithm:

Compute and store solutions to sub-problems. Combine those solutions to solve larger sub-problems.

Here, the sub-problems involve finding the shortest paths through a subset of the vertices.

Page 9: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

98a-ShortestPathsMore

Code for Floyd-WarshallFloyd-Warshall(W)

simple.) are operations because ality,proportion

of constant (Small (Vzippy a :time Running

return

to for do 5

to 1i for do

to for 3

vertices of number//

3

)(

)(

)(

).

7

),min(6

1

4

1

2

][1

)1()1()1(

0

n

k

kj

k

ik

k

ij

k

ij

D

nj

n

nk

WD

Wrowsn

dddd

Page 10: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

108a-ShortestPathsMore

Example of Floyd-Warshall

Page 11: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

118a-ShortestPathsMore

Johnson’s Algorithm

Makes clever use of Bellman-Ford and Dijkstra to do All-Pairs-Shortest-Paths efficiently on sparse graphs.

Motivation: By running Dijkstra |V| times, we could do APSP in time (V2lgV +VElgV) (Modified Dijkstra), or (V2lgV +VE) (Fibonacci Dijkstra). This beats (V3) (Floyd-Warshall) when the graph is sparse.

Problem: negative edge weights.

Page 12: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

128a-ShortestPathsMore

The Basic IdeaReweight the edges so that:

1. No edge weight is negative.2. Shortest paths are preserved. (A

shortest path in the original graph is still one in the new, reweighted graph.)

An obvious attempt: subtract the minimum weight from all the edge weights. E.g. if the minimum weight is -2:

-2 - -2 = 0 3 - -2 = 5

etc.

Page 13: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

138a-ShortestPathsMore

CounterexampleSubtracting the minimum weight from every weight doesn’t work.

Consider:

Paths with more edges are unfairly penalized.

-2 -1

-2

0 1

0

Page 14: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

148a-ShortestPathsMore

Johnson’s InsightAdd a vertex s to the original graph G, with edges of weight 0 to each vertex in G:

Assign new weights ŵ to each edge as follows:

ŵ(u, v) = w(u, v) + (s, u) - (s, v)

s 0

0

0

Page 15: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

158a-ShortestPathsMore

Question 1Are all the ŵ’s non-negative? Yes:

Otherwise, s u v would be shorter than the shortest path from s to v.

s

u

v

w(u, v)(s, u)

(s, v)

0),(),(),(

),(),(),(

vsusvuw

vsvuwus

:Rewriting

),(ˆ vuw

),(),(),( vsvuwus be must

Page 16: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

168a-ShortestPathsMore

Question 2Does the reweighting preserve shortest paths? Yes: Consider any path kvvvp ,,, 21

),(),()(

),(),(),(

),(),(),(

),(),(),(

),(ˆ)(ˆ

1

11

3232

2121

1

11

k

kkkk

k

iii

vsvspw

vsvsvvw

vsvsvvw

vsvsvvw

vvwpw

the sumtelescopes

A value that depends only on the endpoints, not on the path.

In other words, we have adjusted the lengths of all paths by the same amount. So this will not affect the relative ordering of the paths—shortest paths will be preserved.

Page 17: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

178a-ShortestPathsMore

Question 3How do we compute the (s, v)’s?

Use Bellman-Ford.

This also tells us if we have a negative-weight cycle.

Page 18: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

188a-ShortestPathsMore

Johnson’s: Algorithm1. Compute G’, which consists of G augmented

with s and a zero-weight edge from s to every vertex in G.

2. Run Bellman-Ford(G’, w, s) to obtain the (s,v)’s

3. Reweight by computing ŵ for each edge

4. Run Dijkstra on each vertex to compute

5. Undo reweighting factors to compute

Page 19: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

198a-ShortestPathsMore

Johnson’s: CLRS

Page 20: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

208a-ShortestPathsMore

Johnson: reweighting

ŵ(u, v) = w(u, v) + d(s, u) - d(s, v)

Page 21: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

218a-ShortestPathsMore

Johnson using Dijkstra

Page 22: 1 8a-ShortestPathsMore Shortest Paths in a Graph (cont’d) Fundamental Algorithms.

228a-ShortestPathsMore

Johnson’s: Running Time1. Computing G’: (V)

2. Bellman-Ford: (VE)

3. Reweighting: (E)

4. Running (Modified) Dijkstra: (V2lgV +VElgV)

5. Adjusting distances: (V2)—————————————————————Total is dominated by Dijkstra: (V2lgV +VElgV)