跳到主要内容

東京工業大学 情報理工学院 情報工学系 2018年8月実施 午前 3.

Author​

祭音Myyura (co-authored with GPT 5.6 SOL)

Description​

1)​

NN 個の品物の集合を GG とし,品物 g∈Gg\in G の体積を volume⁡(g)\operatorname{volume}(g),価値を value⁡(g)\operatorname{value}(g) とする。GG の要素を体積の小さい順に並べた列を (g1,g2,…,gN)(g_1,g_2,\ldots,g_N),つまり 1≤i<i′≤N1\le i<i'\le N のとき volume⁡(gi)≤volume⁡(gi′)\operatorname{volume}(g_i)\le\operatorname{volume}(g_{i'}) とする。ここで容積 WW のナップザックが与えられたとき,WW の範囲内で価値の総和が最大となる品物の集合 S⊆GS\subseteq G を見つけることを考える。以下,SS を GG と WW に対するナップザック問題解と呼ぶ。

G0G_0 を空集合 ∅\varnothing とし,1≤i≤N1\le i\le N であるような ii について Gi=Gi−1∪{gi}G_i=G_{i-1}\cup\{g_i\} とする。次に0個以上の品物の体積の合計となり得る値の集合

{∑g∈Xvolume⁡(g)∣X⊆G}\left\{\sum_{g\in X}\operatorname{volume}(g)\mathrel{\big|}X\subseteq G\right\}

の要素の値を小さい順に並べた列を W0,W1,…,Wj,…W_0,W_1,\ldots,W_j,\ldots とする。ただし W0W_0 は品物が0個の時の合計体積をあらわす。

このとき,品物の集合 GiG_i と容積 WjW_j のナップザックに対するナップザック問題解 Si,jS_{i,j} の価値の総和 Ti,jT_{i,j} は下記の式で与えられる:ただし max⁡U\max U は実数の有限集合 UU の最大値を返す。

T0,0=0,T0,j=①(ただし 1≤j),Ti,0=②,Ti,j={Ti−1,j(Wj<volume⁡(gi) かつ 1≤j),max⁡{Ti−1,j,Ti−1,h+value⁡(gi)}(Wj≥volume⁡(gi) かつ 1≤j).\begin{aligned} T_{0,0}&=0,\\ T_{0,j}&=\text{①}\qquad(\text{ただし }1\le j),\\ T_{i,0}&=\text{②},\\ T_{i,j}&=\begin{cases} T_{i-1,j}&(W_j<\operatorname{volume}(g_i)\text{ かつ }1\le j),\\ \begin{gathered}\max\{T_{i-1,j},\\T_{i-1,h}+\operatorname{value}(g_i)\}\end{gathered}&(W_j\ge\operatorname{volume}(g_i)\text{ かつ }1\le j). \end{cases} \end{aligned}

ただし

h=max⁡{k∣Wk≤(Wj−volume⁡(gi))}.h=\max\{k\mid W_k\le(W_j-\operatorname{volume}(g_i))\}.

具体的に G={g1,g2,g3,g4}G=\{g_1,g_2,g_3,g_4\} とし,それぞれの品物の体積と価値を表3.1で与える。この GG における GiG_i と WjW_j に対するナップザック問題解 Si,jS_{i,j} を計算するための Ti,jT_{i,j} の値の表を表3.2に示す。この表の ii 行 jj 列に Ti,jT_{i,j} の値を入れる。

表3.1:各品物の体積と価値

品物volumevalue
g1g_1105
g2g_2156
g3g_3207
g4g_4308

表3.2:Ti,jT_{i,j} の値の表

Ti,jT_{i,j}W0W_0W1W_1W2W_2W3W_3W4W_4W5W_5W6W_6W7W_7W8W_8
G0G_00①①①①①①①①
G1G_1②55555555
G2G_2②5661111111111
G3G_3②56711③④⑤⑥
G4G_4②56711

以下の問いに答えよ。

a) G1,G2,G3,G4G_1,G_2,G_3,G_4 の要素をそれぞれ列挙せよ。

b) Wj (j=0,…,8)W_j\ (j=0,\ldots,8) の各値を示せ。

c) 表3.2の①~⑥の中に当てはまる値を記せ。

