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

アルゴリズム入門 期末試験 解答例 問

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズム入門 期末試験 解答例 問"

Copied!
3
0
0

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

全文

(1)

アルゴリズム入門 期末試験 解答例

1.

(1) 与えられた整数を、大きい順(または小さい順)に並べ替える問題。

(2) 入力のサイズをnとしたとき、nの多項式関数(例えば3n2 など)の時間で動作を終了する アルゴリズムのこと。理論的には効率が良いとされる。

(3) アルゴリズムの動作が、ステップの繰り返しである場合、各ステップにおいて、その時点で 最も得となる選択をするアルゴリズムのこと。例としては、最小全域木問題に対するクラス カルのアルゴリズムがある。

(4) 常に最適解を求めるとは限らないが、高速に(多項式時間で)動作し、常に最適解に近い解 を求めるアルゴリズム。常に最適解のc倍以内の解を出力するアルゴリズムをc–近似アルゴ リズムという。

(5) 入力が時間とともに逐次的に与えられ、将来の入力が分からないままに、その時その時の入 力に対する答を求めるアルゴリズム。後で以前の答を変更することは許されない。例えば、

株価の変動に対して売り買いを決めるアルゴリズムが、この一例である。

2.

(1) 与えられたグラフの頂点集合V を、ABにまたがる枝の数が最大になるように、2つの 頂点部分集合ABに分割する問題。

(2) (i) まず、頂点集合をABに適当に分割する。A からB1頂点移す、またはBからA へ1頂点移すことにより答が改善されるならば、そのように移動する。これを繰り返し行い、

そのような頂点が存在しなくなった時点で、その時の解を出力する。

(ii)頂点を1つずつABに入れていく。頂点vを入れる番では、vAに入れた場合と、

Bに入れた場合とで、その時点でのCUTのサイズが大きくなる(正確には、「小さくなら ない」)方に入れる。これを全ての頂点がどちらかの集合に入るまで繰り返し、出力する。

(iii) 各頂点について、それぞれ独立に、確率1/2Aに入れるかBに入れるかを決める。

(3) (i) アルゴリズムが終了した時点で、ABにまたがる枝の集合をEABAの内部にある

枝集合をEAABの内部にある枝集合をEBBとする。全ての枝の集合をEとすると、(1)

|E| = |EAA|+|EBB|+|EAB|である。今、Aに入っている頂点viを考える。viから延び ている枝のうち、Aに向かうものの数をei,ABに向かうものの数を ei,B とする。このと きei,A ≤ei,B となる。そうでなければ、vi Bに移すことで改善されるため、アルゴリズ ムは終了していないはずである。上記の不等式をAに入っている全ての頂点について足し あわせると、(2) 2|EAA| ≤ |EAB|が得られる。(この加算により、EAAの各枝はちょうど2 回ずつ、EABの各枝はちょうど1回ずつ数えられていることに注意。)Bに入っている頂点 viについて同様の考察を行うと、(3) 2|EBB| ≤ |EAB|が得られる。(2)(3)を足すと、(4)

|EAA|+|EBB| ≤ |EAB|となる。(1)(4)から、|EAB| ≥ |E|/2となる。最適解は|E|以下 なので、近似度2が示された。

(ii)頂点viを入れる番を考える。viから既にAに入っている頂点へと向かう枝数をxi,Avi

から既にBに入っている頂点へと向かう枝数をxi,B とする。貪欲アルゴリズムは、頂点vi をどちらかに入れることで、今考えている枝(xi,A+xi,B本)をカットに含めるか含めない かを完全に決定してしまうことに注意する。xi,A ≥xi,Bの場合、viBに入れられる。こ

(2)

のとき、今見ている枝のうち半分以上となるxi,A本をカットに加えることが出来る。逆に xi,A < xi,Bの場合、viAに入れられる。このとき、今見ている枝のうち半分より多いxi,B

本をカットに加えることが出来る。いずれの場合も、各時点で考えている枝数の半分以上は カットに加えるので、最終的に得られるカットのサイズは全枝数の半分以上となる。最適解 は全枝数以下なので、近似度は2となる。

(iii) 与えられた確率分布において、各枝eに対して確率変数xeを以下のように定義する。e

がカット枝となるならxe = 1、カット枝とならないならxe = 0。また、同じ確率分布にお いて、カットのサイズを表す確率変数をXとおくと、X= Σxeである。よって、解のサイ ズの期待値はE[X] =E[Σxe]である。ここで、期待値の線型性より、E[Σxe] = ΣE[xe] ある。任意の枝eに対して、その両端点がどちらに入るかで4通りの可能性があるが、全て 等確率で起こり、そのうち2通りにおいてxe= 1、残りの2通りにおいてxe = 0となるの で、E[xe] = 1/2となる。よって、E[X] = Σ(1/2) =m/2である。ただし、m は全ての枝 の数である。最適解はm以下なので、近似度2が示された。

3.

(1) グラフの各頂点を1度ずつ通る閉路。

(2) 持たない。グラフの頂点を後述の図のように色分けする。どの枝も、赤頂点と青頂点をつな ぐので、もしハミルトン閉路が存在するなら、赤と青を交互に辿るはずであり、赤と青の個 数は同じでなければならない。しかし、個数が違うので、ハミルトン閉路は持たない。(場 合分けをして、全ての可能性を潰していても、満点を与える。)

(3) 後述の図の通り。1345321というオイラー閉路が存在する。頂点1, 2, 4, 5の次数が全て2であることから、ハミルトン閉路を持つためには、これらに継っている枝 は全て通らなければならないが、頂点3に接続されている枝が4本選ばれているので、これ は無理である。

(4) ハミルトンパス問題を、ハミルトン閉路問題にリダクションする。ハミルトンパス問題の入 力となるグラフGが与えられたとき、ハミルトン閉路問題の入力グラフGを以下のように 作る。G1頂点付け加える。(付け加えた頂点をvとする。) vから元あった頂点全てに 対して枝を張る。以下では、このリダクションがyes/noを保存していること、すなわち、G がハミルトンパスを持つことと、Gがハミルトン閉路を持つことが同値であることを示す。

まず、Gがハミルトンパスを持つとして、それをv1−v2−v3− · · · −vnとする。すると、

Gには(v, v1)(v, vn)という枝があるので、Gはハミルトン閉路v−v1−v2−v3

· · · −vn−vを持つ。次に、Gがハミルトン閉路を持つとする。それを、vを始点として

v−v1−v2−v3− · · · −vn−vとすると、v1−v2−v3− · · · −vnGのハミルトンパス になっている。

捕捉:「ハミルトンパスはハミルトン閉路の一部であるから、より条件の厳しいハミルトン閉 路を見付けることは、ハミルトンパスをみつけることよりも難しい。」という趣旨の解答が 多かったが、これでは論理的に難しさを示したことにはならない。なお、上記のリダクショ ンではなく、別のリダクションを示したものがあった。元のグラフの2つの頂点に枝を1 付け加えて得られるグラフそれぞれに対して、ハミルトン閉路があるか否かをチェックする というものである。これも正解である。

(3)

1

3

2

4 5 6

7

8 9 10

11

問 4(2) の解答 問 4(3) の解答例

1 2

3

4 5

参照