• 検索結果がありません。

アルゴリズム入門(6)

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズム入門(6)"

Copied!
45
0
0

読み込み中.... (全文を見る)

全文

(1)

宮崎修一

京都大学 学術情報メディアセンター

アルゴリズム入門( 6 )

(動的計画法)

(2)

2

動的計画法の考え方:

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

部分問題を解いた結果を表にまとめておき、

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

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

解けたことになる。)

(3)

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行列

問題:掛け算は

全部で何回?

(4)

4

。。。。。。。

。。。。。。。

。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

p

×

q

)行列 (

q

×

r

)行列

。。。。。。。。。。

。。。。。。。。。。

。。。。。。。。。。

p

×

r

)行列

掛け算の回数は全体で

p

×

q

×

r

q

p q

r

r p

(5)

5

4つの行列の掛け算

× A

× A

× A

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

・掛け算結果は、順番に依らない。

・掛け算回数は、順番に大きく依存する。

A × A

50× 2×80= 8000回

結果は50×80行列

A × A

80× 3×20= 4800回

結果は80×20行列

×

50×80×20=80000回 計 92800回

A × A

2×80× 3= 480回

結果は 2× 3行列

A ×

50× 2× 3= 300回

結果は50× 3行列

× A

50× 3×20= 3000回 計 3780回

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

(6)

6

( )

( )

n

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

× A

× ・・・ × A

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

( A

) ( )( ) ( A

) A

( A

) ( A

) A

4800回 480回 8000回 480回

480+

120回 3200+

4800回 12000+

8000回

8000回 4800回

300+

480回

600回 780回

2000+

600回 8000+

4800+

80000回

780+

3000回

2600回

(7)

7

n

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

n

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

動的計画法

(8)

8

動的計画法の考え方(

n

=6の場合の例)

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を計算 する最小値

(9)

9

m[i, j]

: を計算するのに、掛け算回数を

一番少なくした場合の掛け算回数。

p

p

p

p

n p n-1

p n

・・・

i

i+1

・・・ A

j-1

j

つまり、求めたいのは

m[1, n]

(10)

10

第1ステップ:

m[i, i]=0

(全ての

i

に対して)

つまり、 A

i

を求めるのに掛け算回数は0回。

第2ステップ:

m[i, i+1]