d) G4G_4 と W5,W6,W7,W8W_5,W_6,W_7,W_8 に対するナップザック問題解 S4,5,S4,6,S4,7,S4,8S_{4,5},S_{4,6},S_{4,7},S_{4,8} の品物の組み合わせと価値の合計をそれぞれ求めよ。

2)​

言語 ω\omega の項を以下のように帰納的に定義する。

  • 定数記号 S,K,IS,K,I は ω\omega の項である。
  • x,yx,y が ω\omega の項のとき,(x⋅y)(x\cdot y) は ω\omega の項である。
  • 以上のようにして定義されるもののみが ω\omega の項である。

この演算子 ⋅\cdot は左結合的であり,記述を簡潔にするために演算子 ⋅\cdot は省略できるものとする。すなわち x,y,z∈ωx,y,z\in\omega のとき ((x⋅y)⋅z)((x\cdot y)\cdot z) は xyzxyz,(x⋅(y⋅z))(x\cdot(y\cdot z)) は x(yz)x(yz) と書くことができる。

次に x,y,z∈ωx,y,z\in\omega に対して,S,K,IS,K,I それぞれの計算規則(左辺から右辺への変換規則)を以下のように定義する。

Ix⇒x,Kxy⇒x,Sxyz⇒xz(yz),x⇒x′ならばxy⇒x′y,y⇒y′ならばxy⇒xy′.\begin{aligned} Ix&\Rightarrow x,\\ Kxy&\Rightarrow x,\\ Sxyz&\Rightarrow xz(yz),\\ x\Rightarrow x'\quad&\text{ならば}\quad xy\Rightarrow x'y,\\ y\Rightarrow y'\quad&\text{ならば}\quad xy\Rightarrow xy'. \end{aligned}

上記の計算規則を用いて ω\omega の項を変換することをリダクションと呼ぶ。リダクションはそれ以上変換できないとき停止するものとする。これ以上リダクションできない項は正規形と呼ばれる。リダクションの例を以下に示す。

SIIx⇒Ix(Ix)⇒x(Ix)⇒xxSIIx\Rightarrow Ix(Ix)\Rightarrow x(Ix)\Rightarrow xx
S(K(SI))Kxy⇒K(SI)x(Kx)y⇒SI(Kx)y⇒Iy(Kxy)⇒y(Kxy)⇒yx\begin{aligned} S(K(SI))Kxy&\Rightarrow K(SI)x(Kx)y\\ &\Rightarrow SI(Kx)y\Rightarrow Iy(Kxy)\\ &\Rightarrow y(Kxy)\Rightarrow yx \end{aligned}

a) 任意の x∈ωx\in\omega について SKKxSKKx と IxIx のリダクションの結果が同じとなることを示せ。

b) T,FT,F を以下のように定義する。

T=K,F=KIT=K,\qquad F=KI

このとき,以下の式 (i)(ii) を正規形までリダクションせよ。ただし,x,yx,y は正規形とする。また,リダクション結果とともに正規形を求めた過程を示すこと。

(i) TxyTxy

(ii) FxyFxy

c) さらに ∨,∧,¬\lor,\land,\neg を以下のように定義する。

∨=SI(KT),∧=SS(K(KF)),¬=S(SI(KF))(KT).\begin{aligned} \lor&=SI(KT),\\ \land&=SS(K(KF)),\\ \neg&=S(SI(KF))(KT). \end{aligned}

これより,任意の x,y∈ωx,y\in\omega に対して,

∨xy=SI(KT)xy⇒Ix(KTx)y⇒x(KTx)y⇒xTy,∧xy=SS(K(KF))xy⇒Sx(K(KF)x)y⇒xy(K(KF)xy)⇒xy(KFy)⇒xyF,¬x=S(SI(KF))(KT)x⇒SI(KF)x(KTx)⇒Ix(KFx)(KTx)⇒x(KFx)(KTx)⇒xF(KTx)⇒xFT\begin{aligned} \lor xy&=SI(KT)xy\Rightarrow Ix(KTx)y\\ &\Rightarrow x(KTx)y\Rightarrow xTy,\\[4pt] \land xy&=SS(K(KF))xy\Rightarrow Sx(K(KF)x)y\\ &\Rightarrow xy(K(KF)xy)\Rightarrow xy(KFy)\Rightarrow xyF,\\[4pt] \neg x&=S(SI(KF))(KT)x\Rightarrow SI(KF)x(KTx)\\ &\Rightarrow Ix(KFx)(KTx)\Rightarrow x(KFx)(KTx)\\ &\Rightarrow xF(KTx)\Rightarrow xFT \end{aligned}

