4.4 bellman-ford demoxiaojuan/algo16/slides/7demobellmanfor… · repeat v times: relax all e...

Post on 25-Sep-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Algorithms, 4th Edition · Robert Sedgewick and Kevin Wayne · Copyright © 2002–2012 · October 26, 2014 11:53:34 AM

AlgorithmsF O U R T H E D I T I O N

R O B E R T S E D G E W I C K K E V I N W A Y N E

4.4 BELLMAN-FORD DEMO

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

2

0→1 5.0

0→4 9.0

0→7 8.0

1→2 12.0

1→3 15.0

1→7 4.0

2→3 3.0

2→6 11.0

3→6 9.0

4→5 4.0

4→6 20.0

4→7 5.0

5→2 1.0

5→6 13.0

7→5 6.0

7→2 7.0

0

4

7

1 3

5

2

6

s

69

8

4

5

7

1

54

15

312

20

13

11

9

an edge-weighted digraph

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

3

4

7

1 3

5

2

6

initialize

0

v distTo[] edgeTo[]

0 0.0 -

1

2

3

4

5

6

7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

4

4

7

1 3

5

2

6

pass 0

0

0 5

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1

2

3

4

5

6

7

distTo[1]

distTo[0]

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

5

4

7

1 3

5

2

6

pass 0

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4

5

6

7

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

0

0 5

∞ 5

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

6

4

7

1 3

5

2

6

pass 0

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4

5

6

7

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

0

0

9

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

7

4

7

1 3

5

2

6

pass 0

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4 9.0 0→4

5

6

7

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

0

0

∞ 9

9

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

8

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4 9.0 0→4

5

6

7

0

∞8

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

9

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4 9.0 0→4

5

6

7 8.0 0→7

0

∞ 88

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

10

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2

3

4 9.0 0→4

5

6

7 8.0 0→7

5

12

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

11

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3

4 9.0 0→4

5

6

7 8.0 0→7

5

12

17

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

12

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

∞v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3

4 9.0 0→4

5

6

7 8.0 0→7

5

15

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

13

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

∞v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6

7 8.0 0→7

5

15

20

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

14

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6

7 8.0 0→7

5

8

4

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

15

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6

7 8.0 0→7

17

20

3

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

16

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6

7 8.0 0→7

17

11

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

17

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6 28.0 2→6

7 8.0 0→7

17

∞ 28

11

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

18

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6 28.0 2→6

7 8.0 0→7

20

28

9

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

19

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5

6 28.0 2→6

7 8.0 0→7

9

∞4

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

20

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

9

∞ 134

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

21

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

9 28

20

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

22

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

9

8

5

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

23

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 17.0 1→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

17

13

1

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

24

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

17

13

1

14

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

25

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 28.0 2→6

7 8.0 0→7

28

13 13

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

26

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

28

13 13

26

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

27

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

8

13

6

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

28

4

7

1 3

5

2

6

0

pass 0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

8

147

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

29

4

7

1 3

5

2

6

pass 1

0

0 5

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

5

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

30

4

7

1 3

5

2

6

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

0

0

9

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

9

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

31

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

0

8

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

8

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

32

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

5

12

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

14

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

33

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

5

15 v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

20

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

34

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

5

8

4

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

35

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

14

20

3

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 20.0 1→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

36

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

14

20

3

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

17

2-3 successfully relaxedin pass 1, but not pass 0

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

37

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

14

11

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 26.0 5→6

7 8.0 0→7

26

pass 1

Repeat V times: relax all E edges.

26

Bellman-Ford algorithm demo

38

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

14

25

11

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

2-6 successfully relaxedin pass 0 and pass 1

pass 1

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

39

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

17

9

25

pass 1

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

40

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

9

4

pass 1

13

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

41

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

9 25

20

pass 1

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

42

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

9

8

5

pass 1

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

43

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

14

13

1

pass 1

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

44

4

7

1 3

5

2

6

0

pass 1

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

25

13 13

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

45

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

8

13

6

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

pass 1

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

46

4

7

1 3

5

2

6

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

8

147

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

pass 1

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

47

4

7

1 3

5

2

6

pass 2, 3, 4, … (no further changes)

0

0→1 0→4 0→7 1→2 1→3 1→7 2→3 2→6 3→6 4→5 4→6 4→7 5→2 5→6 7→5 7→2

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

Repeat V times: relax all E edges.

Bellman-Ford algorithm demo

48

0

4

7

1

5

2

6

v distTo[] edgeTo[]

0 0.0 -

1 5.0 0→1

2 14.0 5→2

3 17.0 2→3

4 9.0 0→4

5 13.0 4→5

6 25.0 2→6

7 8.0 0→7

3

shortest-paths tree from vertex s

s

top related