を求める(

1≦in-1

つまり、 A

i

i+1

を求める掛け算回数。

i p i-1

p i

i+1 pi

pi+1

m[i, i+1]= p p p

i

i-1 i+1

(11)

11

第3ステップ:

m[i, i+2]

を求める(

1≦in-2

つまり、 を求める掛け算回数。

pi-1

p i+1

p i+1

p i+2

i

i+1

i+2

i

i+1

i+2

( ) A

i

( A

i+1

i+2

i

i+1

i+2 p

i-1

pi

p i

p i+2

i

i+1

i+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+1

i-1 i+2

i-1 i i+2

(12)

k

ステップ:

m[i, i+k-1]

を求める(

1≦in-k+1

) A

i

i+1

i+2

・・・ A

i+k-2

i+k-1

( )

i

i+1

i+2

・・・ A

i+k-2

i+k-1

( )

i

i+1

i+2

・・・ A

i+k-2

i+k-1

( )

・・・

( A

i

i+1

i+2

・・・ A

i+k-2

) A

i+k-1

( )

i

i+1

i+2

i+k-2

i+k-1

( ・・・ A

i+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 }

i

i-1 i+k-1

i+1

i-1 i+k-1

i+k-3

i-1 i+k-1

i+k-2

i-1 i+k-1

(13)

13

同様に進めて、第

n

ステップで

m[1, n]

が求まる。

計算時間は

O(n3 )

m[i, j]

O(n )

1つを計算するのに

O(n)

2

(14)

14

最大独立頂点集合問題(以前やった)

入力:グラフ

G=(V, E )

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

(15)

15

最大独立頂点集合問題(以前やった)

入力:グラフ

G=(V, E )

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

(16)

16

重み付き最大独立頂点集合問題

入力:グラフ

G=(V, E )

(各頂点に重みが付いている)

1

2

3 3

4 1

6 8

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

(ただしここでは、「サイズ」とは頂点の重みの和。)

(17)

17

重み無しの場合は、木では貪欲アルゴリズムで多項式時間で 解けることを見た。

重み付きの場合は、貪欲アルゴリズムはうまく働かない。

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

(18)

18

動的計画法を使うと、重み付きでも(木に限定すれば)

多項式時間で解ける。

T(v): v

を根とする 部分木

v

(19)

19

A(v):

v

を選ぶ」という条件の下での、

T(v)

の最大独立頂点集合のサイズ。

B(v):

v

を選ばない」という条件の下での、

T(v)

の最大独立頂点集合のサイズ。

5

問題:今の場合の

A(v)

B(v)

C(v)

を求めよ

C(v):

(何の条件もなく)、

T(v)

の最大独立頂点集合のサイズ。

A(v)=9 B(v)=10

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

v

6 3

1 3

1

(20)

20

A(v):

v

を選ぶ」という条件の下での、

T(v)

の最大独立頂点集合のサイズ。

B(v):

v

を選ばない」という条件の下での、

T(v)

の最大独立頂点集合のサイズ。

C(v):

(何の条件もなく)、

T(v)

の最大独立頂点集合のサイズ。

根を

r

とすると、

元の問題の最終的な

答えは

C(r) v

r

(21)

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

(22)

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

は選んでも選ばなくても良い。)

(23)

23

v

x y z

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

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

間にはお互いに枝がなく、また

v

とも枝が

ないので、それぞれ独立に計算できる。

(24)

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)

(25)

25

最短経路問題

入力:重みつきグラフ

G=(V, E) V

2

頂点

s

t

出力:

s

から

t

への最短経路

4

3

10

7

s 8

例:

t

2

5 2

1 v1

v2

v3

v4

問題:

s

から

t

への最短経路は?

その距離は?

(26)

26

単純な方法

・全ての

s-t

パスを列挙。

・それぞれの経路のコストを計算。

・最も短い経路を解として出力。

s v1 v3 t

s v2 v4 t

s v1 v4 t

12 16 11

s v1 v2 v4 t 10

… …

原理的には最適解が求まる。しかし。。。

・全てのパスを簡単に列挙できる?

・出来たとしても、そもそもパスが指数個あったら、

多項式時間アルゴリズムにはならない。

(27)

27

問題:

s

から

t

へのパスの数が(頂点数の)指数個ある例はあるか?

(28)

28

Dijkstra

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

ステップ

1

L=Φ

(空集合)とする。

各頂点(

v

)に値(

δ(v)

)をつける。

δ(s)=0

δ(v)=∞

s

以外の頂点

v

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

(29)

29

Dijkstra

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

ステップ

2

L

に頂点

s

を加える。

s

に隣接する頂点の値を

d(s,v)

に更新

(更新された頂点は、

s

にリンクを張る)

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

∞ ∞

∞ 2 ∞

∞ 10

d(s,v)

:枝

(s,v)

の重み

(30)

30

Dijkstra

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

ステップ

3

t

L

に入るまで、以下を繰り返す。

L

に入っていない頂点の中で、値が最小のものを

v

とする。

v

L

に加える。

L

に入っていない、

v

に隣接する全ての頂点

u

に対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }

とする。

・値が更新されたものはリンクを更新する。

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

2 ∞

10

∞9

∞ 10 4

(31)

31

Dijkstra

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

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

2 ∞

10 4

9 8

9

ステップ

3

t

L

に入るまで、以下を繰り返す。

L

に入っていない頂点の中で、値が最小のものを

v

とする。

v

L

に加える。

L

に入っていない、

v

に隣接する全ての頂点

u

に対して、

δ(u)= min {δ(u), δ(v)+d(v,u) }

とする。

・値が更新されたものはリンクを更新する。

(32)

32

Dijkstra

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

4

3

10

7

s 8

t 2

5 2

1 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) }

とする。

・値が更新されたものはリンクを更新する。

(33)

33

Dijkstra

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

4

3

10

