アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方:...

45
宮崎修一 京都大学 学術情報メディアセンター アルゴリズム入門(6(動的計画法)

Transcript of アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方:...

Page 1: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

宮崎修一京都大学 学術情報メディアセンター

アルゴリズム入門(6)(動的計画法)

Page 2: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

2

動的計画法の考え方:

元の問題から、よりサイズの小さい「部分問題」を定義する。

部分問題を解いた結果を表にまとめておき、より大きなサイズの部分問題を解くときに、表の結果を利用する。

小さい部分問題から順番に解いて行って、最後の部分問題が元の問題そのものである。(よって、最後には元の問題が解けたことになる。)

Page 3: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

3

行列の掛け算

3 6 1

4 0 2

3 8 1 6

1 0 1 2

2 2 0 0

2×3行列 3×4行列

=17 26 9 30

16 36 4 24

2×4行列

問題:掛け算は全部で何回?

Page 4: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

4

。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(p×q)行列 (q×r)行列

=。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

(p×r)行列

掛け算の回数は全体でp×q×r回

q

p q

r

r

p

Page 5: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

5

4つの行列の掛け算A × A × A × A1 2 3 4

(50×2) (2×80) (80×3) (3×20)

・掛け算結果は、順番に依らない。・掛け算回数は、順番に大きく依存する。

A × A → 50× 2×80= 8000回 結果は50×80行列1 2

A × A → 80× 3×20= 4800回 結果は80×20行列3 4

× → 50×80×20=80000回

計 92800回

A × A → 2×80× 3= 480回 結果は 2× 3行列2 3

A × → 50× 2× 3= 300回 結果は50× 3行列1

4× A → 50× 3×20= 3000回

計 3780回

問題:これより少ない回数で出来る?

Page 6: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

6

( )( )

n個の行列が与えられたとき

A × A × ・・・ × A1 2 n

どういう順番で掛けていくのが、掛け算回数が最も少ないか?

A1A2A3 A4

A1 A2 A3 A4A1 A2 A3 A4( ) ( )( ) A1 A2 A3 A4( )

A2 A3A4( ) A2A3 A4( ) A1 A2A3A1A2 A3

4800回 480回 8000回 480回

480+120回

3200+4800回

12000+8000回

8000回 4800回

300+480回

600回 780回

2000+600回 8000+

4800+80000回

780+3000回

2600回

Page 7: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

7

n個の場合、場合分けは≧4 n

木全体を計算していたのでは、多項式時間では収まらない。↓

動的計画法

Page 8: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

8

動的計画法の考え方(n=6の場合の例)

A1A2A3A4A5A6

1、2-6 1-2、3-6 1-3、4-6 1-4、5-6 1-5、6

2、3-6 2-3、4-6 2-4、5-6 2-5,6

3-6を計算する最小値

3-6を計算する最小値

4-6を計算する最小値

4-6を計算する最小値

木のサイズは大きいのだけど、同じものが何度も出てくる。

↓同じ部分は1度だけ計算して表に蓄えておいて、後で使う。

| |動的計画法の考え方

4-6を計算する最小値

4-6を計算する最小値

Page 9: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

9

m[i, j]: を計算するのに、掛け算回数を一番少なくした場合の掛け算回数。

A1p0

p1

A2p1

p2

A npn-1

pn

・・・

Ai Ai+1 Aj-1 Aj・・・

つまり、求めたいのは m[1, n]。

Page 10: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

10

第1ステップ:

m[i, i]=0 (全てのiに対して)つまり、 を求めるのに掛け算回数は0回。Ai

第2ステップ:

m[i, i+1] を求める(1≦i≦n-1)つまり、 を求める掛け算回数。Ai Ai+1

A ipi-1

pi

A i+1pi

pi+1 m[i, i+1]= p p pii-1 i+1

Page 11: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

11

第3ステップ:

m[i, i+2] を求める(1≦i≦n-2)つまり、 を求める掛け算回数。

pi-1

pi+1

pi+1

pi+2

Ai Ai+1Ai+2

Ai Ai+1 Ai+2( ) Ai Ai+1Ai+2( )

Ai Ai+1 Ai+2 pi-1

pi

pi

pi+2

Ai Ai+1Ai+2

この2通りのうち、少ない方。

m[i, i+2]= min{m[i, i+1] + m[i+2, i+2] + p p p ,m[i, i] + m[i+1,i+2]} + p p p }