となる。このとき,以下の式 (iii)(iv)(v)(vi) を正規形までリダクションせよ。また,リダクション結果とともに正規形を求めた過程を示すこと。

(iii) ∨(¬T)T\lor(\neg T)T

(iv) ∨(¬T)F\lor(\neg T)F

(v) ∧(¬F)T\land(\neg F)T

(vi) ∧(¬F)F\land(\neg F)F

题目描述​

1)

设 NN 个物品构成的集合为 GG,物品 g∈Gg\in G 的体积为 volume⁡(g)\operatorname{volume}(g),价值为 value⁡(g)\operatorname{value}(g)。将 GG 的元素按体积从小到大排列成序列 (g1,g2,…,gN)(g_1,g_2,\ldots,g_N),即当 1≤i<i′≤N1\le i<i'\le N 时,volume⁡(gi)≤volume⁡(gi′)\operatorname{volume}(g_i)\le\operatorname{volume}(g_{i'})。给定容积为 WW 的背包,考虑寻找在容积 WW 的范围内价值总和最大的物品集合 S⊆GS\subseteq G。以下将 SS 称为关于 GG 和 WW 的背包问题解。

设 G0G_0 为空集 ∅\varnothing,对满足 1≤i≤N1\le i\le N 的 ii,令 Gi=Gi−1∪{gi}G_i=G_{i-1}\cup\{g_i\}。将0个或更多物品的总体积可能取到的值构成的集合

{∑g∈Xvolume⁡(g)∣X⊆G}\left\{\sum_{g\in X}\operatorname{volume}(g)\mathrel{\big|}X\subseteq G\right\}

中的元素按从小到大排列成序列 W0,W1,…,Wj,…W_0,W_1,\ldots,W_j,\ldots。其中 W0W_0 表示物品数为0时的总体积。

对于物品集合 GiG_i 和容积为 WjW_j 的背包,其背包问题解 Si,jS_{i,j} 的价值总和 Ti,jT_{i,j} 由下式给出。其中 max⁡U\max U 返回实数的有限集合 UU 的最大值。

T0,0=0,T0,j=①(1≤j),Ti,0=②,Ti,j={Ti−1,j(Wj<volume⁡(gi) 且 1≤j),max⁡{Ti−1,j,Ti−1,h+value⁡(gi)}(Wj≥volume⁡(gi) 且 1≤j).\begin{aligned} T_{0,0}&=0,\\ T_{0,j}&=\text{①}\qquad(1\le j),\\ T_{i,0}&=\text{②},\\ T_{i,j}&=\begin{cases} T_{i-1,j}&(W_j<\operatorname{volume}(g_i)\text{ 且 }1\le j),\\ \begin{gathered}\max\{T_{i-1,j},\\T_{i-1,h}+\operatorname{value}(g_i)\}\end{gathered}&(W_j\ge\operatorname{volume}(g_i)\text{ 且 }1\le j). \end{cases} \end{aligned}

其中

h=max⁡{k∣Wk≤(Wj−volume⁡(gi))}.h=\max\{k\mid W_k\le(W_j-\operatorname{volume}(g_i))\}.

具体设 G={g1,g2,g3,g4}G=\{g_1,g_2,g_3,g_4\},各物品的体积和价值由表3.1给出。为了计算此 GG 中关于 GiG_i 和 WjW_j 的背包问题解 Si,jS_{i,j},表3.2给出 Ti,jT_{i,j} 的值。在该表第 ii 行第 jj 列填入 Ti,jT_{i,j} 的值。

表3.1:各物品的体积和价值

物品体积价值
g1g_1105
g2g_2156
g3g_3207
g4g_4308

表3.2:Ti,jT_{i,j} 的值

Ti,jT_{i,j}W0W_0W1W_1W2W_2W3W_3W4W_4W5W_5W6W_6W7W_7W8W_8
G0G_00①①①①①①①①
G1G_1②55555555
G2G_2②5661111111111
G3G_3②56711③④⑤⑥
G4G_4②56711

回答下列问题。

a) 分别列举 G1,G2,G3,G4G_1,G_2,G_3,G_4 的元素。

b) 给出 Wj (j=0,…,8)W_j\ (j=0,\ldots,8) 的各个值。