7

s 8

t 2

5 2

1 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) }

とする。

・値が更新されたものはリンクを更新する。

(34)

34

10

Dijkstra

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

4

3

10

7

s 8

t 2

5 2

1 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) }

とする。

・値が更新されたものはリンクを更新する。

(35)

35

10

Dijkstra

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

ステップ

4

:この時点で

t

についている値が、

s

から

t

までの 最短距離。

t

にその値を付けるに至った経路が最短経路。

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

2

4

8

9

(36)

36

正しさの証明

アルゴリズムの任意の時点で、

L

に入っている頂点の値は、

s

からそこまでの最短距離」

を証明する。

つまり、

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

2

4

9

10

(37)

37

帰納法で証明する 最初:

L

に入っているのは

s

のみ。

s

の値は

0

s

から

s

までの最短距離は

0

。 よって成り立つ。

4

3

10

7

s 8

t 2

5 2

1 v1

v2

v3

v4 0

(38)

38

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

s 0

1

2 2

4 5

6

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

11

→8

→9

(39)

39

いま

xy, xz

が成り立っている。(

v

が選ばれたのだから)

x=min{a+d, c+e}

である。(

x

の値の決め方から)

d

s

e 0

a

b c

x y

z v

s

から

v

への最短距離が

x

でないとして、矛盾を導く。

x

より短い

s

v

パスがあったとする。その長さを

x’ < x

とする。

*

*

*

*

v1

v2

v3

v4

v5

(40)

40

d

s

e 0

a

b c

x y

z v

x’=

s

から

v

までの経路)

+d xa+d

x’<x

なので、(

s

から

v

までの経路 )

< a

となる。

ということは、

s

から(

L

の中にある)

v

への最短距離が

a

であること(つまり帰納法の仮定)に矛盾。

場合

(1)

:最後に使われた枝が、

L

の中の頂点から

v

に向かう。

v1

v5

v4

*

*

1

1 1

(41)

41

d

s

e 0

a

b c

x

y v

場合

(2)

:最後に使われた枝が、

L

の外の頂点から

v

に向かう。

f

v

から逆にたどって、初めて

L

に入るところ。

w

s

から

u

への最短経路は、帰納法の仮定より

c

なので、紫の道も、その最短路を通っているはず。

(さもなければ、

s

から

v

へ、紫よりも短い道がある。)

*

*

*

v1

u

*

(42)

42

d

s

e 0

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

*

u w

*

*

(43)

43

直観的には

s 0

1

2 2

4 5

8

これは確定

4より短くなりようがない

(他の頂点へ、赤の中から行くのは、

4以上かかるから)

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

1

1

(44)

44

計算時間

頂点は

n

個あり、それぞれが高々

n

回しか更新されない。

O(n )

枝は

m

本あり、それぞれ

1

回しか走査されない。

O(m)

よって全体で

O(n +m)

2

2

(45)

45

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

4 2

4 9

2 1

1

5

2 7

5 s

D 1

t 5

参照

関連したドキュメント

特に, “宇宙際 Teichm¨ uller 理論において遠 アーベル幾何学がどのような形で用いられるか ”, “ ある Diophantus 幾何学的帰結を得る

(中略) Lafforgue pointed out to us that the modules in our theory could be regarded as analogues of local shtukas in the case of mixed characteristic.... Breuil, Integral p-adic

新製品「G-SCAN Z」、 「G-SCAN Z Tab」を追加して新たにスタート 新製品「G-SCAN Z」、 「G-SCAN Z

日本語で書かれた解説がほとんどないので , 専門用 語の訳出を独自に試みた ( たとえば variety を「多様クラス」と訳したり , subdirect

[r]

The device accepts fundamental mode parallel resonant crystal or a single ended (LVCMOS/LVTTL) reference clock as input.. The output signals can be modulated using the spread

◆第2計画期間末までにグリーンエネルギー証書等 ※1 として発行 ※2

高効率熱源機器の導入(1.1) 高効率照明器具の導入(3.1) 高効率冷却塔の導入(1.2) 高輝度型誘導灯の導入(3.2)