Path Finding Algorithm

Bellman-Ford Algorithm

回顧

Bellman-Ford Algorithm

  • 對圖進行 V-1 次鬆弛 (relax)

假設圖上有 V 個頂點

(因最多經過 V-1 條邊,必定到達終點)

  • 假設進行 V 次仍能降低 cost,則表示有負權環 (negative cycle)

(通常還未進行到 V-1 次時,就已不會降低 cost)

  • 常見優化:假設進行 M 次 (M < V-1) 即不降低 cost,則可直接終止演算法
a b c d e f g

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

V=7
|V-1|=6
(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 6

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 6 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 6 5 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 6 5 5 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 3 5 5 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

5+(-2)<6
a b c d e f g
0 3 5 5 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

5+1>5
a b c d e f g
0 3 3 5 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

5+(-2)<5
a b c d e f g
0 3 3 5 5 4

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 3 3 5 5 4 8

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

a b c d e f g
0 3 3 5 5 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

4+3<8

First round completed

1st

a b c d e f g
0 3 3 5 5 4 7
0 3 3 5 5 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

Second round start

a b c d e f g
0 3 3 5 5 4 7
0 3 3 5 5 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

0+6>3
a b c d e f g
0 3 3 5 5 4 7
0 3 3 5 5 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

0+5>3
a b c d e f g
0 3 3 5 5 4 7
0 3 3 5 5 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

0+5=5
a b c d e f g
0 3 3 5 5 4 7
0 3 3 5 2 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

3+(-1)<5
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

3+(-2)<3
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

3+1>2
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

5+(-2)=3
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 7

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

5+(-1)=4
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

2+3<7
a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 5

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

4+3>5

Second round completed

2nd

a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 5
0 1 3 5 0 4 3

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

2nd

3rd

a b c d e f g
0 3 3 5 5 4 7
0 1 3 5 2 4 5
0 1 3 5 0 4 3
0 1 3 5 0 4 3

a

b

c

d

e

f

g

6

5

5

-2

-2

-1

1

-1

3

3

(a,b)(a,c)(a,d)(b,e)(c,b)(c,e)(d,c)(d,f)(e,g)(f,g)

EdgeList:

1st

2nd

3rd

4th

Nothing changed

a

b

c

d

4

5

3

-10

a b c d
(c,b)(d,c)(a,d)(a,b)

EdgeList:

a

b

c

d

4

5

3

-10

a b c d
0
(c,b)(d,c)(a,d)(a,b)

EdgeList:

a

b

c

d

4

5

3

-10

a b c d
0
(c,b)(d,c)(a,d)(a,b)

EdgeList:

a

b

c

d

4

5

3

-10

a b c d
0 5
(c,b)(d,c)(a,d)(a,b)

EdgeList:

a

b

c

d

4

5

3

-10

a b c d
0 4 5
(c,b)(d,c)(a,d)(a,b)

EdgeList:

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
(c,b)(d,c)(a,d)(a,b)

EdgeList:

1st

2nd

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
0 -2 8 5
(c,b)(d,c)(a,d)(a,b)

EdgeList:

1st

2nd

3rd

a

b

c

d

4

5

3

-10

a b c d
0
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

a

b

c

d

4

5

3

-10

a b c d
0
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

a

b

c

d

4

5

3

-10

a b c d
0
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

a

b

c

d

4

5

3

-10

a b c d
0 5
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

a

b

c

d

4

5

3

-10

a b c d
0 4 5
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

a

b

c

d

4

5

3

-10

a b c d
0 4 5
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

4+5>5

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

1st

2nd

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
0 -2 8 5
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

1st

2nd

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
0 -2 8 3
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

1st

2nd

-2+5<5

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
0 -2 8 3
0 -2 8 3
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

1st

2nd

3rd

a

b

c

d

4

5

3

-10

a b c d
0 4 5
0 4 8 5
0 -2 8 3
0 -2 6 3
(c,b)(d,c)(a,d)(a,b)(b,d)

EdgeList:

5

1st

2nd

3rd

3+3<8

Negative cycle detected

b

c

d

3

-10

5

Negative cycle

5+3-10=-2

References

Bellman Ford Algorithm

By Travor Lee

Bellman Ford Algorithm

  • 185