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

36
宮崎修一 京都大学 学術情報メディアセンター アルゴリズム入門(4(貪欲法)

Upload: others

Post on 30-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

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

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

Page 2: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

2

貪欲法とは

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

Page 3: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

3

最小全域木問題

A町

B町

C町 D町

E町

F町

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

Page 4: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

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町の間にはファイバは引けない。

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

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

Page 5: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

5

グラフ表現A

C D

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

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

9

9

7

106

3

4

3

2

7 8

Page 6: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

6

考察

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

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

Page 7: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

7

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

C D

9

9

7

10

6

3

4

3

2

7 8

Page 8: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

8

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

C D

9

9

7

10

6

3

4

3

2

7 8

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

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

Page 9: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

9

最適性の証明

アルゴリズムの答(T)

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

最適解(T’)

Page 10: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

10

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

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

アルゴリズムの答(T)

最適解(T’)

Page 11: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

11

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

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

アルゴリズムの答(T)

最適解(T’)

Page 12: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

12

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

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

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

Page 13: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

13

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

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

Page 14: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

14

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

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

アルゴリズムの答(T)

e

最適解(T’)

AC

e1

e2

e3

Page 15: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

15

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

アルゴリズムの答(T)

e

最適解(T’)

AC

e1

e2

e3

Page 16: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

16

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

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

アルゴリズムの答(T)

最適解(T’)

AC

e1

e2

e3

e

全域木(T’’)

AC

e3e1

Page 17: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

17

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

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

Page 18: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

18

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

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

Page 19: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

19

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

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

問題:なぜこれが最大?

Page 20: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

20

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

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

→ 必ず最適解が求まる

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

n

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

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

Page 21: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

21

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

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

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

赤の頂点全体を解とする

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

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

Page 22: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

22

最適性について

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

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

Page 23: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

23

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

……

v v

S A

この部分の配色は同じ

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

Page 24: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

24

vが葉の場合

……

v v

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

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

v…

v

v

v

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

Page 25: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

25

vが葉ではない場合

……

v v

S A

この部分の配色は同じ

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

問題:なぜ?

Page 26: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

26

vが葉ではない場合

v v

S A

この部分の配色は同じ

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

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

Page 27: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

27

v v

v v

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

・赤の数は減らない。

Page 28: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

28

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

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

次ページの例

Page 29: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

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

Page 30: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

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

Page 31: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

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

Page 32: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

32

問題:最適解は?

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

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

満足度 100 90 65 50 70 30 55 20

Page 33: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

33

最小頂点被覆問題

7個の頂点4個の頂点

枝:道路頂点:交差点

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

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

問題:なぜ?

問題:最適は?

Page 34: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

34

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

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

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

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

n

Page 35: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

35

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

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

Page 36: アルゴリズム入門(4 - lab2.kuis.kyoto-u.ac.jpshuichi/algintro/alg-4s.pdf · 貪欲法とは ステップごとに計算が進むアルゴリズムで、各ステップにおいて、

36

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