c) 写出表3.2中①~⑥应填入的值。

d) 对于 G4G_4 和 W5,W6,W7,W8W_5,W_6,W_7,W_8,分别求出背包问题解 S4,5,S4,6,S4,7,S4,8S_{4,5},S_{4,6},S_{4,7},S_{4,8} 中物品的组合及价值总和。

2)

按如下方式归纳定义语言 ω\omega 的项。

  • 常量符号 S,K,IS,K,I 是 ω\omega 的项。
  • 当 x,yx,y 是 ω\omega 的项时,(x⋅y)(x\cdot y) 是 ω\omega 的项。
  • 只有按上述方式定义的对象才是 ω\omega 的项。

运算符 ⋅\cdot 是左结合的,为使书写简洁,可以省略运算符 ⋅\cdot。也就是说,当 x,y,z∈ωx,y,z\in\omega 时,((x⋅y)⋅z)((x\cdot y)\cdot z) 可以写成 xyzxyz,(x⋅(y⋅z))(x\cdot(y\cdot z)) 可以写成 x(yz)x(yz)。

接下来对 x,y,z∈ωx,y,z\in\omega,将 S,K,IS,K,I 各自的计算规则(从左边到右边的变换规则)定义如下:

Ix⇒x,Kxy⇒x,Sxyz⇒xz(yz),x⇒x′则xy⇒x′y,y⇒y′则xy⇒xy′.\begin{aligned} Ix&\Rightarrow x,\\ Kxy&\Rightarrow x,\\ Sxyz&\Rightarrow xz(yz),\\ x\Rightarrow x'\quad&\text{则}\quad xy\Rightarrow x'y,\\ y\Rightarrow y'\quad&\text{则}\quad xy\Rightarrow xy'. \end{aligned}

使用上述计算规则变换 ω\omega 的项,称为归约。当无法进一步变换时,归约停止。不能进一步归约的项称为正规形。下面给出归约的例子。

SIIx⇒Ix(Ix)⇒x(Ix)⇒xxSIIx\Rightarrow Ix(Ix)\Rightarrow x(Ix)\Rightarrow xx
S(K(SI))Kxy⇒K(SI)x(Kx)y⇒SI(Kx)y⇒Iy(Kxy)⇒y(Kxy)⇒yx\begin{aligned} S(K(SI))Kxy&\Rightarrow K(SI)x(Kx)y\\ &\Rightarrow SI(Kx)y\Rightarrow Iy(Kxy)\\ &\Rightarrow y(Kxy)\Rightarrow yx \end{aligned}

a) 证明对任意 x∈ωx\in\omega,SKKxSKKx 与 IxIx 的归约结果相同。

b) 将 T,FT,F 定义为

T=K,F=KI.T=K,\qquad F=KI.

将下面的式 (i)(ii) 归约到正规形。假定 x,yx,y 为正规形。除归约结果外,还要写出求得正规形的过程。

(i) TxyTxy

(ii) FxyFxy

c) 进一步定义 ∨,∧,¬\lor,\land,\neg 如下:

∨=SI(KT),∧=SS(K(KF)),¬=S(SI(KF))(KT).\begin{aligned} \lor&=SI(KT),\\ \land&=SS(K(KF)),\\ \neg&=S(SI(KF))(KT). \end{aligned}

由此,对任意 x,y∈ωx,y\in\omega 有

∨xy=SI(KT)xy⇒Ix(KTx)y⇒x(KTx)y⇒xTy,∧xy=SS(K(KF))xy⇒Sx(K(KF)x)y⇒xy(K(KF)xy)⇒xy(KFy)⇒xyF,¬x=S(SI(KF))(KT)x⇒SI(KF)x(KTx)⇒Ix(KFx)(KTx)⇒x(KFx)(KTx)⇒xF(KTx)⇒xFT.\begin{aligned} \lor xy&=SI(KT)xy\Rightarrow Ix(KTx)y\\ &\Rightarrow x(KTx)y\Rightarrow xTy,\\[4pt] \land xy&=SS(K(KF))xy\Rightarrow Sx(K(KF)x)y\\ &\Rightarrow xy(K(KF)xy)\Rightarrow xy(KFy)\Rightarrow xyF,\\[4pt] \neg x&=S(SI(KF))(KT)x\Rightarrow SI(KF)x(KTx)\\ &\Rightarrow Ix(KFx)(KTx)\Rightarrow x(KFx)(KTx)\\ &\Rightarrow xF(KTx)\Rightarrow xFT. \end{aligned}

