cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade...

19
CS 225 Data Structures April 29 – Floyd-Warshall’s Algorithm Wade Fagen-Ulmschneider, Craig Zilles

Transcript of cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade...

Page 1: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

CS 225Data Structures

April 29 – Floyd-Warshall’s AlgorithmWade Fagen-Ulmschneider, Craig Zilles

Page 2: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

AC

DE

B

F G

H7

54

10 7

-5

3

-6

25

4

3

Q: How does Dijkstra handle negative weight cycles?

Page 3: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

AC

DE

B

F G

H7

54

10 7

-5

3

-6

25

4

3

Q: How does Dijkstra handle negative weight cycles?

Page 4: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

AC

DE

B

F G

H7

54

10 7

-5

3

-6

25

4

3

Q: How does Dijkstra handle negative weight cycles?

Shortest Path (A è E): A à F à E à (C à H à G à E)*Length: 12 Length: -5 (repeatable)

Page 5: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

AC

DE

B

F G

H7

54

10 7

5

3

6

-22

3

3

Q: How does Dijkstra handle negative weight edges, without a negative weight cycle?

Page 6: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

A

FD E

B

C G

H

10

Q: How does Dijkstra handle a single heavy-weight path vs. many light-weight paths?

1

1 1 1 1

1

1

Page 7: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Dijkstra’s Algorithm (SSSP)

DijkstraSSSP(G, s):foreach (Vertex v : G):

d[v] = +infp[v] = NULL

d[s] = 0

PriorityQueue Q // min distance, defined by d[v]Q.buildHeap(G.vertices())Graph T // "labeled set"

repeat n times:Vertex u = Q.removeMin()T.add(u)foreach (Vertex v : neighbors of u not in T):

if cost(u, v) + d[u] < d[v]:d[v] = cost(u, v) + d[u]p[v] = m

return T

6789

1011121314151617181920212223

What is Dijkstra’s running time?

Page 8: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmFloyd-Warshall’s Algorithm is an alterative to Dijkstra in the presence of negative-weight edges (notnegative weight cycles).

FloydWarshall(G):Let d be a adj. matrix initialized to +infforeach (Vertex v : G):

d[v][v] = 0foreach (Edge (u, v) : G):

d[u][v] = cost(u, v)

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex w : G):if d[u, v] > d[u, w] + d[w, v]:

d[u, v] = d[u, w] + d[w, v]

6789

10111213141516

Page 9: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmFloydWarshall(G):

Let d be a adj. matrix initialized to +infforeach (Vertex v : G):

d[v][v] = 0foreach (Edge (u, v) : G):

d[u][v] = cost(u, v)

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex w : G):if d[u, v] > d[u, w] + d[w, v]:

d[u, v] = d[u, w] + d[w, v]

6789

10111213141516

A B C D

A

B

C

D

AC

D

B

3-1

2

4

-2

Page 10: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmA B C D

A 0 -1 ∞ ∞

B ∞ 0 4 3

C ∞ ∞ 0 -2

D 2 ∞ ∞ 0

1213141516

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex k : G):if d[u, v] > d[u, k] + d[k, v]:

d[u, v] = d[u, k] + d[k, v]

AC

D

B

3-1

2

4

-2

Page 11: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmA B C D

A 0 -1 ∞ ∞

B ∞ 0 4 3

C ∞ ∞ 0 -2

D 2 ∞ ∞ 0

AC

D

B

3-1

2

4

-2

Let us consider k=A: B CB D

4

3

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex k : G):if d[u, v] > d[u, k] + d[k, v]:

d[u, v] = d[u, k] + d[k, v]

1213141516

B CAvs. +∞B DA +∞vs.

C BC D

+∞

-2C BAvs. +∞C DA +∞vs.

D BD C

+∞ D BBvs.D CBvs.+∞

Page 12: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmA B C D

A 0 -1 ∞ ∞

B ∞ 0 4 3

C ∞ ∞ 0 -2

D 2 1 ∞ 0

AC

D

B

3-1

2

4

-2

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex k : G):if d[u, v] > d[u, k] + d[k, v]:

d[u, v] = d[u, k] + d[k, v]

1213141516

1

Page 13: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmA B C D

A 0 -1 ∞ ∞

B ∞ 0 4 3

C ∞ ∞ 0 -2

D 2 1 ∞ 0

AC

D

B

3-1

2

4

-2

Let us consider k=B: A CA D

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex k : G):if d[u, v] > d[u, k] + d[k, v]:

d[u, v] = d[u, k] + d[k, v]

1213141516

A CBvs.A DBvs.

C AC D

C ABvs.C DBvs.

D AD C

D ABvs.D CBvs.

1

Page 14: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall Algorithm Intuition

Consider a graph G with vertices V numbered 1 through N.

Consider the function shortestPath(i, j, k) that returns the shortest possible path from i to j using only vertices from the set {1,2, ... ,k} as intermediate vertices.

Clearly, shortestPath(i, j, N) returns _______________________

Page 15: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall Algorithm Intuition

For each pair of vertices, the shortestPath(i, j, k) could be either

(1) a path that doesn't go through k (only uses vertices in the set {1, ..., k-1}.)

(2) a path that does go through k (from i to k and then from k to j, both only using intermediate vertices in {1, ..., k-1}

Page 16: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall Algorithm Intuition

If w(i,j) is the weight of the edge between vertices i and j, we can recursively define shortestPath (i,j,k) as:

shortestPath(i, j, 0) = // base case

shortestPath(i, j, k) = min( // recursive)

Page 17: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall Algorithm Intuition

If w(i,j) is the weight of the edge between vertices i and j, we can recursively define shortestPath (i,j,k) as:

shortestPath(i, j, 0) = w(i, j) // base case

shortestPath(i, j, k) = min( shortestPath(i, j, k-1), // recursiveshortestPath(i, k, k-1) + shortestPath(k, j, k-1) )

Page 18: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Floyd-Warshall AlgorithmRunning Time?

FloydWarshall(G):Let d be a adj. matrix initialized to +infforeach (Vertex v : G):

d[v][v] = 0foreach (Edge (u, v) : G):

d[u][v] = cost(u, v)

foreach (Vertex u : G): foreach (Vertex v : G):

foreach (Vertex w : G):if d[u, v] > d[u, w] + d[w, v]:

d[u, v] = d[u, w] + d[w, v]

6789

10111213141516

Page 19: cs225sp19-42-FloydWarshall-slidesCS 225 Data Structures April 29 –Floyd-Warshall’sAlgorithm Wade Fagen-Ulmschneider, Craig Zilles

Final Exam Review Session• Implementations• Edge List• Adjacency Matrix• Adjacency List

• Traversals• Breadth First• Depth First

• Minimum Spanning Tree• Kruskal’s Algorithm• Prim’s Algorithm

• Shortest Path• Dijkstra’s Algorithm• Floyd-Warshall’s Algorithm

...and this is just the beginning. The journey continues to CS 374!