名古屋工業大学 工学研究科 情報工学専攻 2019年度 計算機ソフトウェア(データ構造とアルゴリズム)
Author
GPT-5.6 Sol, 祭音Myyura
Description
ナップサック問題に関する次の (1)、(2) の問いに答えよ。ただし、同一のアイテムを二つ以上収納することはできないものとする。また、ナップサックに収納可能な重さの総和を容量と呼ぶ。
(1)
三つのアイテム A、B、C の重さをそれぞれ 2,3,1、価値をそれぞれ 5,7,3 とする。表 1 は、各列をナップサックに収納可能な容量、各行を収納するアイテムの候補とし、それぞれの設定における価値の総和の最大値を記載したものである。空欄 (a) から (c) に入るべき数値を答えよ。
| アイテム \ 容量 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|
| アイテムなし | 0 | 0 | 0 | 0 | 0 | 0 |
| アイテム A のみ | 0 | 0 | 5 | 5 | 5 | 5 |
| アイテム A と B | 0 | 0 | (a) | 7 | 7 | 12 |
| アイテム A と B と C | 0 | 3 | 5 | 8 | (b) | (c) |
(2)
次の疑似コードは、容量 Wmax に対して、n 個 (n≥1) のアイテムの重さを格納した配列 w[0…n−1] と価値を格納した配列 v[0…n−1] が与えられたときに、ナップサック問題を解くアルゴリズムである。二次元配列 M[0…n,0…Wmax] は (1) の表 1 に対応するものであり、要素 M[i,j] には、配列 w,v の添字順に前から i 個のアイテムを容量 j で詰めた場合の価値の総和の最大値が計算される。
M[0...n, 0...W_max] を用意する
j = 0,...,W_max に対して M[0,j] = 0,
i = 0,...,n に対して M[i,0] = 0 として初期化
for i = 1,...,n
for j = 1,...,W_max
if j < alpha
M[i,j] = M[i-1,j]
else
M[i,j] = max(M[i-1,j], M[i-1,j-beta] + gamma)
endif
endfor
endfor
ここでは重さと容量は正の整数であると仮定し、max は二つの引数の最大値を返す。また、k 番目のアイテムの重さと価値は w[k]、v[k] によって参照できるものとする。次の問いに答えよ。
- (ア) このアルゴリズムのように、問題を小さな部分問題に分解し、小さな問題の解を利用しながら問題のサイズを徐々に大きくして解を求める設計法を、次から選べ。
(a) 貪欲法,(d) 動的計画法,(b) ブルートフォース探索,(e) ハッシング.(c) クラスタリング,
- (イ) 空欄 α,β,γ に入るコードを次からそれぞれ選べ。ただし、同じ選択肢を何度選んでもよい。
(a) i−1,(e) w[i−1],(b) i,(f) w[i],(c) v[i−1],(g) M[i−1,j],(d) v[i],(h) M[i,j−1].
- (ウ) この疑似コードの n と Wmax に関する計算量の漸近的評価として当てはまるものを、以下からすべて選べ。
(a) O(n+Wmax),(d) Θ((logn)Wmax),(b) Ω((logn)Wmax),(e) O(nWmax).(c) O(n2Wmax),
Kai
(1)
各行を順に更新すると、完成した表は次のようになる。
| アイテム \ 容量 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|
| アイテムなし | 0 | 0 | 0 | 0 | 0 | 0 |
| アイテム A のみ | 0 | 0 | 5 | 5 | 5 | 5 |
| アイテム A と B | 0 | 0 | 5 | 7 | 7 | 12 |
| アイテム A と B と C | 0 | 3 | 5 | 8 | 10 | 12 |
例えば容量 4 では、B と C を選ぶと重さ 3+1=4、価値 7+3=10 となる。したがって、
(a)=5,(b)=10,(c)=12
である。
(2)
(ア)
小さい部分問題の解を表に保存して再利用しているので、
(d) 動的計画法
である。
(イ)
ループの i は「先頭から i 個」を表すため、今回追加するアイテムの添字は i−1 である。その重さを w[i−1]、価値を v[i−1] とすると、遷移は
M[i,j]={M[i−1,j],max{M[i−1,j], M[i−1,j−w[i−1]]+v[i−1]},j<w[i−1],j≥w[i−1]
となる。よって、
α=w[i−1] (e),β=w[i−1] (e),γ=v[i−1] (c)
である。
(ウ)
外側のループが n 回、内側のループが Wmax 回であり、各反復の処理は定数時間である。したがって計算量は
Θ(nWmax)
である。これに対して成立する選択肢をすべて挙げると、n=Ω(logn) より (b)、nWmax=O(n2Wmax) より (c)、および最も直接的な上界 (e) である。したがって、
(b), (c), (e)
となる。
一時プログラムで各アイテムについて全ての選択・非選択を列挙し、各容量の最適値と DP の全要素を比較した。両者は全行で一致し、最終表の各行はそれぞれ
[0, 0, 0, 0, 0, 0]
[0, 0, 5, 5, 5, 5]
[0, 0, 5, 7, 7, 12]
[0, 3, 5, 8, 10, 12]
となることを確認した。