将下面的式 (iii)(iv)(v)(vi) 归约到正规形。除归约结果外,还要写出求得正规形的过程。

(iii) ∨(¬T)T\lor(\neg T)T

(iv) ∨(¬T)F\lor(\neg T)F

(v) ∧(¬F)T\land(\neg F)T

(vi) ∧(¬F)F\land(\neg F)F

Kai​

1)​

a)​

G1={g1},G2={g1,g2},G3={g1,g2,g3},G4={g1,g2,g3,g4}.\begin{gathered}G_1=\{g_1\},\\ G_2=\{g_1,g_2\},\\ G_3=\{g_1,g_2,g_3\},\\ G_4=\{g_1,g_2,g_3,g_4\}.\end{gathered}

b)​

(W0,…,W8)=(0,10,15,20,25,30,35,40,45).\boxed{(W_0,\ldots,W_8)=(0,10,15,20,25,30,35,40,45)}.

c)​

(1)=0,(2)=0,(3)=12,(4)=13,(5)=13,(6)=18.\begin{gathered}(1)=0,\quad(2)=0,\quad(3)=12,\\(4)=13,\quad(5)=13,\quad(6)=18.\end{gathered}

例えば容量30では g1,g3g_1,g_3 の価値12、容量35,40では g2,g3g_2,g_3 の価値13、容量45では g1,g2,g3g_1,g_2,g_3 の価値18が最適である。

d)​

容量最適な組合せ体積合計価値合計
W5=30W_5=30{g1,g3}\{g_1,g_3\}3012
W6=35W_6=35{g2,g3}\{g_2,g_3\}3513
W7=40W_7=40{g2,g3}\{g_2,g_3\} または {g1,g4}\{g_1,g_4\}35 または 4013
W8=45W_8=45{g1,g2,g3}\{g_1,g_2,g_3\}4518

2)​

a)​

SKKx⇒Kx(Kx)⇒x,Ix⇒x.SKKx\Rightarrow Kx(Kx)\Rightarrow x,\qquad Ix\Rightarrow x.

従って両者は同じ項 xx に帰着する。

b)​

(i)Txy=Kxy⇒x,\text{(i)}\quad Txy=Kxy\Rightarrow x,
(ii)Fxy=KIxy⇒Iy⇒y.\text{(ii)}\quad Fxy=KIxy\Rightarrow Iy\Rightarrow y.

x,yx,y は正規形なのでここで終了する。

c)​

まず

¬T⇒∗TFT=KFT⇒F=KI,\neg T\Rightarrow^*TFT=KFT\Rightarrow F=KI,
¬F⇒∗FFT=KIFT⇒IT⇒T=K.\neg F\Rightarrow^*FFT=KIFT\Rightarrow IT\Rightarrow T=K.

問題で示された変換を用いると

(iii)∨(¬T)T⇒∗∨FT⇒∗FTT=KITT⇒IT⇒T=K,(iv)∨(¬T)F⇒∗∨FF⇒∗FTF=KITF⇒IF⇒F=KI,(v)∧(¬F)T⇒∗∧TT⇒∗TTF=KTF⇒T=K,(vi)∧(¬F)F⇒∗∧TF⇒∗TFF=KFF⇒F=KI.\begin{aligned} \text{(iii)}\quad\lor(\neg T)T&\Rightarrow^*\lor FT\Rightarrow^*FTT\\&\qquad=KITT\Rightarrow IT\Rightarrow T=\boxed K,\\ \text{(iv)}\quad\lor(\neg T)F&\Rightarrow^*\lor FF\Rightarrow^*FTF\\&\qquad=KITF\Rightarrow IF\Rightarrow F=\boxed{KI},\\ \text{(v)}\quad\land(\neg F)T&\Rightarrow^*\land TT\Rightarrow^*TTF\\&\qquad=KTF\Rightarrow T=\boxed K,\\ \text{(vi)}\quad\land(\neg F)F&\Rightarrow^*\land TF\Rightarrow^*TFF\\&\qquad=KFF\Rightarrow F=\boxed{KI}. \end{aligned}

KK と KIKI はいずれも引数不足なので、それ以上規則を適用できない正規形である。