i+1i-1 i+2

ii-1 i+2

Page 12: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

第kステップ:

m[i, i+k-1] を求める(1≦i≦n-k+1)Ai Ai+1Ai+2 Ai+k-2 Ai+k-1・・・

( )Ai Ai+1Ai+2 Ai+k-2 Ai+k-1・・・

( )Ai Ai+1 Ai+2 Ai+k-2 Ai+k-1・・・( )

・・・

( )Ai Ai+1Ai+2 Ai+k-2 Ai+k-1・・・

( )Ai Ai+1Ai+2 Ai+k-2 Ai+k-1( )・・・Ai+k-3

12

m[i, i+k-1]= min{m[i, i]+ m[i, i+k-1]+ p p p , m[i, i+1]+m[i+2, i+k-1]+ p p p ,

・・・m[i, i+k-3]+m[i+k-2,i+k-1]+p p p ,m[i, i+k-2]+m[i+k-1,i+k-1] + p p p }

ii-1 i+k-1i+1i-1 i+k-1

i+k-3i-1 i+k-1

i+k-2i-1 i+k-1

Page 13: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

13

同様に進めて、第nステップでm[1, n]が求まる。

計算時間はO(n )。3

m[i, j]はO(n )。1つを計算するのにO(n)。

2

Page 14: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

14

最大独立頂点集合問題(以前やった)入力:グラフ G=(V, E )

独立頂点集合:間に枝のない頂点集合

Page 15: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

15

最大独立頂点集合問題(以前やった)入力:グラフ G=(V, E )

問題:最大サイズの独立頂点集合を求めよ。

Page 16: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

16

重み付き最大独立頂点集合問題入力:グラフ G=(V, E ) (各頂点に重みが付いている)

1

2

3

3

4

1

6

8

問題:最大サイズの独立頂点集合を求めよ。(ただしここでは、「サイズ」とは頂点の重みの和。)

Page 17: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

17

重み無しの場合は、木では貪欲アルゴリズムで多項式時間で解けることを見た。重み付きの場合は、貪欲アルゴリズムはうまく働かない。

問題:貪欲アルゴリズムがうまく働かない木の例を挙げよ。

Page 18: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

18

動的計画法を使うと、重み付きでも(木に限定すれば)多項式時間で解ける。

T(v): vを根とする部分木

v

Page 19: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

19

A(v): 「vを選ぶ」という条件の下での、T(v)の最大独立頂点集合のサイズ。

B(v): 「vを選ばない」という条件の下での、T(v)の最大独立頂点集合のサイズ。

5

問題:今の場合のA(v)、B(v)、C(v)を求めよ

C(v): (何の条件もなく)、T(v)の最大独立頂点集合のサイズ。

A(v)=9B(v)=10C(v)=max{A(v), B(v)}=10

v

36

31

1

Page 20: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

20

A(v): 「vを選ぶ」という条件の下での、T(v)の最大独立頂点集合のサイズ。

B(v): 「vを選ばない」という条件の下での、T(v)の最大独立頂点集合のサイズ。

C(v): (何の条件もなく)、T(v)の最大独立頂点集合のサイズ。

根をrとすると、元の問題の最終的な答えはC(r) v

r

Page 21: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

21

動的計画法の方針:葉から根に向かって、 A(v)、B(v)、C(v)を計算していく。

vが葉の場合

T(v)はv1個からなるので、A(v)= w(v), B(v)=0, C(v)=max{A(v), B(v)}= w(v).

