§E13.18動的計画法

最終更新

最適化問題を、より小さい部分問題の最適値から組み立てて解く手法を動的計画法という。この手法を用いる際に確かめるべきことは二つある。第一に、部分問題のあいだの依存関係に循環が無く、値がそもそも定まるかどうかである。第二に、ある順序で機械的に値を埋めていく手続きが、本当に各部分問題の最適値を与えるかどうかである。

第二の点を「最適部分構造をもつから正しい」という一言で済ませることはできない。部分問題の値がどの順序で定まるのかと、その順序に沿った計算が漸化式の解に一致することは、別々に示すべき事柄である。本記事は、状態、遷移および境界値を有限有向非巡回グラフとして定式化し、この二点を証明する。すなわち、漸化式の解がただ一つ存在すること、および任意の位相順序に沿った評価がその解を与えることを、位相順序の添字についての帰納法によって示す。

0-1 ナップサック問題を代表的な最適化問題として取り上げ、最適値が漸化式を満たすことを実行可能解の集合の分割によって証明し、状態数と遷移数から時間計算量と空間計算量を導く。空間計算量は「アルゴリズムの正当性と計算量」が定義していないため、本記事で定義する。

以下、有向グラフの語彙は§D2.11 定義 1.1に、有向非巡回グラフと位相順序は§D2.11 定義 2.1に従う。有向グラフの弧集合はAAと書き、無向グラフの辺集合EEと区別する。

1 状態、遷移および境界値

動的計画法で現れる部分問題を状態とよび、状態のあいだの依存関係を弧で表す。弧の向きは「用いられる側から用いる側へ」と定める。この向きを採ると、位相順序に沿って前から評価するという手続きがそのまま意味をもつ。

定義 1.1. 有限集合QQとA⊆Q×QA\subseteq Q\times Qの組D=(Q,A)D=(Q,A)が§D2.11 定義 1.1の意味での有向グラフであり、かつ§D2.11 定義 2.1の意味での有向非巡回グラフであるとする。QQの要素を状態 (state) といい、弧(t,s)∈A(t,s)\in Aを「状態ssの値を定めるために状態ttの値を用いる」と読む。状態s∈Qs\in Qに対し

N−(s)={t∈Q: (t,s)∈A}N^{-}(s)=\{t\in Q:\ (t,s)\in A\}

と置き、ssの先行状態の集合 (predecessor state set) という。その要素数は入次数deg⁡−(s)\deg^{-}(s)に等しい。deg⁡−(s)=0\deg^{-}(s)=0を満たす状態を境界状態 (boundary state) といい、境界状態の全体をQ0Q_0と書く。

さらに、写像b:Q0→Rb:Q_0\to\mathbb Rと、各s∈Q∖Q0s\in Q\setminus Q_0に対する写像gs:RN−(s)→Rg_s:\mathbb R^{N^{-}(s)}\to\mathbb Rが与えられているとする。ここでRN−(s)\mathbb R^{N^{-}(s)}はN−(s)N^{-}(s)からR\mathbb Rへの写像全体を表す。組

Σ=(Q, A, b, (gs)s∈Q∖Q0)\Sigma=\bigl(Q,\ A,\ b,\ (g_s)_{s\in Q\setminus Q_0}\bigr)

を状態遷移図式 (state transition scheme) という。bbを境界値 (boundary value)、gsg_sを遷移関数 (transition function) という。∣Q∣\lvert Q\rvertをΣ\Sigmaの状態数 (number of states)、∣A∣\lvert A\rvertを遷移数 (number of transitions) という。

定義 1.2. 状態遷移図式Σ\Sigmaに対し、写像V:Q→RV:Q\to\mathbb Rが次の二条件を満たすとき、VVをΣ\Sigmaの解 (solution) という。

  1. すべてのs∈Q0s\in Q_0に対しV(s)=b(s)V(s)=b(s)が成り立つ。
  2. すべてのs∈Q∖Q0s\in Q\setminus Q_0に対しV(s)=gs((V(t))t∈N−(s))V(s)=g_s\bigl((V(t))_{t\in N^{-}(s)}\bigr)が成り立つ。

この二条件をあわせてΣ\Sigmaの漸化式 (recurrence relation) という。

漸化式は、各状態の値を先行状態の値によって記述するだけであり、値を求める順序を指定していない。順序を与えるのが位相順序である。

定義 1.3.Σ\Sigmaを状態遷移図式とし、N=∣Q∣N=\lvert Q\rvertとする。s1,s2,…,sNs_1,s_2,\dots,s_NをD=(Q,A)D=(Q,A)の位相順序(§D2.11 定義 2.1)とする。次の手続きを、この位相順序に沿った 評価 (evaluation) という。i=1,2,…,Ni=1,2,\dots,Nの順に、実数uiu_iを

  1. si∈Q0s_i\in Q_0のときui=b(si)u_i=b(s_i)、
  2. si∉Q0s_i\notin Q_0のときui=gsi((uι(t))t∈N−(si))u_i=g_{s_i}\bigl((u_{\iota(t)})_{t\in N^{-}(s_i)}\bigr)

と定める。ここでι(t)\iota(t)はsι(t)=ts_{\iota(t)}=tを満たす添字を表す。

1.1 証明方針

主定理は三つの主張を含む。定理 1.4 (1)は位相順序の存在であり、これはDDが有向非巡回グラフであることから§D2.11 定理 2.3によって直ちに従う。

定理 1.4 (2)は、定義 1.3の手続きが矛盾なく定まることである。ここで確かめるべきことは、uiu_iを定める式の右辺に現れる添字ι(t)\iota(t)がすべてiiより小さいことである。t∈N−(si)t\in N^{-}(s_i)は(t,si)∈A(t,s_i)\in Aを意味し、位相順序の定義はAAのすべての弧が列の前から後ろへ向くことを要求するので、ι(t)<i\iota(t)<iが従う。したがってiiの小さい順に定めれば、右辺の値はすべて既に定まっている。

