アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf ·...

Post on 30-Oct-2019

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

アルゴリズム入門(4)(貪欲法)

2

貪欲法とは

ステップごとに計算が進むアルゴリズムで、各ステップにおいて、その時点で最も得をする選択をするアルゴリズム。(後のことは考えない。)

3

最小全域木問題

A町

B町

C町 D町

E町

F町

光ファイバを引いて、全ての町をネットワークで繋ぎたい。

4

ただし、

A B C D E FA - × 3 10 7 9B - 4 2 7 ×C - 3 × ×D - 6 9E - 8F -

A町とC町の間にファイバを引くのに3000万円かかる。

C町とE町の間にはファイバは引けない。

できるだけ安い費用で、全ての町を繋ぎたい。

グラフ問題として定式化する。

5

グラフ表現A

C D

枝の重みは、かかる費用。道を作れないところには、枝は張らない。

この中から枝を選んで連結にする。ただし、使われる枝の重みの合計が最小になるように。

9

9

7

106

3

4

3

2

7 8

6

考察

最適解は、絶対に閉路を持たない。閉路から1本取り除いても連結性は保たれるし、コストは減るだけ。

よって、解は「木」。 なので「最小全域木問題」と呼ばれる。

7

問題: この例題の最適解は?A

C D

9

9

7

10

6

3

4

3

2

7 8

8

Kruskal(クラスカル)のアルゴリズム

C D

9

9

7

10

6

3

4

3

2

7 8

枝をコストの低い順に見ていき、それを加えることによってサイクルが出来ないならば加える。

これで全部つながったので終わり。

9

最適性の証明

アルゴリズムの答(T)

もしアルゴリズムの答が最適ではないとすると、別に最適解が存在する。それをT’とする。(複数ある場合の選び方は後述。)

最適解(T’)

10

Tに枝が付け加えられた順番に、番号をつける。

初めて最適解と違う枝を選んだ瞬間を考える。(ここでは③)しかも、最適解T’の候補はたくさんあるかもしれないが、この「③」が出来るだけ大きくなるものを選ぶ。(つまり、①、②、③全部を含んでいる最適解はない。)

アルゴリズムの答(T)

最適解(T’)

11

初めて最適解と違う枝を選んだ瞬間を考える。(ここでは③)

今選ぼうとしている枝は、成分DとEをつなげようとしている。とろこで、最適解も当然、DとEは何らかの形でつながっている。

アルゴリズムの答(T)

最適解(T’)

12

初めて最適解と違う枝を選んだ瞬間を考える。(ここでは③)

今選ぼうとしている枝(e)は、成分DとEをつなげようとしている。とろこで、最適解も当然、DとEは何らかの形でつながっている。

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

13

DとEはe1、e2、 e3を使って、D-A-C-Eという経路で繋がっている。(連結成分内部の枝は、ここでは考えない。)e1、e2、 e3の中から任意に枝を1つ選ぶ。(例えばここではe2)。

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

14

アルゴリズムの今の時点で、 e2を選んでもサイクルはできない。(A、C、D、Eが全て非連結、特にAとDが非連結なので)けれども、そうではなく、③として枝eが選ばれた。

ということは、e2の重みは、eと同じか、 eよりも大きい。(アルゴリズムは、まだe2を見ていないから。見ていたら、既に加わっているはず。)

アルゴリズムの答(T)

e

最適解(T’)

AC

e1

e2

e3

15

T’にeを加えてe2を削除すると、別の全域木(T’’)ができる。

アルゴリズムの答(T)

e

最適解(T’)

AC

e1

e2

e3

16

「eの重み > e2の重み」があり得ないことは、先ほど述べた。「eの重み < e2の重み」だと、T’’は最適より良いことになる。→ 矛盾「eの重み = e2の重み」だと、T’’は①、②、③がTと一致する

最適解ということになる。 → 矛盾(証明終わり)

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

全域木(T’’)

AC

e3e1

17

計算時間m本の枝をソートするのでO(m log m)

後のことは考えずに、各時点で一番得をする選択をしている→ 貪欲アルゴリズム(グリーディーアルゴリズム)

18

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

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

19

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

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

問題:なぜこれが最大?

20

素朴な解法・各頂点について「選ぶ」、「選ばない」を決める。・その決め方が、独立頂点集合になっていたら○なっていなかったら×

・○の中で頂点数が最も多いものを出力する。

→ 必ず最適解が求まる

しかし、n頂点あったら、組み合わせは2 通りあり、全てチェックしないといけない。

n

→ 多項式時間アルゴリズムではない。

最大独立頂点集合問題はNP困難(多項式時間アルゴリズムがないだろうと思われている。)

21

最大独立頂点集合問題は、木に限定すると多項式時間で解ける。(貪欲アルゴリズムを使う)

以下のルールで、各頂点を赤か青に塗る。・葉は赤で塗る・子供が全て塗られた頂点について、