以降、頂点vの重みをw(v)と書くことにする。

v

Page 22: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

22

vが葉でない場合

v

x y z

A(v)=

B(v)=

C(v)=max{A(v), B(v)}

w(v)+B(x)+B(y)+B(z)(vを選ぶとすると、x, y, zは選べない。)

C(x)+C(y)+C(z)(vを選ばないとすると、x, y, zは選んでも選ばなくても良い。)

Page 23: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

23

v

x y z

T(x) T(y) T(z)

T(x), T(y), T(z) 間にはお互いに枝がなく、またvとも枝がないので、それぞれ独立に計算できる。

Page 24: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

24

A(v)= w(v)+B(x)+B(y)+B(z)

B(v)=C(x)+C(y)+C(z)

C(v)=max{A(v), B(v)}

計算時間

d(v)-1個の表参照とd(v)-1回の足し算

d(v)-1個の表参照とd(v)回の足し算

1回の大小比較

頂点vに関する表計算にO(d(v))時間

全体では、Σd(v) = 2|E| = 2(n-1)

d(v):頂点vの次数

(木は |E| = n-1)

よって、計算時間はO(n)

Page 25: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

25

最短経路問題入力:重みつきグラフ G=(V, E)

Vの2頂点 sとt出力:sからtへの最短経路

4

3

10

7

8s

t例:

2

5

21

v1

v2

v3

v4

問題:sからtへの最短経路は?その距離は?

Page 26: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

26

単純な方法・全てのs-tパスを列挙。・それぞれの経路のコストを計算。・最も短い経路を解として出力。

s tv1 v3

s tv2 v4

s tv1 v4

12

1611

s tv1 v4 10v2

……

原理的には最適解が求まる。しかし。。。・全てのパスを簡単に列挙できる?・出来たとしても、そもそもパスが指数個あったら、多項式時間アルゴリズムにはならない。

Page 27: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

27

問題: sからtへのパスの数が(頂点数の)指数個ある例はあるか?

Page 28: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

28

Dijkstra(ダイクストラ)のアルゴリズム

ステップ1: L=Φ(空集合)とする。各頂点(v)に値(δ(v))をつける。δ(s)=0δ(v)=∞(s以外の頂点v)

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

Page 29: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

29

Dijkstra(ダイクストラ)のアルゴリズム

ステップ2: Lに頂点sを加える。sから到達可能な頂点の値をd(s,v)に更新(更新された頂点は、sにリンクを張る)

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

∞ ∞

∞2

∞10

Page 30: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

30

Dijkstra(ダイクストラ)のアルゴリズム

ステップ3: tがLに入るまで、以下を繰り返す。・Lに入っていない頂点の中で、値が最小のものをvとする。・vをLに加える。・Lに入っていない、vに隣接する全ての頂点uに対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }とする。・値が更新されたものはリンクを更新する。

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

∞2

10

∞9

∞104

Page 31: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

31

Dijkstra(ダイクストラ)のアルゴリズム

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

∞2

104

98

9

ステップ3: tがLに入るまで、以下を繰り返す。・Lに入っていない頂点の中で、値が最小のものをvとする。・vをLに加える。・Lに入っていない、vに隣接する全ての頂点uに対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }とする。・値が更新されたものはリンクを更新する。

Page 32: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

32

Dijkstra(ダイクストラ)のアルゴリズム

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

2

4

8

9

∞11

ステップ3: tがLに入るまで、以下を繰り返す。・Lに入っていない頂点の中で、値が最小のものをvとする。・vをLに加える。・Lに入っていない、vに隣接する全ての頂点uに対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }とする。・値が更新されたものはリンクを更新する。

Page 33: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

33

Dijkstra(ダイクストラ)のアルゴリズム

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

2

4

8

9

1110