定理 1.4 (3)は、解がただ一つ存在し、それが評価の結果に一致することである。一意性は、二つの解VVとV′V'をとり、V(si)=V′(si)V(s_i)=V'(s_i)を添字iiについての累積帰納法(§D2.1 命題 1.2)で示す。境界状態の場合は両者ともb(si)b(s_i)に等しく、境界状態でない場合は、先行状態の添字がiiより小さいことから帰納法の仮定によってgsig_{s_i}の引数が一致し、値も一致する。存在は、評価が与えるuiu_iによってV(si)=uiV(s_i)=u_iと定め、これが漸化式の二条件を満たすことを確かめれば得られる。確かめる際にも、ι(t)<i\iota(t)<iという事実を用いてuι(t)=V(t)u_{\iota(t)}=V(t)と読み替える。

定理 1.4.Σ=(Q,A,b,(gs))\Sigma=\bigl(Q,A,b,(g_s)\bigr)を状態遷移図式とし、N=∣Q∣N=\lvert Q\rvertとする。このとき次の三つが成り立つ。

  1. D=(Q,A)D=(Q,A)の位相順序が存在する。
  2. 位相順序s1,…,sNs_1,\dots,s_Nを一つとると、定義 1.3の評価は矛盾なく定まる。すなわち、si∉Q0s_i\notin Q_0かつt∈N−(si)t\in N^{-}(s_i)ならばι(t)<i\iota(t)<iが成り立ち、uiu_iを定める時点でuι(t)u_{\iota(t)}は既に定まっている。
  3. Σ\Sigmaの解はただ一つ存在する。それをVVと書くと、すべてのiiについてui=V(si)u_i=V(s_i)が成り立つ。

証明.(1)を示す。DDは有向非巡回グラフであるから、§D2.11 定理 2.3によりDDの位相順序が存在する。

(2)を示す。位相順序s1,…,sNs_1,\dots,s_NはQQのすべての状態をちょうど一度ずつ並べた列であるから、各t∈Qt\in Qに対してsι(t)=ts_{\iota(t)}=tを満たす添字ι(t)∈{1,…,N}\iota(t)\in\{1,\dots,N\}がただ一つ定まる。si∉Q0s_i\notin Q_0かつt∈N−(si)t\in N^{-}(s_i)とすると(t,si)∈A(t,s_i)\in Aである。t=sι(t)t=s_{\iota(t)}かつsis_iは第ii項であるから、位相順序の定義(AAのすべての弧(sk,sl)(s_k,s_l)についてk<lk<l)によりι(t)<i\iota(t)<iである。よってuiu_iを定める式の右辺に現れる値はすべて添字がiiより小さく、iiの小さい順に定めれば既に定まっている。i=1,…,Ni=1,\dots,Nの順に一つずつ定めれば、すべてのuiu_iが定まる。

(3)の一意性を示す。VVとV′V'をともにΣ\Sigmaの解とする。述語P(i)P(i)を「1≤i≤N1\le i\le NならばV(si)=V′(si)V(s_i)=V'(s_i)である」と定め、PPが全ての非負整数について成り立つことを累積帰納法(§D2.1 命題 1.2)で示す。iiをとり、iiより小さいすべての添字でPPが成り立つと仮定する。i=0i=0またはi>Ni>NならばP(i)P(i)は空虚に成り立つ。1≤i≤N1\le i\le Nとする。

si∈Q0s_i\in Q_0のときは、定義 1.2 条件 (a)によりV(si)=b(si)=V′(si)V(s_i)=b(s_i)=V'(s_i)である。