- 子供が全て青なら赤で塗る- 子供に1つでも赤があるなら青で塗る

赤の頂点全体を解とする

独立頂点集合であることは明らか(赤の頂点に隣接した頂点を赤で塗ることはないから)

赤に出来る時はしているので貪欲アルゴリズム

22

最適性について

Sと異なる任意の解Aが、サイズを小さくすることなくSに変形できることを言う。(つまりSより大きい解があったら矛盾する。)

今得られたこの解をSと呼ぶ

23

木を下から見て行って、初めてSとAで色が異なる頂点をvとする

……

v v

S A

この部分の配色は同じ

解Aの方も、Sと同様に色づけする。すなわち、Aに入っている頂点は赤で、入っていない頂点は青で塗る。

24

vが葉の場合

……

v v

S Aルールより、Sでは赤のはずなので、Aでは青で塗っている。

Aで、・vの親が青ならば、vをそのまま赤に変更する。・vの親が赤ならば、その親を青にして、vを赤にする。…

v…

v

v

v

・赤は依然として独立頂点集合のまま。・赤の数は減らない。

25

vが葉ではない場合

……

v v

S A

この部分の配色は同じ

vがSでは青で、Aでは赤で塗られていることはあり得ない。

問題:なぜ?

26

vが葉ではない場合

v v

S A

この部分の配色は同じ

vはSでは赤で、Aでは青のはず。

葉に対するのと同じ操作をするAで、・vの親が青ならば、vをそのまま赤に変更する。・vの親が赤ならば、その親を青にして、vを赤にする。(次ページ)

27

v v

v v

・赤は依然として独立頂点集合のまま。

・赤の数は減らない。

28

以上を葉から根に向かって実行していくと、サイズを減らすことなく、AをSに変形できる。よってSは最適解。

貪欲アルゴリズムが、いつもうまくいくとは限らない。

次ページの例

29

ナップサック問題 (寿司問題)

とろ うに えび いか あなご たまご たこ かっぱ

値段 ¥400 ¥300 ¥170 ¥160 ¥200 ¥80 ¥190 ¥100

満足度 100 90 65 50 70 30 55 20

持ち金: ¥1,000できるだけ満足度を大きくしたい(ただし、各ネタ1つしか買えない)

全ての選び方を試して、1,000円以内になるパターンで最大満足度を選べば、必ず最適解は求まる。しかし、n種類あるとすると、全てのパターンは2 通り。

n

30

貪欲法1: 満足度の大きいものから順に選んでいく

とろ うに えび いか あなご たまご たこ かっぱ

値段 ¥400 ¥300 ¥170 ¥160 ¥200 ¥80 ¥190 ¥100

満足度 100 90 65 50 70 30 55 20

とろ 400 100金額 満足度

合計 400 100

うに 300 90

700 190900 260

あなご 200 70

980 290

えび 170 65たこ 190 55いか 160 50たまご 80 30

31

貪欲法2: 満足度/値段(値段あたりの満足度)の大きいものから順に選んでいく

とろ うに えび いか あなご たまご たこ かっぱ

値段 ¥400 ¥300 ¥170 ¥160 ¥200 ¥80 ¥190 ¥100

満足度 100 90 65 50 70 30 55 20

満足度/値段

0.25 0.3 0.38 0.31 0.35 0.375 0.28 0.2

金額 満足度

合計 170 65

うに 300 90

250 95450 165

あなご 200 70

610 215

えび 170 65

いか 160 50

たまご 80 30

910 305

32

問題:最適解は?

とろ うに えび いか あなご たまご たこ かっぱ

値段 ¥400 ¥300 ¥170 ¥160 ¥200 ¥80 ¥190 ¥100

満足度 100 90 65 50 70 30 55 20

33

最小頂点被覆問題

7個の頂点4個の頂点

枝:道路頂点:交差点

交差点にガードマンを配置して、全ての道を警備したい。できるだけ少ないガードマンで済ませるには、どこに配置したら良いか?

ちなみに、3個では無理。

問題:なぜ?

問題:最適は?

34

単純なアルゴリズム:各頂点、選ぶか選ばないかを固定する。それで条件を満たしていたら○満たしていなかったら×

○である選び方のうち、選んでいる頂点数が最も少ないものを出力する。

グラフ的な言い方をすると、各枝、少なくともどちらか一方の端点が選ばれているように、頂点を選びなさい。ただし、出来るだけ少ない頂点にすること。

しかし、頂点の選び方は指数個(2 )ある。多項式時間アルゴリズムではない。

n

35

貪欲アルゴリズム:次数(1つの頂点から伸びている枝の数)の大きい頂点を選ぶと、たくさんの枝をカバーできるので嬉しい。

以下を繰り返す。次数が一番大きい頂点を選ぶ。それによってカバーされる枝を削除する。

36

問題:貪欲アルゴリズムでは最適解が求まらない都合の悪い入力グラフはあるか?

top related