ステップ3: tがLに入るまで、以下を繰り返す。・Lに入っていない頂点の中で、値が最小のものをvとする。・vをLに加える。・Lに入っていない、vに隣接する全ての頂点uに対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }とする。・値が更新されたものはリンクを更新する。

Page 34: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

34

10

Dijkstra(ダイクストラ)のアルゴリズム

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

2

4

8

9

ステップ3: tがLに入るまで、以下を繰り返す。・Lに入っていない頂点の中で、値が最小のものをvとする。・vをLに加える。・Lに入っていない、vに隣接する全ての頂点uに対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }とする。・値が更新されたものはリンクを更新する。

Page 35: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

35

10

Dijkstra(ダイクストラ)のアルゴリズム

ステップ4:この時点でtについている値が、sからtまでの最短距離。tにその値を付けるに至った経路が最短経路。

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

2

4

8

9

Page 36: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

36

正しさの証明

アルゴリズムの任意の時点で、「Lに入っている頂点の値は、sからそこまでの最短距離」

を証明する。つまり、

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

2

4

9

10

Page 37: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

37

帰納法で証明する

最初:Lに入っているのはsのみ。sの値は0。sからsまでの最短距離は0。

よって成り立つ。

4

3

10

7

8s

t

2

5

21

v1

v2

v3

v4

0

Page 38: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

38

あるステップで正しいとする

s 0

1

2

2

4

5

6

このとき、新たに加えられた頂点についても正しいことを示す。

11

→8

→9

Page 39: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

39

いまx≦y, x≦zが成り立っている。(v が選ばれたのだから)x=min{a+d, c+e}である。(xの値の決め方から)

d

s

e0

a

b

c

x

y

z

v

sからv への最短距離がxでないとして、矛盾を導く。xより短い s-v パスがあったとする。その長さをx’ < xとする。

*

*

**

v1v2

v3

v4

v5

Page 40: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

40

d

s

e0

a

b

c

x

y

z

v

x’=(sからv までの経路)+dx≦a+dx’<xなので、(sからv までの経路 )< aとなる。ということは、sから(Lの中にある)v への最短距離がaであること(つまり帰納法の仮定)に矛盾。

場合(1):最後に使われた枝が、Lの中の頂点からv に向かう。

v1

v5

v4

*

*

1

1

1

Page 41: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

41

d

s

e0

a

b

c

x

y

v

場合(2):最後に使われた枝が、Lの外の頂点からv に向かう。

f

v から逆にたどって、初めてLに入るところ。

w

sからuへの最短経路は、帰納法の仮定よりc。なので、紫の道も、その最短路を通っているはず。(さもなければ、sからv へ、紫よりも短い道がある。)

*

*

*

v1

u

*

Page 42: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

42

d

s

e0

a

b

c

x

y

v

場合(2):最後に使われた枝が、Lの外の頂点からv に向かう。

f

s→u→w路は、x’より短い。(紫がx’なのだから) つまりc+r < x’。wはuにつながっているので、uがLに入った時点でδ(w)はc+r以下であるはず。δ(w)≦c+r < x’< x つまり δ(w)<x。したがって、次のステップでv がLに入れられるのはおかしい。矛盾。

r

*

wu

*

*

Page 43: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

43

直観的には

s 0

1

2

2

4

5

8

これは確定4より短くなりようがない(他の頂点へ、赤の中から行くのは、4以上かかるから)

こいつは確定してはいけない8より短い道があるかも

1

1

Page 44: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

44

計算時間頂点はn個あり、それぞれが高々n回しか更新されない。

O(n )枝はm本あり、それぞれ1回しか走査されない。

O(m)よって全体でO(n +m)。

2

2

Page 45: アルゴリズム入門(6shuichi/algintro/alg-6s.pdf2 動的計画法の考え方: 元の問題から、よりサイズの小さい「部分問題」を定義する。部分問題を解いた結果を表にまとめておき、

45

問題:次のグラフの最短経路とその値を求めよ

4 2

4

9

2

1

1

5

2 7

5

s

D

1t

5