si∉Q0s_i\notin Q_0のときは、各t∈N−(si)t\in N^{-}(s_i)について(2)によりι(t)<i\iota(t)<iであるから、帰納法の仮定によってV(sι(t))=V′(sι(t))V(s_{\iota(t)})=V'(s_{\iota(t)})、すなわちV(t)=V′(t)V(t)=V'(t)である。したがって二つの族(V(t))t∈N−(si)(V(t))_{t\in N^{-}(s_i)}と(V′(t))t∈N−(si)(V'(t))_{t\in N^{-}(s_i)}はN−(si)N^{-}(s_i)上の写像として一致する。定義 1.2 条件 (b)により

V(si)=gsi((V(t))t∈N−(si))=gsi((V′(t))t∈N−(si))=V′(si)V(s_i)=g_{s_i}\bigl((V(t))_{t\in N^{-}(s_i)}\bigr) =g_{s_i}\bigl((V'(t))_{t\in N^{-}(s_i)}\bigr)=V'(s_i)

である。よってP(i)P(i)が成り立ち、累積帰納法によりすべてのiiでV(si)=V′(si)V(s_i)=V'(s_i)である。位相順序はすべての状態を尽くすのでV=V′V=V'である。

(3)の存在を示す。(2)により定まるu1,…,uNu_1,\dots,u_Nを用いて、写像V:Q→RV:Q\to\mathbb RをV(si)=uiV(s_i)=u_iによって定める。位相順序はQQの各要素をちょうど一度ずつ並べるので、この定め方は矛盾なくQQ全体でVVを定める。定義から、各t∈Qt\in Qに対しV(t)=uι(t)V(t)=u_{\iota(t)}である。

VVが解の条件を満たすことを確かめる。si∈Q0s_i\in Q_0のとき、評価の定義によりV(si)=ui=b(si)V(s_i)=u_i=b(s_i)であり、定義 1.2 条件 (a)が成り立つ。si∉Q0s_i\notin Q_0のとき、評価の定義により

V(si)=ui=gsi((uι(t))t∈N−(si))=gsi((V(t))t∈N−(si))V(s_i)=u_i=g_{s_i}\bigl((u_{\iota(t)})_{t\in N^{-}(s_i)}\bigr) =g_{s_i}\bigl((V(t))_{t\in N^{-}(s_i)}\bigr)

であり、定義 1.2 条件 (b)が成り立つ。よってVVは解である。

最後に、ui=V(si)u_i=V(s_i)はVVの定め方そのものであり、一意性により、このVVが唯一の解である。▨

系 1.5. 状態遷移図式Σ\Sigmaの二つの位相順序s1,…,sNs_1,\dots,s_Nとs1′,…,sN′s'_1,\dots,s'_Nをとり、それぞれに沿った評価の結果をu1,…,uNu_1,\dots,u_Nとu1′,…,uN′u'_1,\dots,u'_Nとする。このとき、si=sk′s_i=s'_kならばui=uk′u_i=u'_kが成り立つ。

証明.定理 1.4 (3)により、Σ\Sigmaの解VVはただ一つであり、ui=V(si)u_i=V(s_i)かつuk′=V(sk′)u'_k=V(s'_k)が成り立つ。si=sk′s_i=s'_kならばui=V(si)=V(sk′)=uk′u_i=V(s_i)=V(s'_k)=u'_kである。▨

有向閉路をもたないという仮定は落とすことができない。次の注意はその理由を二つの例で示す。

注意 1.6 (有向閉路を許すと解の一意存在が壊れる).定義 1.1から有向非巡回グラフであるという条件を外し、Q={s,t}Q=\{s,t\}、A={(s,t),(t,s)}A=\{(s,t),(t,s)\}とする。どちらの状態も入次数が11であるから境界状態は無く、N−(s)={t}N^{-}(s)=\{t\}かつN−(t)={s}N^{-}(t)=\{s\}である。

遷移関数をgs(x)=x(t)+1g_s(x)=x(t)+1、gt(x)=x(s)+1g_t(x)=x(s)+1と定めると、解VVはV(s)=V(t)+1V(s)=V(t)+1かつV(t)=V(s)+1V(t)=V(s)+1を満たさなければならず、両者を加えると0=20=2となる。よって解は存在しない。

遷移関数をgs(x)=x(t)g_s(x)=x(t)、gt(x)=x(s)g_t(x)=x(s)と定めると、任意の実数ccに対しV(s)=V(t)=cV(s)=V(t)=cが解であるから、解は一つに定まらない。

有向閉路をもたないという条件は、これら二つの破綻をともに排除する。定理 1.4の証明で実際に用いたのは、位相順序に沿って先行状態の添字が必ず小さくなるという事実であり、それは有向非巡回グラフであることと同値である(§D2.11 定理 2.3)。

2 時間計算量と空間計算量

時間計算量は、入力サイズに対する基本操作の実行回数として「アルゴリズムの正当性と計算量」が定めており、多項式時間の定義は§D2.8 定義 4.1が、漸近記法は§D2.8 定義 2.2が与える。一方、手続きが用いる記憶領域の大きさを測る尺度は「アルゴリズムの正当性と計算量」に無いので、ここで定める。

定義 2.1. 手続きは、入力を保持する領域とは別に、セル (cell) とよぶ記憶単位の列を作業領域として用い、各セルは実数を一つ保持するものとする。手続きの実行のある時点で値を保持しているセルの個数を、その時点の使用セル数 (number of used cells) という。入力xxに対する実行の全体を通じての使用セル数の最大値をsp(x)\mathrm{sp}(x)と書く。入力サイズがnnであるすべての入力xxにわたるsp(x)\mathrm{sp}(x)の最大値をS(n)S(n)と書き、この手続きの空間計算量 (space complexity) という。

時間計算量と同じく、空間計算量も§D2.8 定義 2.2の記法によって位数だけを述べることが多い。入力を保持する領域を使用セル数に数えないのは、入力を読むだけで必要になる領域と、手続きが自分で書き込む領域とを分けて測るためである。この規約を変えると空間計算量の値は変わる。

評価の費用は、状態数と遷移数だけから見積もることができる。次の命題はその形を定める。

命題 2.2. 実数の加法、比較および代入をそれぞれ11回の基本操作と数える計算模型のもとで、状態遷移図式Σ\Sigmaが次を満たすと仮定する。図式によらない定数κ≥1\kappa\ge1が存在して、各境界状態ssについてb(s)b(s)の値を得るのに必要な基本操作の回数が11以上κ\kappa以下であり、各非境界状態ssについてgsg_sの値を先行状態の値から得るのに必要な基本操作の回数が1+deg⁡−(s)1+\deg^{-}(s)以上κ(1+deg⁡−(s))\kappa\bigl(1+\deg^{-}(s)\bigr)以下である。

このとき、位相順序に沿った評価の基本操作の総回数TTは

∣Q∣+∣A∣ ≤ T ≤ κ(∣Q∣+∣A∣)\lvert Q\rvert+\lvert A\rvert\ \le\ T\ \le\ \kappa\bigl(\lvert Q\rvert+\lvert A\rvert\bigr)

を満たす。また、すべての状態の値を保持したまま評価を行うときの使用セル数は∣Q∣\lvert Q\rvertである。

証明. 状態ssの値を定めるのに要する基本操作の回数をθ(s)\theta(s)と書く。s∈Q0s\in Q_0のときはdeg⁡−(s)=0\deg^{-}(s)=0であるから、仮定により1+deg⁡−(s)=1≤θ(s)≤κ=κ(1+deg⁡−(s))1+\deg^{-}(s)=1\le\theta(s)\le\kappa=\kappa\bigl(1+\deg^{-}(s)\bigr)である。s∉Q0s\notin Q_0のときも仮定がそのまま同じ不等式を与える。よってすべてのs∈Qs\in Qについて

1+deg⁡−(s) ≤ θ(s) ≤ κ(1+deg⁡−(s))1+\deg^{-}(s)\ \le\ \theta(s)\ \le\ \kappa\bigl(1+\deg^{-}(s)\bigr)

が成り立つ。

評価は各状態の値をちょうど一度ずつ定めるのでT=∑s∈Qθ(s)T=\sum_{s\in Q}\theta(s)である。上の不等式をs∈Qs\in Qについて加え、§D2.11 命題 1.2による∑s∈Qdeg⁡−(s)=∣A∣\sum_{s\in Q}\deg^{-}(s)=\lvert A\rvertを用いると

∣Q∣+∣A∣ ≤ T ≤ κ(∣Q∣+∣A∣)\lvert Q\rvert+\lvert A\rvert\ \le\ T\ \le\ \kappa\bigl(\lvert Q\rvert+\lvert A\rvert\bigr)

を得る。

使用セル数については、各状態の値を一つのセルへ保持し、状態は∣Q∣\lvert Q\rvert個であるから、値をすべて保持したままの評価の使用セル数は∣Q∣\lvert Q\rvertである。▨

保持する値の個数は、依存関係が層状になっている場合に減らすことができる。

定義 2.3. 状態遷移図式Σ\Sigmaと非負整数LLに対し、写像ℓ:Q→{0,1,…,L}\ell:Q\to\{0,1,\dots,L\}がΣ\Sigmaの層分解 (layer decomposition) であるとは、AAのすべての弧(t,s)(t,s)についてℓ(s)=ℓ(t)+1\ell(s)=\ell(t)+1が成り立つことをいう。0≤r≤L0\le r\le Lに対しLr=ℓ−1(r)L_r=\ell^{-1}(r)と置き、LrL_rを第rr層 (layer) という。

命題 2.4.Σ\Sigmaを状態遷移図式とし、ℓ\ellをその層分解とする。このとき次が成り立つ。

  1. 層の番号が小さい状態から順に、同じ層の中では任意の順にQQの全要素を並べた列は、D=(Q,A)D=(Q,A)の位相順序である。
  2. 第00層のすべての状態は境界状態である。
  3. r=1,…,Lr=1,\dots,Lの順に、第r−1r-1層の値の族から第rr層の各状態ssの値を、s∈Q0s\in Q_0ならばb(s)b(s)、s∉Q0s\notin Q_0ならばgsg_sを先行状態の値へ適用して定め、第rr層を定め終えたら第r−1r-1層の値を捨てる手続きを考える。この手続きは矛盾なく定まり、各rrについて第rr層の上でΣ\Sigmaの解VVに一致する族を与える。この手続きの使用セル数は max⁡1≤r≤L(∣Lr−1∣+∣Lr∣)\max_{1\le r\le L}\bigl(\lvert L_{r-1}\rvert+\lvert L_r\rvert\bigr) 以下である(L≥1L\ge1のとき)。

証明.(1)を示す。弧(t,s)∈A(t,s)\in Aをとると層分解の定義によりℓ(t)=ℓ(s)−1<ℓ(s)\ell(t)=\ell(s)-1<\ell(s)である。並べ方は層の番号が小さい状態を先に置くので、ttはssより前に現れる。よってすべての弧が列の前から後ろへ向き、この列は位相順序である。

(2)を示す。s∈L0s\in L_0とし、(t,s)∈A(t,s)\in Aを満たすttが存在すると仮定する。層分解の定義によりℓ(t)=ℓ(s)−1=−1\ell(t)=\ell(s)-1=-1となるが、ℓ\ellの値域は{0,1,…,L}\{0,1,\dots,L\}であるから、これは起こらない。よってdeg⁡−(s)=0\deg^{-}(s)=0、すなわちs∈Q0s\in Q_0である。

(3)を示す。まず、r≥1r\ge1とs∈Lrs\in L_rに対しN−(s)⊆Lr−1N^{-}(s)\subseteq L_{r-1}である。実際t∈N−(s)t\in N^{-}(s)ならば(t,s)∈A(t,s)\in Aであるからℓ(t)=ℓ(s)−1=r−1\ell(t)=\ell(s)-1=r-1である。したがって第rr層の値を定めるのに必要な値は第r−1r-1層の値だけであり、手続きは矛盾なく定まる。

次に、この手続きが与える族がVVに一致することをrrについての帰納法で示す。r=0r=0のとき、(2)により第00層のすべての状態は境界状態であるから、手続きはb(s)b(s)を与え、定義 1.2 条件 (a)によりV(s)=b(s)V(s)=b(s)である。r≥1r\ge1とし、第r−1r-1層で一致していると仮定する。s∈Lrs\in L_rをとる。s∈Q0s\in Q_0ならば手続きはb(s)b(s)を与え、定義 1.2 条件 (a)によりV(s)=b(s)V(s)=b(s)である。s∉Q0s\notin Q_0ならば、N−(s)⊆Lr−1N^{-}(s)\subseteq L_{r-1}と帰納法の仮定により、手続きがgsg_sへ与える引数の族は(V(t))t∈N−(s)(V(t))_{t\in N^{-}(s)}に一致するので、手続きが与える値はgs((V(t))t∈N−(s))=V(s)g_s\bigl((V(t))_{t\in N^{-}(s)}\bigr)=V(s)である。よって第rr層でも一致する。

使用セル数については、第rr層を定めているあいだ、手続きが保持しているのは第r−1r-1層の値と、それまでに定めた第rr層の値だけである。その個数は∣Lr−1∣+∣Lr∣\lvert L_{r-1}\rvert+\lvert L_r\rvert以下であり、rrは11からLLまでを動くので、主張の上界を得る。▨

3 0-1 ナップサック問題

代表的な最適化問題として、重さの上限のもとで価値の総和を最大にする問題を扱う。まず問題そのものを定め、その最適値が漸化式を満たすことを証明する。ここが「最適部分構造をもつ」という標語の内実であり、実行可能解の集合を二つに分けて数える議論によって示される。

定義 3.1. 正の整数nn、非負整数WW、正の整数w1,…,wnw_1,\dots,w_nおよび非負実数p1,…,pnp_1,\dots,p_nが与えられているとする。wkw_kを第kk番目の品物の重さ (weight)、pkp_kをその価値 (value)、WWを容量 (capacity) という。0≤i≤n0\le i\le nと0≤j≤W0\le j\le Wに対し

F(i,j)={T⊆{1,…,i} : ∑k∈Twk≤j},OPT(i,j)=max⁡T∈F(i,j) ∑k∈Tpk\mathcal F(i,j)=\Bigl\{T\subseteq\{1,\dots,i\}\ :\ \sum_{k\in T}w_k\le j\Bigr\}, \qquad \mathrm{OPT}(i,j)=\max_{T\in\mathcal F(i,j)}\ \sum_{k\in T}p_k

と定める。∅∈F(i,j)\emptyset\in\mathcal F(i,j)であるからF(i,j)\mathcal F(i,j)は空でなく、{1,…,i}\{1,\dots,i\}の部分集合全体は有限集合であるからF(i,j)\mathcal F(i,j)は有限集合である。よって右辺の最大値は存在する。OPT(n,W)\mathrm{OPT}(n,W)を求める問題を 0-1 ナップサック問題 (0-1 knapsack problem) という。

命題 3.2.0≤j≤W0\le j\le Wに対しOPT(0,j)=0\mathrm{OPT}(0,j)=0が成り立つ。また1≤i≤n1\le i\le nと0≤j≤W0\le j\le Wに対し

OPT(i,j)={OPT(i−1,j)(j<wi),max⁡{OPT(i−1,j), OPT(i−1,j−wi)+pi}(j≥wi)\mathrm{OPT}(i,j)= \begin{cases} \mathrm{OPT}(i-1,j) & (j<w_i),\\[2pt] \max\bigl\{\mathrm{OPT}(i-1,j),\ \mathrm{OPT}(i-1,j-w_i)+p_i\bigr\} & (j\ge w_i) \end{cases}

が成り立つ。

証明. 境界の場合。i=0i=0のとき{1,…,0}=∅\{1,\dots,0\}=\emptysetであるからF(0,j)={∅}\mathcal F(0,j)=\{\emptyset\}であり、∅\emptysetに対する価値の総和は00である。よってOPT(0,j)=0\mathrm{OPT}(0,j)=0である。

i≥1i\ge1の場合。F(i,j)\mathcal F(i,j)を、第ii番目の品物を含まないものと含むものへ分ける。すなわち

Fout={T∈F(i,j): i∉T},Fin={T∈F(i,j): i∈T}\mathcal F_{\mathrm{out}}=\{T\in\mathcal F(i,j):\ i\notin T\}, \qquad \mathcal F_{\mathrm{in}}=\{T\in\mathcal F(i,j):\ i\in T\}

と置くと、F(i,j)=Fout∪Fin\mathcal F(i,j)=\mathcal F_{\mathrm{out}}\cup\mathcal F_{\mathrm{in}}であり、この二つは交わらない。

第一にFout=F(i−1,j)\mathcal F_{\mathrm{out}}=\mathcal F(i-1,j)である。実際、T⊆{1,…,i}T\subseteq\{1,\dots,i\}かつi∉Ti\notin TはT⊆{1,…,i−1}T\subseteq\{1,\dots,i-1\}と同値であり、重さの条件は両者で同じ式である。価値の総和も同じ式であるから

max⁡T∈Fout∑k∈Tpk=OPT(i−1,j)\max_{T\in\mathcal F_{\mathrm{out}}}\sum_{k\in T}p_k=\mathrm{OPT}(i-1,j)

である。とくにFout\mathcal F_{\mathrm{out}}は空でない。

第二にFin\mathcal F_{\mathrm{in}}を調べる。T∈FinT\in\mathcal F_{\mathrm{in}}ならばwi≤∑k∈Twk≤jw_i\le\sum_{k\in T}w_k\le jであるから、j<wij<w_iのときFin=∅\mathcal F_{\mathrm{in}}=\emptysetである。この場合はF(i,j)=Fout\mathcal F(i,j)=\mathcal F_{\mathrm{out}}となり、主張の第一の場合が従う。

j≥wij\ge w_iとする。写像T′↦T′∪{i}T'\mapsto T'\cup\{i\}を考える。T′∈F(i−1,j−wi)T'\in\mathcal F(i-1,j-w_i)ならばT′⊆{1,…,i−1}T'\subseteq\{1,\dots,i-1\}かつ∑k∈T′wk≤j−wi\sum_{k\in T'}w_k\le j-w_iであるから、T=T′∪{i}T=T'\cup\{i\}はT⊆{1,…,i}T\subseteq\{1,\dots,i\}、i∈Ti\in Tかつ∑k∈Twk=∑k∈T′wk+wi≤j\sum_{k\in T}w_k=\sum_{k\in T'}w_k+w_i\le jを満たし、T∈FinT\in\mathcal F_{\mathrm{in}}である。逆にT∈FinT\in\mathcal F_{\mathrm{in}}に対してT′=T∖{i}T'=T\setminus\{i\}と置くと、T′⊆{1,…,i−1}T'\subseteq\{1,\dots,i-1\}かつ∑k∈T′wk=∑k∈Twk−wi≤j−wi\sum_{k\in T'}w_k=\sum_{k\in T}w_k-w_i\le j-w_iであるからT′∈F(i−1,j−wi)T'\in\mathcal F(i-1,j-w_i)である。二つの対応は互いに逆であるから、T′↦T′∪{i}T'\mapsto T'\cup\{i\}はF(i−1,j−wi)\mathcal F(i-1,j-w_i)からFin\mathcal F_{\mathrm{in}}への全単射である。さらにi∉T′i\notin T'であるから

∑k∈T′∪{i}pk=∑k∈T′pk+pi\sum_{k\in T'\cup\{i\}}p_k=\sum_{k\in T'}p_k+p_i

である。よって

max⁡T∈Fin∑k∈Tpk=OPT(i−1,j−wi)+pi\max_{T\in\mathcal F_{\mathrm{in}}}\sum_{k\in T}p_k=\mathrm{OPT}(i-1,j-w_i)+p_i

である。F(i−1,j−wi)\mathcal F(i-1,j-w_i)は空でないのでFin\mathcal F_{\mathrm{in}}も空でない。

最後に、有限集合XXが二つの空でない部分X1X_1とX2X_2の交わらない合併であるとき、実数値関数ffについて

max⁡Xf=max⁡{max⁡X1f, max⁡X2f}\max_{X}f=\max\bigl\{\max_{X_1}f,\ \max_{X_2}f\bigr\}

が成り立つ。実際、X1X_1とX2X_2は空でない有限集合であるから右辺の三つの最大値はいずれも存在する。X1⊆XX_1\subseteq XとX2⊆XX_2\subseteq Xによりmax⁡Xf≥max⁡X1f\max_{X}f\ge\max_{X_1}fかつmax⁡Xf≥max⁡X2f\max_{X}f\ge\max_{X_2}fであるから、左辺は右辺以上である。逆に、max⁡Xf=f(x)\max_{X}f=f(x)を満たすx∈Xx\in Xをとると、X=X1∪X2X=X_1\cup X_2よりx∈X1x\in X_1またはx∈X2x\in X_2であり、前者ならばf(x)≤max⁡X1ff(x)\le\max_{X_1}f、後者ならばf(x)≤max⁡X2ff(x)\le\max_{X_2}fであるから、左辺は右辺以下である。よって等号が成り立つ。

これをX=F(i,j)X=\mathcal F(i,j)、X1=FoutX_1=\mathcal F_{\mathrm{out}}、X2=FinX_2=\mathcal F_{\mathrm{in}}へ適用すると、j≥wij\ge w_iの場合の主張を得る。上でFout\mathcal F_{\mathrm{out}}とFin\mathcal F_{\mathrm{in}}がともに空でないことを確かめたのは、この適用のためである。▨

漸化式が定まったので、これを状態遷移図式として書き直す。

命題 3.3.定義 3.1の設定のもとで

Q={0,1,…,n}×{0,1,…,W},Q=\{0,1,\dots,n\}\times\{0,1,\dots,W\},A={((i−1,j),(i,j)): 1≤i≤n, 0≤j≤W}∪{((i−1,j−wi),(i,j)): 1≤i≤n, wi≤j≤W}A=\bigl\{\bigl((i-1,j),(i,j)\bigr):\ 1\le i\le n,\ 0\le j\le W\bigr\} \cup \bigl\{\bigl((i-1,j-w_i),(i,j)\bigr):\ 1\le i\le n,\ w_i\le j\le W\bigr\}

と定める。このとき次が成り立つ。

  1. D=(Q,A)D=(Q,A)は有向非巡回グラフであり、その境界状態の全体はQ0={(0,j): 0≤j≤W}Q_0=\{(0,j):\ 0\le j\le W\}である。
  2. 境界値をb(0,j)=0b(0,j)=0と定め、s=(i,j)s=(i,j)(1≤i≤n1\le i\le n)に対する遷移関数を、j<wij<w_iのときgs(x)=x((i−1,j))g_s(x)=x\bigl((i-1,j)\bigr)、j≥wij\ge w_iのときgs(x)=max⁡{x((i−1,j)), x((i−1,j−wi))+pi}g_s(x)=\max\bigl\{x\bigl((i-1,j)\bigr),\ x\bigl((i-1,j-w_i)\bigr)+p_i\bigr\}と定めると、OPT\mathrm{OPT}は得られる状態遷移図式Σ\Sigmaの唯一の解である。
  3. 写像ℓ(i,j)=i\ell(i,j)=iはΣ\Sigmaの層分解であり、各層の要素数はW+1W+1である。
  4. 状態数と遷移数について ∣Q∣=(n+1)(W+1),n(W+1)≤∣A∣≤2n(W+1)\lvert Q\rvert=(n+1)(W+1),\qquad n(W+1)\le\lvert A\rvert\le 2n(W+1) が成り立つ。

証明.(1)を示す。まずA⊆Q×QA\subseteq Q\times Qであり、各弧の始点と終点は第一成分が異なるので相異なる。よってDDは§D2.11 定義 1.1の意味での有向グラフである。AAのどの弧(t,s)(t,s)についても、ttの第一成分に11を加えたものがssの第一成分である。有向閉路u0,u1,…,uk=u0u_0,u_1,\dots,u_k=u_0(k≥1k\ge1)が存在すると仮定し、ulu_lの第一成分をala_lと書くとal=a0+la_l=a_0+lであるからak=a0+k>a0a_k=a_0+k>a_0となる。ところがuk=u0u_k=u_0よりak=a0a_k=a_0であり、矛盾する。よってDDは有向非巡回グラフである。

AAのすべての弧の終点は第一成分が11以上であるから、(0,j)(0,j)の入次数は00である。逆に1≤i≤n1\le i\le nのとき、弧((i−1,j),(i,j))\bigl((i-1,j),(i,j)\bigr)がAAに属するので(i,j)(i,j)の入次数は11以上である。よってQ0={(0,j)}Q_0=\{(0,j)\}である。

(2)を示す。1≤i≤n1\le i\le nとする。j<wij<w_iのときN−((i,j))={(i−1,j)}N^{-}\bigl((i,j)\bigr)=\{(i-1,j)\}であり、j≥wij\ge w_iのときwi≥1w_i\ge1よりj−wi≠jj-w_i\ne jであるからN−((i,j))={(i−1,j), (i−1,j−wi)}N^{-}\bigl((i,j)\bigr)=\{(i-1,j),\ (i-1,j-w_i)\}である。よって上で定めたgsg_sはRN−(s)\mathbb R^{N^{-}(s)}上の写像として矛盾なく定まる。命題 3.2は、写像(i,j)↦OPT(i,j)(i,j)\mapsto\mathrm{OPT}(i,j)が定義 1.2の二条件を満たすことをそのまま述べている。よってOPT\mathrm{OPT}はΣ\Sigmaの解であり、定理 1.4 (3)により解は一つしかないので、OPT\mathrm{OPT}が唯一の解である。

(3)を示す。AAのどの弧(t,s)(t,s)についてもℓ(s)=ℓ(t)+1\ell(s)=\ell(t)+1であることは 1 で確かめた。ℓ\ellの値域は{0,1,…,n}\{0,1,\dots,n\}である。第ii層は{(i,j):0≤j≤W}\{(i,j):0\le j\le W\}であるから、その要素数はW+1W+1である。

(4)を示す。∣Q∣=(n+1)(W+1)\lvert Q\rvert=(n+1)(W+1)は直積の要素数である。AAを定める二つの集合は交わらない。実際、第一の集合の弧は終点(i,j)(i,j)に対する始点の第二成分がjjであり、第二の集合の弧はj−wij-w_iであって、wi≥1w_i\ge1より両者は相異なるからである。第一の集合の要素数はn(W+1)n(W+1)である。第二の集合の要素数は∑i=1n∣{j: wi≤j≤W}∣\sum_{i=1}^{n}\lvert\{j:\ w_i\le j\le W\}\rvertであり、各項は00以上W+1W+1以下であるから、この和は00以上n(W+1)n(W+1)以下である。よってn(W+1)≤∣A∣≤2n(W+1)n(W+1)\le\lvert A\rvert\le2n(W+1)である。▨

命題 3.4.命題 3.3の状態遷移図式Σ\Sigmaについて、命題 2.2の計算模型と仮定のもとで次が成り立つ。

  1. 位相順序に沿った評価の基本操作の総回数TTは、図式によらない定数κ≥1\kappa\ge1を用いて (n+1)(W+1) ≤ T ≤ 3κ (n+1)(W+1)(n+1)(W+1)\ \le\ T\ \le\ 3\kappa\,(n+1)(W+1) を満たす。とくにn≥1n\ge1かつW≥1W\ge1のときnW≤T≤12κ nWnW\le T\le12\kappa\,nWである。
  2. すべての状態の値を保持する評価の使用セル数は(n+1)(W+1)(n+1)(W+1)である。
  3. 命題 2.4の手続きを層分解ℓ(i,j)=i\ell(i,j)=iについて用いると、使用セル数は2(W+1)2(W+1)以下になり、第nn層の値、とくにOPT(n,W)\mathrm{OPT}(n,W)が得られる。

証明.(1)を示す。命題 2.2により∣Q∣+∣A∣≤T≤κ(∣Q∣+∣A∣)\lvert Q\rvert+\lvert A\rvert\le T\le\kappa\bigl(\lvert Q\rvert+\lvert A\rvert\bigr)である。命題 3.3 (4)により

(n+1)(W+1) ≤ ∣Q∣+∣A∣ ≤ (n+1)(W+1)+2n(W+1) ≤ 3(n+1)(W+1)(n+1)(W+1)\ \le\ \lvert Q\rvert+\lvert A\rvert\ \le\ (n+1)(W+1)+2n(W+1)\ \le\ 3(n+1)(W+1)

であるから、主張の第一の不等式が従う。n≥1n\ge1かつW≥1W\ge1のときはnW≤(n+1)(W+1)≤2n⋅2W=4nWnW\le(n+1)(W+1)\le2n\cdot2W=4nWであるからnW≤T≤12κ nWnW\le T\le12\kappa\,nWである。

(2)を示す。命題 2.2の後半と∣Q∣=(n+1)(W+1)\lvert Q\rvert=(n+1)(W+1)による。

(3)を示す。命題 3.3 (3)によりℓ(i,j)=i\ell(i,j)=iは層分解であり、各層の要素数はW+1W+1である。命題 2.4 (3)により、この手続きは各層の上で唯一の解OPT\mathrm{OPT}に一致する族を与え、使用セル数はmax⁡1≤r≤n(∣Lr−1∣+∣Lr∣)=2(W+1)\max_{1\le r\le n}\bigl(\lvert L_{r-1}\rvert+\lvert L_r\rvert\bigr)=2(W+1)以下である。第nn層は{(n,j):0≤j≤W}\{(n,j):0\le j\le W\}であるから、そこにOPT(n,W)\mathrm{OPT}(n,W)が含まれる。▨

注意 3.5 (容量に比例する評価は入力サイズの多項式ではない).命題 3.4が与える上界は、容量WWの値そのものに比例する。ところが§D2.8 定義 4.1の意味の入力サイズは入力を表すのに要するビット数であり、WWを二進表記で与えるならばそのビット数は⌊log⁡2W⌋+1\lfloor\log_2 W\rfloor+1程度である。WWはこのビット数の指数関数の位数で増えることができるので、nWnWに比例する上界は入力サイズの多項式による上界を与えない。したがって、本節の評価から 0-1 ナップサック問題が§D2.8 定義 4.1の意味で扱いやすいと結論することはできない。この問題の計算量理論における位置づけは本記事では扱わない。

4 検算例

例 4.1 (小さなナップサック問題の手計算).n=3n=3、W=5W=5、重さを(w1,w2,w3)=(2,3,4)(w_1,w_2,w_3)=(2,3,4)、価値を(p1,p2,p3)=(3,4,5)(p_1,p_2,p_3)=(3,4,5)とする。層分解ℓ(i,j)=i\ell(i,j)=iに沿って、第00層から順にOPT(i,j)\mathrm{OPT}(i,j)を求める。

第00層はOPT(0,j)=0\mathrm{OPT}(0,j)=0(j=0,1,2,3,4,5j=0,1,2,3,4,5)である。

第11層はw1=2w_1=2、p1=3p_1=3による。j=0,1j=0,1ではj<2j<2であるからOPT(1,j)=OPT(0,j)=0\mathrm{OPT}(1,j)=\mathrm{OPT}(0,j)=0である。j=2j=2ではmax⁡{OPT(0,2), OPT(0,0)+3}=max⁡{0,3}=3\max\{\mathrm{OPT}(0,2),\ \mathrm{OPT}(0,0)+3\}=\max\{0,3\}=3、j=3j=3ではmax⁡{0, OPT(0,1)+3}=3\max\{0,\ \mathrm{OPT}(0,1)+3\}=3、j=4j=4ではmax⁡{0, OPT(0,2)+3}=3\max\{0,\ \mathrm{OPT}(0,2)+3\}=3、j=5j=5ではmax⁡{0, OPT(0,3)+3}=3\max\{0,\ \mathrm{OPT}(0,3)+3\}=3である。よって第11層はj=0,1,2,3,4,5j=0,1,2,3,4,5の順に0,0,3,3,3,30,0,3,3,3,3である。

第22層はw2=3w_2=3、p2=4p_2=4による。j=0,1,2j=0,1,2ではj<3j<3であるから第11層の値をそのまま引き継ぎ0,0,30,0,3である。j=3j=3ではmax⁡{OPT(1,3), OPT(1,0)+4}=max⁡{3,4}=4\max\{\mathrm{OPT}(1,3),\ \mathrm{OPT}(1,0)+4\}=\max\{3,4\}=4、j=4j=4ではmax⁡{3, OPT(1,1)+4}=max⁡{3,4}=4\max\{3,\ \mathrm{OPT}(1,1)+4\}=\max\{3,4\}=4、j=5j=5ではmax⁡{3, OPT(1,2)+4}=max⁡{3,7}=7\max\{3,\ \mathrm{OPT}(1,2)+4\}=\max\{3,7\}=7である。よって第22層は0,0,3,4,4,70,0,3,4,4,7である。

第33層はw3=4w_3=4、p3=5p_3=5による。j=0,1,2,3j=0,1,2,3ではj<4j<4であるから第22層の値を引き継ぎ0,0,3,40,0,3,4である。j=4j=4ではmax⁡{OPT(2,4), OPT(2,0)+5}=max⁡{4,5}=5\max\{\mathrm{OPT}(2,4),\ \mathrm{OPT}(2,0)+5\}=\max\{4,5\}=5、j=5j=5ではmax⁡{OPT(2,5), OPT(2,1)+5}=max⁡{7,5}=7\max\{\mathrm{OPT}(2,5),\ \mathrm{OPT}(2,1)+5\}=\max\{7,5\}=7である。よって第33層は0,0,3,4,5,70,0,3,4,5,7であり、OPT(3,5)=7\mathrm{OPT}(3,5)=7である。

総当たりによる検算。{1,2,3}\{1,2,3\}の部分集合88個について、重さの総和と価値の総和を書き下す。∅\emptysetは(0,0)(0,0)、{1}\{1\}は(2,3)(2,3)、{2}\{2\}は(3,4)(3,4)、{3}\{3\}は(4,5)(4,5)、{1,2}\{1,2\}は(5,7)(5,7)、{1,3}\{1,3\}は(6,8)(6,8)、{2,3}\{2,3\}は(7,9)(7,9)、{1,2,3}\{1,2,3\}は(9,12)(9,12)である。重さの総和が55以下であるものは∅\emptyset、{1}\{1\}、{2}\{2\}、{3}\{3\}、{1,2}\{1,2\}の五つであり、価値の総和の最大値は{1,2}\{1,2\}による77である。OPT(3,5)=7\mathrm{OPT}(3,5)=7と一致する。

同様にj=4j=4では重さの総和が44以下であるものが∅\emptyset、{1}\{1\}、{2}\{2\}、{3}\{3\}の四つであり、価値の最大値は55である。OPT(3,4)=5\mathrm{OPT}(3,4)=5と一致する。j=3j=3では∅\emptyset、{1}\{1\}、{2}\{2\}の三つで最大値は44であり、OPT(3,3)=4\mathrm{OPT}(3,3)=4と一致する。

状態数と遷移数の検算。∣Q∣=(3+1)(5+1)=24\lvert Q\rvert=(3+1)(5+1)=24である。AAの第一の集合の要素数は3×6=183\times6=18である。第二の集合の要素数は、i=1i=1で∣{j:2≤j≤5}∣=4\lvert\{j:2\le j\le5\}\rvert=4、i=2i=2で∣{j:3≤j≤5}∣=3\lvert\{j:3\le j\le5\}\rvert=3、i=3i=3で∣{j:4≤j≤5}∣=2\lvert\{j:4\le j\le5\}\rvert=2であるから4+3+2=94+3+2=9である。よって∣A∣=18+9=27\lvert A\rvert=18+9=27であり、命題 3.3 (4)が与える範囲18≤∣A∣≤3618\le\lvert A\rvert\le36に収まる。使用セル数は、全状態を保持すれば2424、連続する二層だけを保持すれば2×6=122\times6=12以下である。

5 演習

問題 5.1.

  1. 定理 1.4 (3)の一意性の証明を、累積帰納法を用いずに単純帰納法だけで書き直そうとすると、どこで行き詰まるかを述べよ。行き詰まる箇所を、帰納法の仮定として何が必要かという形で特定し、§D2.1 命題 1.2を用いて累積帰納法へ戻す道筋を書け。
  2. 定理 1.4 (2)の証明は、位相順序の定義だけを用いてι(t)<i\iota(t)<iを導いている。この一手を落とすと、3 の存在の証明のどの等式が意味をもたなくなるかを指摘し、その等式を明示して説明せよ。
  3. 命題 3.2の証明では、j≥wij\ge w_iのときにFin\mathcal F_{\mathrm{in}}が空でないことを確かめている。この確認を落とすと、最後に用いた最大値の分割の等式が成り立たなくなる。Fin=∅\mathcal F_{\mathrm{in}}=\emptysetかつ等式を無批判に用いた場合にどのような誤りが生じるかを、具体的なiiとjjの値を挙げて示せ。
  4. 状態遷移図式Σ\Sigmaが層分解をもたない例を一つ作り、それにもかかわらず定理 1.4を適用することができることを確かめよ。さらに、その例で連続する二つの層だけを保持する評価を用いることができない理由を、命題 2.4 (3)の証明のどの段が破れるかによって述べよ。
  5. 重さの上限のもとで価値を最大にするのではなく、価値の下限PPを満たす選び方のうち重さの総和を最小にする問題を考える。この問題について状態集合、弧集合、境界値および遷移関数を設計し、最適値がその漸化式を満たすことを命題 3.2の証明にならって証明せよ。さらに状態数と遷移数を数え、命題 2.2によって基本操作の回数の上界と下界を書き下せ。
  6. 注意 1.6の二つの例について、それぞれ「解が存在しない」ことと「解が一意でない」ことを、定義 1.2の二条件に戻って確かめよ。さらに、Q={s,t,r}Q=\{s,t,r\}と長さ33の有向閉路をもつ例を作り、解が存在しないようにする遷移関数を与えよ。

7 扱った範囲と次の記事

本記事は、状態、遷移および境界値を有限有向非巡回グラフとして定式化し、その漸化式の解がただ一つ存在すること、および任意の位相順序に沿った評価がその解を与えることを証明した。評価の結果が位相順序の取り方によらないことを系として導き、有向閉路を許すと解の一意存在が壊れることを例で示した。空間計算量を定義し、状態数と遷移数から評価の基本操作の回数と使用セル数を上下から抑えた。層分解をもつ図式については、連続する二つの層だけを保持する評価が同じ値を与えることを証明した。0-1 ナップサック問題については、最適値が漸化式を満たすことを証明し、状態数と遷移数から時間計算量と空間計算量を導いた。最適解そのものを復元する手続きと、この問題の計算量理論における位置づけは扱っていない。

次の記事では、一つの操作ではなく有限な操作列の全体に対して計算量の上界を与える枠組みを定め、集計法、会計法およびポテンシャル法によって二進カウンタと動的配列の操作列を評価する。

参考文献

  1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, Cambridge, Massachusetts, 2022.動的計画法の定式化、部分問題の依存関係を有向非巡回グラフとして見る見方、および 0-1 ナップサック問題の漸化式を参考にした。
  2. Jon Kleinberg and Éva Tardos, Algorithm Design, Addison-Wesley, Boston, 2006.部分問題の集合と遷移から時間計算量と空間計算量を数える議論、および連続する二つの層だけを保持する評価を参考にした。

前提記事