1 状態、遷移および境界値
動的計画法で現れる部分問題を状態とよび、状態のあいだの依存関係を弧で表す。弧の向きは「用いられる側から用いる側へ」と定める。この向きを採ると、位相順序に沿って前から評価するという手続きがそのまま意味をもつ。
定義 1.1. 有限集合Q Q Q とA ⊆ Q × Q A\subseteq Q\times Q A ⊆ Q × Q の組D = ( Q , A ) D=(Q,A) D = ( Q , A ) が§D2.11 定義 1.1 の意味での有向グラフであり、かつ§D2.11 定義 2.1 の意味での有向非巡回グラフであるとする。Q Q Q の要素を状態 (state ) といい、弧( t , s ) ∈ A (t,s)\in A ( t , s ) ∈ A を「状態s s s の値を定めるために状態t t t の値を用いる」と読む。状態s ∈ Q s\in Q s ∈ Q に対し
N − ( s ) = { t ∈ Q : ( t , s ) ∈ A } N^{-}(s)=\{t\in Q:\ (t,s)\in A\} N − ( s ) = { t ∈ Q : ( t , s ) ∈ A } と置き、s s s の先行状態の集合 (predecessor state set ) という。その要素数は入次数deg − ( s ) \deg^{-}(s) deg − ( s ) に等しい。deg − ( s ) = 0 \deg^{-}(s)=0 deg − ( s ) = 0 を満たす状態を境界状態 (boundary state ) といい、境界状態の全体をQ 0 Q_0 Q 0 と書く。
さらに、写像b : Q 0 → R b:Q_0\to\mathbb R b : Q 0 → R と、各s ∈ Q ∖ Q 0 s\in Q\setminus Q_0 s ∈ Q ∖ Q 0 に対する写像g s : R N − ( s ) → R g_s:\mathbb R^{N^{-}(s)}\to\mathbb R g s : R N − ( s ) → R が与えられているとする。ここでR N − ( s ) \mathbb R^{N^{-}(s)} R N − ( s ) はN − ( s ) N^{-}(s) N − ( s ) からR \mathbb R R への写像全体を表す。組
Σ = ( Q , A , b , ( g s ) s ∈ Q ∖ Q 0 ) \Sigma=\bigl(Q,\ A,\ b,\ (g_s)_{s\in Q\setminus Q_0}\bigr) Σ = ( Q , A , b , ( g s ) s ∈ Q ∖ Q 0 ) を状態遷移図式 (state transition scheme ) という。b b b を境界値 (boundary value ) 、g s g_s g s を遷移関数 (transition function ) という。∣ Q ∣ \lvert Q\rvert ∣ Q ∣ をΣ \Sigma Σ の状態数 (number of states ) 、∣ A ∣ \lvert A\rvert ∣ A ∣ を遷移数 (number of transitions ) という。
定義 1.2. 状態遷移図式Σ \Sigma Σ に対し、写像V : Q → R V:Q\to\mathbb R V : Q → R が次の二条件を満たすとき、V V V をΣ \Sigma Σ の解 (solution ) という。
すべてのs ∈ Q 0 s\in Q_0 s ∈ Q 0 に対しV ( s ) = b ( s ) V(s)=b(s) V ( s ) = b ( s ) が成り立つ。
すべてのs ∈ Q ∖ Q 0 s\in Q\setminus Q_0 s ∈ Q ∖ Q 0 に対しV ( s ) = g s ( ( V ( t ) ) t ∈ N − ( s ) ) V(s)=g_s\bigl((V(t))_{t\in N^{-}(s)}\bigr) V ( s ) = g s ( ( V ( t ) ) t ∈ N − ( s ) ) が成り立つ。
この二条件をあわせてΣ \Sigma Σ の漸化式 (recurrence relation ) という。
漸化式は、各状態の値を先行状態の値によって記述するだけであり、値を求める順序を指定していない。順序を与えるのが位相順序である。
定義 1.3. Σ \Sigma Σ を状態遷移図式とし、N = ∣ Q ∣ N=\lvert Q\rvert N = ∣ Q ∣ とする。s 1 , s 2 , … , s N s_1,s_2,\dots,s_N s 1 , s 2 , … , s N をD = ( Q , A ) D=(Q,A) D = ( Q , A ) の位相順序(§D2.11 定義 2.1 )とする。次の手続きを、この位相順序に沿った 評価 (evaluation ) という。i = 1 , 2 , … , N i=1,2,\dots,N i = 1 , 2 , … , N の順に、実数u i u_i u i を
s i ∈ Q 0 s_i\in Q_0 s i ∈ Q 0 のときu i = b ( s i ) u_i=b(s_i) u i = b ( s i ) 、
s i ∉ Q 0 s_i\notin Q_0 s i ∈ / Q 0 のときu i = g s i ( ( u ι ( t ) ) t ∈ N − ( s i ) ) u_i=g_{s_i}\bigl((u_{\iota(t)})_{t\in N^{-}(s_i)}\bigr) u i = g s i ( ( u ι ( t ) ) t ∈ N − ( s i ) )
と定める。ここでι ( t ) \iota(t) ι ( t ) はs ι ( t ) = t s_{\iota(t)}=t s ι ( t ) = t を満たす添字を表す。
1.1 証明方針
主定理は三つの主張を含む。定理 1.4 (1) は位相順序の存在であり、これはD D D が有向非巡回グラフであることから§D2.11 定理 2.3 によって直ちに従う。
定理 1.4 (2) は、定義 1.3 の手続きが矛盾なく定まることである。ここで確かめるべきことは、u i u_i u i を定める式の右辺に現れる添字ι ( t ) \iota(t) ι ( t ) がすべてi i i より小さいことである。t ∈ N − ( s i ) t\in N^{-}(s_i) t ∈ N − ( s i ) は( t , s i ) ∈ A (t,s_i)\in A ( t , s i ) ∈ A を意味し、位相順序の定義はA A A のすべての弧が列の前から後ろへ向くことを要求するので、ι ( t ) < i \iota(t)<i ι ( t ) < i が従う。したがってi i i の小さい順に定めれば、右辺の値はすべて既に定まっている。
定理 1.4 (3) は、解がただ一つ存在し、それが評価の結果に一致することである。一意性は、二つの解V V V とV ′ V' V ′ をとり、V ( s i ) = V ′ ( s i ) V(s_i)=V'(s_i) V ( s i ) = V ′ ( s i ) を添字i i i についての累積帰納法(§D2.1 命題 1.2 )で示す。境界状態の場合は両者ともb ( s i ) b(s_i) b ( s i ) に等しく、境界状態でない場合は、先行状態の添字がi i i より小さいことから帰納法の仮定によってg s i g_{s_i} g s i の引数が一致し、値も一致する。存在は、評価が与えるu i u_i u i によってV ( s i ) = u i V(s_i)=u_i V ( s i ) = u i と定め、これが漸化式の二条件を満たすことを確かめれば得られる。確かめる際にも、ι ( t ) < i \iota(t)<i ι ( t ) < i という事実を用いてu ι ( t ) = V ( t ) u_{\iota(t)}=V(t) u ι ( t ) = V ( t ) と読み替える。
定理 1.4. Σ = ( Q , A , b , ( g s ) ) \Sigma=\bigl(Q,A,b,(g_s)\bigr) Σ = ( Q , A , b , ( g s ) ) を状態遷移図式とし、N = ∣ Q ∣ N=\lvert Q\rvert N = ∣ Q ∣ とする。このとき次の三つが成り立つ。
D = ( Q , A ) D=(Q,A) D = ( Q , A ) の位相順序が存在する。
位相順序s 1 , … , s N s_1,\dots,s_N s 1 , … , s N を一つとると、定義 1.3 の評価は矛盾なく定まる。すなわち、s i ∉ Q 0 s_i\notin Q_0 s i ∈ / Q 0 かつt ∈ N − ( s i ) t\in N^{-}(s_i) t ∈ N − ( s i ) ならばι ( t ) < i \iota(t)<i ι ( t ) < i が成り立ち、u i u_i u i を定める時点でu ι ( t ) u_{\iota(t)} u ι ( t ) は既に定まっている。
Σ \Sigma Σ の解はただ一つ存在する。それをV V V と書くと、すべてのi i i についてu i = V ( s i ) u_i=V(s_i) u i = V ( s i ) が成り立つ。
証明. (1) を示す。D D D は有向非巡回グラフであるから、§D2.11 定理 2.3 によりD D D の位相順序が存在する。
(2) を示す。位相順序s 1 , … , s N s_1,\dots,s_N s 1 , … , s N はQ Q Q のすべての状態をちょうど一度ずつ並べた列であるから、各t ∈ Q t\in Q t ∈ Q に対してs ι ( t ) = t s_{\iota(t)}=t s ι ( t ) = t を満たす添字ι ( t ) ∈ { 1 , … , N } \iota(t)\in\{1,\dots,N\} ι ( t ) ∈ { 1 , … , N } がただ一つ定まる。s i ∉ Q 0 s_i\notin Q_0 s i ∈ / Q 0 かつt ∈ N − ( s i ) t\in N^{-}(s_i) t ∈ N − ( s i ) とすると( t , s i ) ∈ A (t,s_i)\in A ( t , s i ) ∈ A である。t = s ι ( t ) t=s_{\iota(t)} t = s ι ( t ) かつs i s_i s i は第i i i 項であるから、位相順序の定義(A A A のすべての弧( s k , s l ) (s_k,s_l) ( s k , s l ) についてk < l k<l k < l )によりι ( t ) < i \iota(t)<i ι ( t ) < i である。よってu i u_i u i を定める式の右辺に現れる値はすべて添字がi i i より小さく、i i i の小さい順に定めれば既に定まっている。i = 1 , … , N i=1,\dots,N i = 1 , … , N の順に一つずつ定めれば、すべてのu i u_i u i が定まる。
(3) の一意性を示す。V V V とV ′ V' V ′ をともにΣ \Sigma Σ の解とする。述語P ( i ) P(i) P ( i ) を「1 ≤ i ≤ N 1\le i\le N 1 ≤ i ≤ N ならばV ( s i ) = V ′ ( s i ) V(s_i)=V'(s_i) V ( s i ) = V ′ ( s i ) である」と定め、P P P が全ての非負整数について成り立つことを累積帰納法(§D2.1 命題 1.2 )で示す。i i i をとり、i i i より小さいすべての添字でP P P が成り立つと仮定する。i = 0 i=0 i = 0 またはi > N i>N i > N ならばP ( i ) P(i) P ( i ) は空虚に成り立つ。1 ≤ i ≤ N 1\le i\le N 1 ≤ i ≤ N とする。
s i ∈ Q 0 s_i\in Q_0 s i ∈ Q 0 のときは、定義 1.2 条件 (a) によりV ( s i ) = b ( s i ) = V ′ ( s i ) V(s_i)=b(s_i)=V'(s_i) V ( s i ) = b ( s i ) = V ′ ( s i ) である。
s i ∉ Q 0 s_i\notin Q_0 s i ∈ / Q 0 のときは、各t ∈ N − ( s i ) t\in N^{-}(s_i) t ∈ N − ( s i ) について(2) によりι ( t ) < i \iota(t)<i ι ( t ) < i であるから、帰納法の仮定によってV ( s ι ( t ) ) = V ′ ( s ι ( t ) ) V(s_{\iota(t)})=V'(s_{\iota(t)}) V ( s ι ( t ) ) = V ′ ( s ι ( t ) ) 、すなわちV ( t ) = V ′ ( t ) V(t)=V'(t) V ( t ) = V ′ ( t ) である。したがって二つの族( V ( t ) ) t ∈ N − ( s i ) (V(t))_{t\in N^{-}(s_i)} ( V ( t ) ) t ∈ N − ( s i ) と( V ′ ( t ) ) t ∈ N − ( s i ) (V'(t))_{t\in N^{-}(s_i)} ( V ′ ( t ) ) t ∈ N − ( s i ) はN − ( s i ) N^{-}(s_i) N − ( s i ) 上の写像として一致する。定義 1.2 条件 (b) により
V ( s i ) = g s i ( ( V ( t ) ) t ∈ N − ( s i ) ) = g s i ( ( V ′ ( t ) ) t ∈ N − ( s i ) ) = V ′ ( s i ) 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) V ( s i ) = g s i ( ( V ( t ) ) t ∈ N − ( s i ) ) = g s i ( ( V ′ ( t ) ) t ∈ N − ( s i ) ) = V ′ ( s i ) である。よってP ( i ) P(i) P ( i ) が成り立ち、累積帰納法によりすべてのi i i でV ( s i ) = V ′ ( s i ) V(s_i)=V'(s_i) V ( s i ) = V ′ ( s i ) である。位相順序はすべての状態を尽くすのでV = V ′ V=V' V = V ′ である。
(3) の存在を示す。(2) により定まるu 1 , … , u N u_1,\dots,u_N u 1 , … , u N を用いて、写像V : Q → R V:Q\to\mathbb R V : Q → R をV ( s i ) = u i V(s_i)=u_i V ( s i ) = u i によって定める。位相順序はQ Q Q の各要素をちょうど一度ずつ並べるので、この定め方は矛盾なくQ Q Q 全体でV V V を定める。定義から、各t ∈ Q t\in Q t ∈ Q に対しV ( t ) = u ι ( t ) V(t)=u_{\iota(t)} V ( t ) = u ι ( t ) である。
V V V が解の条件を満たすことを確かめる。s i ∈ Q 0 s_i\in Q_0 s i ∈ Q 0 のとき、評価の定義によりV ( s i ) = u i = b ( s i ) V(s_i)=u_i=b(s_i) V ( s i ) = u i = b ( s i ) であり、定義 1.2 条件 (a) が成り立つ。s i ∉ Q 0 s_i\notin Q_0 s i ∈ / Q 0 のとき、評価の定義により
V ( s i ) = u i = g s i ( ( u ι ( t ) ) t ∈ N − ( s i ) ) = g s i ( ( V ( t ) ) t ∈ N − ( s i ) ) 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) V ( s i ) = u i = g s i ( ( u ι ( t ) ) t ∈ N − ( s i ) ) = g s i ( ( V ( t ) ) t ∈ N − ( s i ) ) であり、定義 1.2 条件 (b) が成り立つ。よってV V V は解である。
最後に、u i = V ( s i ) u_i=V(s_i) u i = V ( s i ) はV V V の定め方そのものであり、一意性により、このV V V が唯一の解である。▨
系 1.5. 状態遷移図式Σ \Sigma Σ の二つの位相順序s 1 , … , s N s_1,\dots,s_N s 1 , … , s N とs 1 ′ , … , s N ′ s'_1,\dots,s'_N s 1 ′ , … , s N ′ をとり、それぞれに沿った評価の結果をu 1 , … , u N u_1,\dots,u_N u 1 , … , u N とu 1 ′ , … , u N ′ u'_1,\dots,u'_N u 1 ′ , … , u N ′ とする。このとき、s i = s k ′ s_i=s'_k s i = s k ′ ならばu i = u k ′ u_i=u'_k u i = u k ′ が成り立つ。
証明. 定理 1.4 (3) により、Σ \Sigma Σ の解V V V はただ一つであり、u i = V ( s i ) u_i=V(s_i) u i = V ( s i ) かつu k ′ = V ( s k ′ ) u'_k=V(s'_k) u k ′ = V ( s k ′ ) が成り立つ。s i = s k ′ s_i=s'_k s i = s k ′ ならばu i = V ( s i ) = V ( s k ′ ) = u k ′ u_i=V(s_i)=V(s'_k)=u'_k u i = V ( s i ) = V ( s k ′ ) = u k ′ である。▨
有向閉路をもたないという仮定は落とすことができない。次の注意はその理由を二つの例で示す。
2 時間計算量と空間計算量
時間計算量は、入力サイズに対する基本操作の実行回数として「アルゴリズムの正当性と計算量」が定めており、多項式時間の定義は§D2.8 定義 4.1 が、漸近記法は§D2.8 定義 2.2 が与える。一方、手続きが用いる記憶領域の大きさを測る尺度は「アルゴリズムの正当性と計算量」に無いので、ここで定める。
定義 2.1. 手続きは、入力を保持する領域とは別に、セル (cell ) とよぶ記憶単位の列を作業領域として用い、各セルは実数を一つ保持するものとする。手続きの実行のある時点で値を保持しているセルの個数を、その時点の使用セル数 (number of used cells ) という。入力x x x に対する実行の全体を通じての使用セル数の最大値をs p ( x ) \mathrm{sp}(x) sp ( x ) と書く。入力サイズがn n n であるすべての入力x x x にわたるs p ( x ) \mathrm{sp}(x) sp ( x ) の最大値をS ( n ) S(n) S ( n ) と書き、この手続きの空間計算量 (space complexity ) という。
時間計算量と同じく、空間計算量も§D2.8 定義 2.2 の記法によって位数だけを述べることが多い。入力を保持する領域を使用セル数に数えないのは、入力を読むだけで必要になる領域と、手続きが自分で書き込む領域とを分けて測るためである。この規約を変えると空間計算量の値は変わる。
評価の費用は、状態数と遷移数だけから見積もることができる。次の命題はその形を定める。
命題 2.2. 実数の加法、比較および代入をそれぞれ1 1 1 回の基本操作と数える計算模型のもとで、状態遷移図式Σ \Sigma Σ が次を満たすと仮定する。図式によらない定数κ ≥ 1 \kappa\ge1 κ ≥ 1 が存在して、各境界状態s s s についてb ( s ) b(s) b ( s ) の値を得るのに必要な基本操作の回数が1 1 1 以上κ \kappa κ 以下であり、各非境界状態s s s についてg s g_s g s の値を先行状態の値から得るのに必要な基本操作の回数が1 + deg − ( s ) 1+\deg^{-}(s) 1 + deg − ( s ) 以上κ ( 1 + deg − ( s ) ) \kappa\bigl(1+\deg^{-}(s)\bigr) κ ( 1 + deg − ( s ) ) 以下である。
このとき、位相順序に沿った評価の基本操作の総回数T T T は
∣ Q ∣ + ∣ A ∣ ≤ T ≤ κ ( ∣ Q ∣ + ∣ A ∣ ) \lvert Q\rvert+\lvert A\rvert\ \le\ T\ \le\ \kappa\bigl(\lvert Q\rvert+\lvert A\rvert\bigr) ∣ Q ∣ + ∣ A ∣ ≤ T ≤ κ ( ∣ Q ∣ + ∣ A ∣ ) を満たす。また、すべての状態の値を保持したまま評価を行うときの使用セル数は∣ Q ∣ \lvert Q\rvert ∣ Q ∣ である。
証明. 状態s s s の値を定めるのに要する基本操作の回数をθ ( s ) \theta(s) θ ( s ) と書く。s ∈ Q 0 s\in Q_0 s ∈ Q 0 のときはdeg − ( s ) = 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) 1 + deg − ( s ) = 1 ≤ θ ( s ) ≤ κ = κ ( 1 + deg − ( s ) ) である。s ∉ Q 0 s\notin Q_0 s ∈ / Q 0 のときも仮定がそのまま同じ不等式を与える。よってすべてのs ∈ Q s\in Q s ∈ Q について
1 + deg − ( s ) ≤ θ ( s ) ≤ κ ( 1 + deg − ( s ) ) 1+\deg^{-}(s)\ \le\ \theta(s)\ \le\ \kappa\bigl(1+\deg^{-}(s)\bigr) 1 + deg − ( s ) ≤ θ ( s ) ≤ κ ( 1 + deg − ( s ) ) が成り立つ。
評価は各状態の値をちょうど一度ずつ定めるのでT = ∑ s ∈ Q θ ( s ) T=\sum_{s\in Q}\theta(s) T = ∑ s ∈ Q θ ( s ) である。上の不等式をs ∈ Q s\in Q s ∈ Q について加え、§D2.11 命題 1.2 による∑ s ∈ Q deg − ( s ) = ∣ A ∣ \sum_{s\in Q}\deg^{-}(s)=\lvert A\rvert ∑ s ∈ Q deg − ( s ) = ∣ A ∣ を用いると
∣ Q ∣ + ∣ A ∣ ≤ T ≤ κ ( ∣ Q ∣ + ∣ A ∣ ) \lvert Q\rvert+\lvert A\rvert\ \le\ T\ \le\ \kappa\bigl(\lvert Q\rvert+\lvert A\rvert\bigr) ∣ Q ∣ + ∣ A ∣ ≤ T ≤ κ ( ∣ Q ∣ + ∣ A ∣ ) を得る。
使用セル数については、各状態の値を一つのセルへ保持し、状態は∣ Q ∣ \lvert Q\rvert ∣ Q ∣ 個であるから、値をすべて保持したままの評価の使用セル数は∣ Q ∣ \lvert Q\rvert ∣ Q ∣ である。▨
保持する値の個数は、依存関係が層状になっている場合に減らすことができる。
定義 2.3. 状態遷移図式Σ \Sigma Σ と非負整数L L L に対し、写像ℓ : Q → { 0 , 1 , … , L } \ell:Q\to\{0,1,\dots,L\} ℓ : Q → { 0 , 1 , … , L } がΣ \Sigma Σ の層分解 (layer decomposition ) であるとは、A A A のすべての弧( t , s ) (t,s) ( t , s ) についてℓ ( s ) = ℓ ( t ) + 1 \ell(s)=\ell(t)+1 ℓ ( s ) = ℓ ( t ) + 1 が成り立つことをいう。0 ≤ r ≤ L 0\le r\le L 0 ≤ r ≤ L に対しL r = ℓ − 1 ( r ) L_r=\ell^{-1}(r) L r = ℓ − 1 ( r ) と置き、L r L_r L r を第r r r 層 (layer ) という。
命題 2.4. Σ \Sigma Σ を状態遷移図式とし、ℓ \ell ℓ をその層分解とする。このとき次が成り立つ。
層の番号が小さい状態から順に、同じ層の中では任意の順にQ Q Q の全要素を並べた列は、D = ( Q , A ) D=(Q,A) D = ( Q , A ) の位相順序である。
第0 0 0 層のすべての状態は境界状態である。
r = 1 , … , L r=1,\dots,L r = 1 , … , L の順に、第r − 1 r-1 r − 1 層の値の族から第r r r 層の各状態s s s の値を、s ∈ Q 0 s\in Q_0 s ∈ Q 0 ならばb ( s ) b(s) b ( s ) 、s ∉ Q 0 s\notin Q_0 s ∈ / Q 0 ならばg s g_s g s を先行状態の値へ適用して定め、第r r r 層を定め終えたら第r − 1 r-1 r − 1 層の値を捨てる手続きを考える。この手続きは矛盾なく定まり、各r r r について第r r r 層の上でΣ \Sigma Σ の解V V V に一致する族を与える。この手続きの使用セル数は
max 1 ≤ r ≤ L ( ∣ L r − 1 ∣ + ∣ L r ∣ ) \max_{1\le r\le L}\bigl(\lvert L_{r-1}\rvert+\lvert L_r\rvert\bigr) 1 ≤ r ≤ L max ( ∣ L r − 1 ∣ + ∣ L r ∣ )
以下である(L ≥ 1 L\ge1 L ≥ 1 のとき)。
証明. (1) を示す。弧( t , s ) ∈ A (t,s)\in A ( t , s ) ∈ A をとると層分解の定義によりℓ ( t ) = ℓ ( s ) − 1 < ℓ ( s ) \ell(t)=\ell(s)-1<\ell(s) ℓ ( t ) = ℓ ( s ) − 1 < ℓ ( s ) である。並べ方は層の番号が小さい状態を先に置くので、t t t はs s s より前に現れる。よってすべての弧が列の前から後ろへ向き、この列は位相順序である。
(2) を示す。s ∈ L 0 s\in L_0 s ∈ L 0 とし、( t , s ) ∈ A (t,s)\in A ( t , s ) ∈ A を満たすt t t が存在すると仮定する。層分解の定義によりℓ ( t ) = ℓ ( s ) − 1 = − 1 \ell(t)=\ell(s)-1=-1 ℓ ( t ) = ℓ ( s ) − 1 = − 1 となるが、ℓ \ell ℓ の値域は{ 0 , 1 , … , L } \{0,1,\dots,L\} { 0 , 1 , … , L } であるから、これは起こらない。よってdeg − ( s ) = 0 \deg^{-}(s)=0 deg − ( s ) = 0 、すなわちs ∈ Q 0 s\in Q_0 s ∈ Q 0 である。
(3) を示す。まず、r ≥ 1 r\ge1 r ≥ 1 とs ∈ L r s\in L_r s ∈ L r に対しN − ( s ) ⊆ L r − 1 N^{-}(s)\subseteq L_{r-1} N − ( s ) ⊆ L r − 1 である。実際t ∈ N − ( s ) t\in N^{-}(s) t ∈ N − ( s ) ならば( t , s ) ∈ A (t,s)\in A ( t , s ) ∈ A であるからℓ ( t ) = ℓ ( s ) − 1 = r − 1 \ell(t)=\ell(s)-1=r-1 ℓ ( t ) = ℓ ( s ) − 1 = r − 1 である。したがって第r r r 層の値を定めるのに必要な値は第r − 1 r-1 r − 1 層の値だけであり、手続きは矛盾なく定まる。
次に、この手続きが与える族がV V V に一致することをr r r についての帰納法で示す。r = 0 r=0 r = 0 のとき、(2) により第0 0 0 層のすべての状態は境界状態であるから、手続きはb ( s ) b(s) b ( s ) を与え、定義 1.2 条件 (a) によりV ( s ) = b ( s ) V(s)=b(s) V ( s ) = b ( s ) である。r ≥ 1 r\ge1 r ≥ 1 とし、第r − 1 r-1 r − 1 層で一致していると仮定する。s ∈ L r s\in L_r s ∈ L r をとる。s ∈ Q 0 s\in Q_0 s ∈ Q 0 ならば手続きはb ( s ) b(s) b ( s ) を与え、定義 1.2 条件 (a) によりV ( s ) = b ( s ) V(s)=b(s) V ( s ) = b ( s ) である。s ∉ Q 0 s\notin Q_0 s ∈ / Q 0 ならば、N − ( s ) ⊆ L r − 1 N^{-}(s)\subseteq L_{r-1} N − ( s ) ⊆ L r − 1 と帰納法の仮定により、手続きがg s g_s g s へ与える引数の族は( V ( t ) ) t ∈ N − ( s ) (V(t))_{t\in N^{-}(s)} ( V ( t ) ) t ∈ N − ( s ) に一致するので、手続きが与える値はg s ( ( V ( t ) ) t ∈ N − ( s ) ) = V ( s ) g_s\bigl((V(t))_{t\in N^{-}(s)}\bigr)=V(s) g s ( ( V ( t ) ) t ∈ N − ( s ) ) = V ( s ) である。よって第r r r 層でも一致する。
使用セル数については、第r r r 層を定めているあいだ、手続きが保持しているのは第r − 1 r-1 r − 1 層の値と、それまでに定めた第r r r 層の値だけである。その個数は∣ L r − 1 ∣ + ∣ L r ∣ \lvert L_{r-1}\rvert+\lvert L_r\rvert ∣ L r − 1 ∣ + ∣ L r ∣ 以下であり、r r r は1 1 1 からL L L までを動くので、主張の上界を得る。▨
3 0-1 ナップサック問題
代表的な最適化問題として、重さの上限のもとで価値の総和を最大にする問題を扱う。まず問題そのものを定め、その最適値が漸化式を満たすことを証明する。ここが「最適部分構造をもつ」という標語の内実であり、実行可能解の集合を二つに分けて数える議論によって示される。
定義 3.1. 正の整数n n n 、非負整数W W W 、正の整数w 1 , … , w n w_1,\dots,w_n w 1 , … , w n および非負実数p 1 , … , p n p_1,\dots,p_n p 1 , … , p n が与えられているとする。w k w_k w k を第k k k 番目の品物の重さ (weight ) 、p k p_k p k をその価値 (value ) 、W W W を容量 (capacity ) という。0 ≤ i ≤ n 0\le i\le n 0 ≤ i ≤ n と0 ≤ j ≤ W 0\le j\le W 0 ≤ j ≤ W に対し
F ( i , j ) = { T ⊆ { 1 , … , i } : ∑ k ∈ T w k ≤ j } , O P T ( i , j ) = max T ∈ F ( i , j ) ∑ k ∈ T p k \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 ) = { T ⊆ { 1 , … , i } : k ∈ T ∑ w k ≤ j } , OPT ( i , j ) = T ∈ F ( i , j ) max k ∈ T ∑ p k と定める。∅ ∈ F ( i , j ) \emptyset\in\mathcal F(i,j) ∅ ∈ F ( i , j ) であるからF ( i , j ) \mathcal F(i,j) F ( i , j ) は空でなく、{ 1 , … , i } \{1,\dots,i\} { 1 , … , i } の部分集合全体は有限集合であるからF ( i , j ) \mathcal F(i,j) F ( i , j ) は有限集合である。よって右辺の最大値は存在する。O P T ( n , W ) \mathrm{OPT}(n,W) OPT ( n , W ) を求める問題を 0-1 ナップサック問題 (0-1 knapsack problem ) という。
命題 3.2. 0 ≤ j ≤ W 0\le j\le W 0 ≤ j ≤ W に対しO P T ( 0 , j ) = 0 \mathrm{OPT}(0,j)=0 OPT ( 0 , j ) = 0 が成り立つ。また1 ≤ i ≤ n 1\le i\le n 1 ≤ i ≤ n と0 ≤ j ≤ W 0\le j\le W 0 ≤ j ≤ W に対し
O P T ( i , j ) = { O P T ( i − 1 , j ) ( j < w i ) , max { O P T ( i − 1 , j ) , O P T ( i − 1 , j − w i ) + p i } ( j ≥ w i ) \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} OPT ( i , j ) = { OPT ( i − 1 , j ) max { OPT ( i − 1 , j ) , OPT ( i − 1 , j − w i ) + p i } ( j < w i ) , ( j ≥ w i ) が成り立つ。
証明. 境界の場合 。i = 0 i=0 i = 0 のとき{ 1 , … , 0 } = ∅ \{1,\dots,0\}=\emptyset { 1 , … , 0 } = ∅ であるからF ( 0 , j ) = { ∅ } \mathcal F(0,j)=\{\emptyset\} F ( 0 , j ) = { ∅ } であり、∅ \emptyset ∅ に対する価値の総和は0 0 0 である。よってO P T ( 0 , j ) = 0 \mathrm{OPT}(0,j)=0 OPT ( 0 , j ) = 0 である。
i ≥ 1 i\ge1 i ≥ 1 の場合 。F ( i , j ) \mathcal F(i,j) F ( i , j ) を、第i i i 番目の品物を含まないものと含むものへ分ける。すなわち
F o u t = { T ∈ F ( i , j ) : i ∉ T } , F i n = { 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 out = { T ∈ F ( i , j ) : i ∈ / T } , F in = { T ∈ F ( i , j ) : i ∈ T } と置くと、F ( i , j ) = F o u t ∪ F i n \mathcal F(i,j)=\mathcal F_{\mathrm{out}}\cup\mathcal F_{\mathrm{in}} F ( i , j ) = F out ∪ F in であり、この二つは交わらない。
第一にF o u t = F ( i − 1 , j ) \mathcal F_{\mathrm{out}}=\mathcal F(i-1,j) F out = F ( i − 1 , j ) である。実際、T ⊆ { 1 , … , i } T\subseteq\{1,\dots,i\} T ⊆ { 1 , … , i } かつi ∉ T i\notin T i ∈ / T はT ⊆ { 1 , … , i − 1 } T\subseteq\{1,\dots,i-1\} T ⊆ { 1 , … , i − 1 } と同値であり、重さの条件は両者で同じ式である。価値の総和も同じ式であるから
max T ∈ F o u t ∑ k ∈ T p k = O P T ( i − 1 , j ) \max_{T\in\mathcal F_{\mathrm{out}}}\sum_{k\in T}p_k=\mathrm{OPT}(i-1,j) T ∈ F out max k ∈ T ∑ p k = OPT ( i − 1 , j ) である。とくにF o u t \mathcal F_{\mathrm{out}} F out は空でない。
第二にF i n \mathcal F_{\mathrm{in}} F in を調べる。T ∈ F i n T\in\mathcal F_{\mathrm{in}} T ∈ F in ならばw i ≤ ∑ k ∈ T w k ≤ j w_i\le\sum_{k\in T}w_k\le j w i ≤ ∑ k ∈ T w k ≤ j であるから、j < w i j<w_i j < w i のときF i n = ∅ \mathcal F_{\mathrm{in}}=\emptyset F in = ∅ である。この場合はF ( i , j ) = F o u t \mathcal F(i,j)=\mathcal F_{\mathrm{out}} F ( i , j ) = F out となり、主張の第一の場合が従う。
j ≥ w i j\ge w_i j ≥ w i とする。写像T ′ ↦ T ′ ∪ { i } T'\mapsto T'\cup\{i\} T ′ ↦ T ′ ∪ { i } を考える。T ′ ∈ F ( i − 1 , j − w i ) T'\in\mathcal F(i-1,j-w_i) T ′ ∈ F ( i − 1 , j − w i ) ならばT ′ ⊆ { 1 , … , i − 1 } T'\subseteq\{1,\dots,i-1\} T ′ ⊆ { 1 , … , i − 1 } かつ∑ k ∈ T ′ w k ≤ j − w i \sum_{k\in T'}w_k\le j-w_i ∑ k ∈ T ′ w k ≤ j − w i であるから、T = T ′ ∪ { i } T=T'\cup\{i\} T = T ′ ∪ { i } はT ⊆ { 1 , … , i } T\subseteq\{1,\dots,i\} T ⊆ { 1 , … , i } 、i ∈ T i\in T i ∈ T かつ∑ k ∈ T w k = ∑ k ∈ T ′ w k + w i ≤ j \sum_{k\in T}w_k=\sum_{k\in T'}w_k+w_i\le j ∑ k ∈ T w k = ∑ k ∈ T ′ w k + w i ≤ j を満たし、T ∈ F i n T\in\mathcal F_{\mathrm{in}} T ∈ F in である。逆にT ∈ F i n T\in\mathcal F_{\mathrm{in}} T ∈ F in に対してT ′ = T ∖ { i } T'=T\setminus\{i\} T ′ = T ∖ { i } と置くと、T ′ ⊆ { 1 , … , i − 1 } T'\subseteq\{1,\dots,i-1\} T ′ ⊆ { 1 , … , i − 1 } かつ∑ k ∈ T ′ w k = ∑ k ∈ T w k − w i ≤ j − w i \sum_{k\in T'}w_k=\sum_{k\in T}w_k-w_i\le j-w_i ∑ k ∈ T ′ w k = ∑ k ∈ T w k − w i ≤ j − w i であるからT ′ ∈ F ( i − 1 , j − w i ) T'\in\mathcal F(i-1,j-w_i) T ′ ∈ F ( i − 1 , j − w i ) である。二つの対応は互いに逆であるから、T ′ ↦ T ′ ∪ { i } T'\mapsto T'\cup\{i\} T ′ ↦ T ′ ∪ { i } はF ( i − 1 , j − w i ) \mathcal F(i-1,j-w_i) F ( i − 1 , j − w i ) からF i n \mathcal F_{\mathrm{in}} F in への全単射である。さらにi ∉ T ′ i\notin T' i ∈ / T ′ であるから
∑ k ∈ T ′ ∪ { i } p k = ∑ k ∈ T ′ p k + p i \sum_{k\in T'\cup\{i\}}p_k=\sum_{k\in T'}p_k+p_i k ∈ T ′ ∪ { i } ∑ p k = k ∈ T ′ ∑ p k + p i である。よって
max T ∈ F i n ∑ k ∈ T p k = O P T ( i − 1 , j − w i ) + p i \max_{T\in\mathcal F_{\mathrm{in}}}\sum_{k\in T}p_k=\mathrm{OPT}(i-1,j-w_i)+p_i T ∈ F in max k ∈ T ∑ p k = OPT ( i − 1 , j − w i ) + p i である。F ( i − 1 , j − w i ) \mathcal F(i-1,j-w_i) F ( i − 1 , j − w i ) は空でないのでF i n \mathcal F_{\mathrm{in}} F in も空でない。
最後に、有限集合X X X が二つの空でない部分X 1 X_1 X 1 とX 2 X_2 X 2 の交わらない合併であるとき、実数値関数f f f について
max X f = max { max X 1 f , max X 2 f } \max_{X}f=\max\bigl\{\max_{X_1}f,\ \max_{X_2}f\bigr\} X max f = max { X 1 max f , X 2 max f } が成り立つ。実際、X 1 X_1 X 1 とX 2 X_2 X 2 は空でない有限集合であるから右辺の三つの最大値はいずれも存在する。X 1 ⊆ X X_1\subseteq X X 1 ⊆ X とX 2 ⊆ X X_2\subseteq X X 2 ⊆ X によりmax X f ≥ max X 1 f \max_{X}f\ge\max_{X_1}f max X f ≥ max X 1 f かつmax X f ≥ max X 2 f \max_{X}f\ge\max_{X_2}f max X f ≥ max X 2 f であるから、左辺は右辺以上である。逆に、max X f = f ( x ) \max_{X}f=f(x) max X f = f ( x ) を満たすx ∈ X x\in X x ∈ X をとると、X = X 1 ∪ X 2 X=X_1\cup X_2 X = X 1 ∪ X 2 よりx ∈ X 1 x\in X_1 x ∈ X 1 またはx ∈ X 2 x\in X_2 x ∈ X 2 であり、前者ならばf ( x ) ≤ max X 1 f f(x)\le\max_{X_1}f f ( x ) ≤ max X 1 f 、後者ならばf ( x ) ≤ max X 2 f f(x)\le\max_{X_2}f f ( x ) ≤ max X 2 f であるから、左辺は右辺以下である。よって等号が成り立つ。
これをX = F ( i , j ) X=\mathcal F(i,j) X = F ( i , j ) 、X 1 = F o u t X_1=\mathcal F_{\mathrm{out}} X 1 = F out 、X 2 = F i n X_2=\mathcal F_{\mathrm{in}} X 2 = F in へ適用すると、j ≥ w i j\ge w_i j ≥ w i の場合の主張を得る。上でF o u t \mathcal F_{\mathrm{out}} F out とF i n \mathcal F_{\mathrm{in}} F in がともに空でないことを確かめたのは、この適用のためである。▨
漸化式が定まったので、これを状態遷移図式として書き直す。
命題 3.3. 定義 3.1 の設定のもとで
Q = { 0 , 1 , … , n } × { 0 , 1 , … , W } , Q=\{0,1,\dots,n\}\times\{0,1,\dots,W\}, Q = { 0 , 1 , … , n } × { 0 , 1 , … , W } , A = { ( ( i − 1 , j ) , ( i , j ) ) : 1 ≤ i ≤ n , 0 ≤ j ≤ W } ∪ { ( ( i − 1 , j − w i ) , ( i , j ) ) : 1 ≤ i ≤ n , w i ≤ 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\} A = { ( ( i − 1 , j ) , ( i , j ) ) : 1 ≤ i ≤ n , 0 ≤ j ≤ W } ∪ { ( ( i − 1 , j − w i ) , ( i , j ) ) : 1 ≤ i ≤ n , w i ≤ j ≤ W } と定める。このとき次が成り立つ。
D = ( Q , A ) D=(Q,A) D = ( Q , A ) は有向非巡回グラフであり、その境界状態の全体はQ 0 = { ( 0 , j ) : 0 ≤ j ≤ W } Q_0=\{(0,j):\ 0\le j\le W\} Q 0 = {( 0 , j ) : 0 ≤ j ≤ W } である。
境界値をb ( 0 , j ) = 0 b(0,j)=0 b ( 0 , j ) = 0 と定め、s = ( i , j ) s=(i,j) s = ( i , j ) (1 ≤ i ≤ n 1\le i\le n 1 ≤ i ≤ n )に対する遷移関数を、j < w i j<w_i j < w i のときg s ( x ) = x ( ( i − 1 , j ) ) g_s(x)=x\bigl((i-1,j)\bigr) g s ( x ) = x ( ( i − 1 , j ) ) 、j ≥ w i j\ge w_i j ≥ w i のときg s ( x ) = max { x ( ( i − 1 , j ) ) , x ( ( i − 1 , j − w i ) ) + p i } g_s(x)=\max\bigl\{x\bigl((i-1,j)\bigr),\ x\bigl((i-1,j-w_i)\bigr)+p_i\bigr\} g s ( x ) = max { x ( ( i − 1 , j ) ) , x ( ( i − 1 , j − w i ) ) + p i } と定めると、O P T \mathrm{OPT} OPT は得られる状態遷移図式Σ \Sigma Σ の唯一の解である。
写像ℓ ( i , j ) = i \ell(i,j)=i ℓ ( i , j ) = i はΣ \Sigma Σ の層分解であり、各層の要素数はW + 1 W+1 W + 1 である。
状態数と遷移数について
∣ Q ∣ = ( n + 1 ) ( W + 1 ) , n ( W + 1 ) ≤ ∣ A ∣ ≤ 2 n ( W + 1 ) \lvert Q\rvert=(n+1)(W+1),\qquad n(W+1)\le\lvert A\rvert\le 2n(W+1) ∣ Q ∣ = ( n + 1 ) ( W + 1 ) , n ( W + 1 ) ≤ ∣ A ∣ ≤ 2 n ( W + 1 )
が成り立つ。
証明. (1) を示す。まずA ⊆ Q × Q A\subseteq Q\times Q A ⊆ Q × Q であり、各弧の始点と終点は第一成分が異なるので相異なる。よってD D D は§D2.11 定義 1.1 の意味での有向グラフである。A A A のどの弧( t , s ) (t,s) ( t , s ) についても、t t t の第一成分に1 1 1 を加えたものがs s s の第一成分である。有向閉路u 0 , u 1 , … , u k = u 0 u_0,u_1,\dots,u_k=u_0 u 0 , u 1 , … , u k = u 0 (k ≥ 1 k\ge1 k ≥ 1 )が存在すると仮定し、u l u_l u l の第一成分をa l a_l a l と書くとa l = a 0 + l a_l=a_0+l a l = a 0 + l であるからa k = a 0 + k > a 0 a_k=a_0+k>a_0 a k = a 0 + k > a 0 となる。ところがu k = u 0 u_k=u_0 u k = u 0 よりa k = a 0 a_k=a_0 a k = a 0 であり、矛盾する。よってD D D は有向非巡回グラフである。
A A A のすべての弧の終点は第一成分が1 1 1 以上であるから、( 0 , j ) (0,j) ( 0 , j ) の入次数は0 0 0 である。逆に1 ≤ i ≤ n 1\le i\le n 1 ≤ i ≤ n のとき、弧( ( i − 1 , j ) , ( i , j ) ) \bigl((i-1,j),(i,j)\bigr) ( ( i − 1 , j ) , ( i , j ) ) がA A A に属するので( i , j ) (i,j) ( i , j ) の入次数は1 1 1 以上である。よってQ 0 = { ( 0 , j ) } Q_0=\{(0,j)\} Q 0 = {( 0 , j )} である。
(2) を示す。1 ≤ i ≤ n 1\le i\le n 1 ≤ i ≤ n とする。j < w i j<w_i j < w i のときN − ( ( i , j ) ) = { ( i − 1 , j ) } N^{-}\bigl((i,j)\bigr)=\{(i-1,j)\} N − ( ( i , j ) ) = {( i − 1 , j )} であり、j ≥ w i j\ge w_i j ≥ w i のときw i ≥ 1 w_i\ge1 w i ≥ 1 よりj − w i ≠ j j-w_i\ne j j − w i = j であるからN − ( ( i , j ) ) = { ( i − 1 , j ) , ( i − 1 , j − w i ) } N^{-}\bigl((i,j)\bigr)=\{(i-1,j),\ (i-1,j-w_i)\} N − ( ( i , j ) ) = {( i − 1 , j ) , ( i − 1 , j − w i )} である。よって上で定めたg s g_s g s はR N − ( s ) \mathbb R^{N^{-}(s)} R N − ( s ) 上の写像として矛盾なく定まる。命題 3.2 は、写像( i , j ) ↦ O P T ( i , j ) (i,j)\mapsto\mathrm{OPT}(i,j) ( i , j ) ↦ OPT ( i , j ) が定義 1.2 の二条件を満たすことをそのまま述べている。よってO P T \mathrm{OPT} OPT はΣ \Sigma Σ の解であり、定理 1.4 (3) により解は一つしかないので、O P T \mathrm{OPT} OPT が唯一の解である。
(3) を示す。A A A のどの弧( t , s ) (t,s) ( t , s ) についてもℓ ( s ) = ℓ ( t ) + 1 \ell(s)=\ell(t)+1 ℓ ( s ) = ℓ ( t ) + 1 であることは 1 で確かめた。ℓ \ell ℓ の値域は{ 0 , 1 , … , n } \{0,1,\dots,n\} { 0 , 1 , … , n } である。第i i i 層は{ ( i , j ) : 0 ≤ j ≤ W } \{(i,j):0\le j\le W\} {( i , j ) : 0 ≤ j ≤ W } であるから、その要素数はW + 1 W+1 W + 1 である。
(4) を示す。∣ Q ∣ = ( n + 1 ) ( W + 1 ) \lvert Q\rvert=(n+1)(W+1) ∣ Q ∣ = ( n + 1 ) ( W + 1 ) は直積の要素数である。A A A を定める二つの集合は交わらない。実際、第一の集合の弧は終点( i , j ) (i,j) ( i , j ) に対する始点の第二成分がj j j であり、第二の集合の弧はj − w i j-w_i j − w i であって、w i ≥ 1 w_i\ge1 w i ≥ 1 より両者は相異なるからである。第一の集合の要素数はn ( W + 1 ) n(W+1) n ( W + 1 ) である。第二の集合の要素数は∑ i = 1 n ∣ { j : w i ≤ j ≤ W } ∣ \sum_{i=1}^{n}\lvert\{j:\ w_i\le j\le W\}\rvert ∑ i = 1 n ∣{ j : w i ≤ j ≤ W }∣ であり、各項は0 0 0 以上W + 1 W+1 W + 1 以下であるから、この和は0 0 0 以上n ( W + 1 ) n(W+1) n ( W + 1 ) 以下である。よってn ( W + 1 ) ≤ ∣ A ∣ ≤ 2 n ( W + 1 ) n(W+1)\le\lvert A\rvert\le2n(W+1) n ( W + 1 ) ≤ ∣ A ∣ ≤ 2 n ( W + 1 ) である。▨
命題 3.4. 命題 3.3 の状態遷移図式Σ \Sigma Σ について、命題 2.2 の計算模型と仮定のもとで次が成り立つ。
位相順序に沿った評価の基本操作の総回数T T T は、図式によらない定数κ ≥ 1 \kappa\ge1 κ ≥ 1 を用いて
( n + 1 ) ( W + 1 ) ≤ T ≤ 3 κ ( n + 1 ) ( W + 1 ) (n+1)(W+1)\ \le\ T\ \le\ 3\kappa\,(n+1)(W+1) ( n + 1 ) ( W + 1 ) ≤ T ≤ 3 κ ( n + 1 ) ( W + 1 )
を満たす。とくにn ≥ 1 n\ge1 n ≥ 1 かつW ≥ 1 W\ge1 W ≥ 1 のときn W ≤ T ≤ 12 κ n W nW\le T\le12\kappa\,nW nW ≤ T ≤ 12 κ nW である。
すべての状態の値を保持する評価の使用セル数は( n + 1 ) ( W + 1 ) (n+1)(W+1) ( n + 1 ) ( W + 1 ) である。
命題 2.4 の手続きを層分解ℓ ( i , j ) = i \ell(i,j)=i ℓ ( i , j ) = i について用いると、使用セル数は2 ( W + 1 ) 2(W+1) 2 ( W + 1 ) 以下になり、第n n n 層の値、とくにO P T ( n , W ) \mathrm{OPT}(n,W) 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) ∣ Q ∣ + ∣ A ∣ ≤ T ≤ κ ( ∣ Q ∣ + ∣ A ∣ ) である。命題 3.3 (4) により
( n + 1 ) ( W + 1 ) ≤ ∣ Q ∣ + ∣ A ∣ ≤ ( n + 1 ) ( W + 1 ) + 2 n ( 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 + 1 ) ( W + 1 ) ≤ ∣ Q ∣ + ∣ A ∣ ≤ ( n + 1 ) ( W + 1 ) + 2 n ( W + 1 ) ≤ 3 ( n + 1 ) ( W + 1 ) であるから、主張の第一の不等式が従う。n ≥ 1 n\ge1 n ≥ 1 かつW ≥ 1 W\ge1 W ≥ 1 のときはn W ≤ ( n + 1 ) ( W + 1 ) ≤ 2 n ⋅ 2 W = 4 n W nW\le(n+1)(W+1)\le2n\cdot2W=4nW nW ≤ ( n + 1 ) ( W + 1 ) ≤ 2 n ⋅ 2 W = 4 nW であるからn W ≤ T ≤ 12 κ n W nW\le T\le12\kappa\,nW nW ≤ T ≤ 12 κ nW である。
(2) を示す。命題 2.2 の後半と∣ Q ∣ = ( n + 1 ) ( W + 1 ) \lvert Q\rvert=(n+1)(W+1) ∣ Q ∣ = ( n + 1 ) ( W + 1 ) による。
(3) を示す。命題 3.3 (3) によりℓ ( i , j ) = i \ell(i,j)=i ℓ ( i , j ) = i は層分解であり、各層の要素数はW + 1 W+1 W + 1 である。命題 2.4 (3) により、この手続きは各層の上で唯一の解O P T \mathrm{OPT} OPT に一致する族を与え、使用セル数はmax 1 ≤ r ≤ n ( ∣ L r − 1 ∣ + ∣ L r ∣ ) = 2 ( W + 1 ) \max_{1\le r\le n}\bigl(\lvert L_{r-1}\rvert+\lvert L_r\rvert\bigr)=2(W+1) max 1 ≤ r ≤ n ( ∣ L r − 1 ∣ + ∣ L r ∣ ) = 2 ( W + 1 ) 以下である。第n n n 層は{ ( n , j ) : 0 ≤ j ≤ W } \{(n,j):0\le j\le W\} {( n , j ) : 0 ≤ j ≤ W } であるから、そこにO P T ( n , W ) \mathrm{OPT}(n,W) OPT ( n , W ) が含まれる。▨
4 検算例
例 4.1 (小さなナップサック問題の手計算). n = 3 n=3 n = 3 、W = 5 W=5 W = 5 、重さを( w 1 , w 2 , w 3 ) = ( 2 , 3 , 4 ) (w_1,w_2,w_3)=(2,3,4) ( w 1 , w 2 , w 3 ) = ( 2 , 3 , 4 ) 、価値を( p 1 , p 2 , p 3 ) = ( 3 , 4 , 5 ) (p_1,p_2,p_3)=(3,4,5) ( p 1 , p 2 , p 3 ) = ( 3 , 4 , 5 ) とする。層分解ℓ ( i , j ) = i \ell(i,j)=i ℓ ( i , j ) = i に沿って、第0 0 0 層から順にO P T ( i , j ) \mathrm{OPT}(i,j) OPT ( i , j ) を求める。
第0 0 0 層はO P T ( 0 , j ) = 0 \mathrm{OPT}(0,j)=0 OPT ( 0 , j ) = 0 (j = 0 , 1 , 2 , 3 , 4 , 5 j=0,1,2,3,4,5 j = 0 , 1 , 2 , 3 , 4 , 5 )である。
第1 1 1 層はw 1 = 2 w_1=2 w 1 = 2 、p 1 = 3 p_1=3 p 1 = 3 による。j = 0 , 1 j=0,1 j = 0 , 1 ではj < 2 j<2 j < 2 であるからO P T ( 1 , j ) = O P T ( 0 , j ) = 0 \mathrm{OPT}(1,j)=\mathrm{OPT}(0,j)=0 OPT ( 1 , j ) = OPT ( 0 , j ) = 0 である。j = 2 j=2 j = 2 ではmax { O P T ( 0 , 2 ) , O P T ( 0 , 0 ) + 3 } = max { 0 , 3 } = 3 \max\{\mathrm{OPT}(0,2),\ \mathrm{OPT}(0,0)+3\}=\max\{0,3\}=3 max { OPT ( 0 , 2 ) , OPT ( 0 , 0 ) + 3 } = max { 0 , 3 } = 3 、j = 3 j=3 j = 3 ではmax { 0 , O P T ( 0 , 1 ) + 3 } = 3 \max\{0,\ \mathrm{OPT}(0,1)+3\}=3 max { 0 , OPT ( 0 , 1 ) + 3 } = 3 、j = 4 j=4 j = 4 ではmax { 0 , O P T ( 0 , 2 ) + 3 } = 3 \max\{0,\ \mathrm{OPT}(0,2)+3\}=3 max { 0 , OPT ( 0 , 2 ) + 3 } = 3 、j = 5 j=5 j = 5 ではmax { 0 , O P T ( 0 , 3 ) + 3 } = 3 \max\{0,\ \mathrm{OPT}(0,3)+3\}=3 max { 0 , OPT ( 0 , 3 ) + 3 } = 3 である。よって第1 1 1 層はj = 0 , 1 , 2 , 3 , 4 , 5 j=0,1,2,3,4,5 j = 0 , 1 , 2 , 3 , 4 , 5 の順に0 , 0 , 3 , 3 , 3 , 3 0,0,3,3,3,3 0 , 0 , 3 , 3 , 3 , 3 である。
第2 2 2 層はw 2 = 3 w_2=3 w 2 = 3 、p 2 = 4 p_2=4 p 2 = 4 による。j = 0 , 1 , 2 j=0,1,2 j = 0 , 1 , 2 ではj < 3 j<3 j < 3 であるから第1 1 1 層の値をそのまま引き継ぎ0 , 0 , 3 0,0,3 0 , 0 , 3 である。j = 3 j=3 j = 3 ではmax { O P T ( 1 , 3 ) , O P T ( 1 , 0 ) + 4 } = max { 3 , 4 } = 4 \max\{\mathrm{OPT}(1,3),\ \mathrm{OPT}(1,0)+4\}=\max\{3,4\}=4 max { OPT ( 1 , 3 ) , OPT ( 1 , 0 ) + 4 } = max { 3 , 4 } = 4 、j = 4 j=4 j = 4 ではmax { 3 , O P T ( 1 , 1 ) + 4 } = max { 3 , 4 } = 4 \max\{3,\ \mathrm{OPT}(1,1)+4\}=\max\{3,4\}=4 max { 3 , OPT ( 1 , 1 ) + 4 } = max { 3 , 4 } = 4 、j = 5 j=5 j = 5 ではmax { 3 , O P T ( 1 , 2 ) + 4 } = max { 3 , 7 } = 7 \max\{3,\ \mathrm{OPT}(1,2)+4\}=\max\{3,7\}=7 max { 3 , OPT ( 1 , 2 ) + 4 } = max { 3 , 7 } = 7 である。よって第2 2 2 層は0 , 0 , 3 , 4 , 4 , 7 0,0,3,4,4,7 0 , 0 , 3 , 4 , 4 , 7 である。
第3 3 3 層はw 3 = 4 w_3=4 w 3 = 4 、p 3 = 5 p_3=5 p 3 = 5 による。j = 0 , 1 , 2 , 3 j=0,1,2,3 j = 0 , 1 , 2 , 3 ではj < 4 j<4 j < 4 であるから第2 2 2 層の値を引き継ぎ0 , 0 , 3 , 4 0,0,3,4 0 , 0 , 3 , 4 である。j = 4 j=4 j = 4 ではmax { O P T ( 2 , 4 ) , O P T ( 2 , 0 ) + 5 } = max { 4 , 5 } = 5 \max\{\mathrm{OPT}(2,4),\ \mathrm{OPT}(2,0)+5\}=\max\{4,5\}=5 max { OPT ( 2 , 4 ) , OPT ( 2 , 0 ) + 5 } = max { 4 , 5 } = 5 、j = 5 j=5 j = 5 ではmax { O P T ( 2 , 5 ) , O P T ( 2 , 1 ) + 5 } = max { 7 , 5 } = 7 \max\{\mathrm{OPT}(2,5),\ \mathrm{OPT}(2,1)+5\}=\max\{7,5\}=7 max { OPT ( 2 , 5 ) , OPT ( 2 , 1 ) + 5 } = max { 7 , 5 } = 7 である。よって第3 3 3 層は0 , 0 , 3 , 4 , 5 , 7 0,0,3,4,5,7 0 , 0 , 3 , 4 , 5 , 7 であり、O P T ( 3 , 5 ) = 7 \mathrm{OPT}(3,5)=7 OPT ( 3 , 5 ) = 7 である。
総当たりによる検算 。{ 1 , 2 , 3 } \{1,2,3\} { 1 , 2 , 3 } の部分集合8 8 8 個について、重さの総和と価値の総和を書き下す。∅ \emptyset ∅ は( 0 , 0 ) (0,0) ( 0 , 0 ) 、{ 1 } \{1\} { 1 } は( 2 , 3 ) (2,3) ( 2 , 3 ) 、{ 2 } \{2\} { 2 } は( 3 , 4 ) (3,4) ( 3 , 4 ) 、{ 3 } \{3\} { 3 } は( 4 , 5 ) (4,5) ( 4 , 5 ) 、{ 1 , 2 } \{1,2\} { 1 , 2 } は( 5 , 7 ) (5,7) ( 5 , 7 ) 、{ 1 , 3 } \{1,3\} { 1 , 3 } は( 6 , 8 ) (6,8) ( 6 , 8 ) 、{ 2 , 3 } \{2,3\} { 2 , 3 } は( 7 , 9 ) (7,9) ( 7 , 9 ) 、{ 1 , 2 , 3 } \{1,2,3\} { 1 , 2 , 3 } は( 9 , 12 ) (9,12) ( 9 , 12 ) である。重さの総和が5 5 5 以下であるものは∅ \emptyset ∅ 、{ 1 } \{1\} { 1 } 、{ 2 } \{2\} { 2 } 、{ 3 } \{3\} { 3 } 、{ 1 , 2 } \{1,2\} { 1 , 2 } の五つであり、価値の総和の最大値は{ 1 , 2 } \{1,2\} { 1 , 2 } による7 7 7 である。O P T ( 3 , 5 ) = 7 \mathrm{OPT}(3,5)=7 OPT ( 3 , 5 ) = 7 と一致する。
同様にj = 4 j=4 j = 4 では重さの総和が4 4 4 以下であるものが∅ \emptyset ∅ 、{ 1 } \{1\} { 1 } 、{ 2 } \{2\} { 2 } 、{ 3 } \{3\} { 3 } の四つであり、価値の最大値は5 5 5 である。O P T ( 3 , 4 ) = 5 \mathrm{OPT}(3,4)=5 OPT ( 3 , 4 ) = 5 と一致する。j = 3 j=3 j = 3 では∅ \emptyset ∅ 、{ 1 } \{1\} { 1 } 、{ 2 } \{2\} { 2 } の三つで最大値は4 4 4 であり、O P T ( 3 , 3 ) = 4 \mathrm{OPT}(3,3)=4 OPT ( 3 , 3 ) = 4 と一致する。
状態数と遷移数の検算 。∣ Q ∣ = ( 3 + 1 ) ( 5 + 1 ) = 24 \lvert Q\rvert=(3+1)(5+1)=24 ∣ Q ∣ = ( 3 + 1 ) ( 5 + 1 ) = 24 である。A A A の第一の集合の要素数は3 × 6 = 18 3\times6=18 3 × 6 = 18 である。第二の集合の要素数は、i = 1 i=1 i = 1 で∣ { j : 2 ≤ j ≤ 5 } ∣ = 4 \lvert\{j:2\le j\le5\}\rvert=4 ∣{ j : 2 ≤ j ≤ 5 }∣ = 4 、i = 2 i=2 i = 2 で∣ { j : 3 ≤ j ≤ 5 } ∣ = 3 \lvert\{j:3\le j\le5\}\rvert=3 ∣{ j : 3 ≤ j ≤ 5 }∣ = 3 、i = 3 i=3 i = 3 で∣ { j : 4 ≤ j ≤ 5 } ∣ = 2 \lvert\{j:4\le j\le5\}\rvert=2 ∣{ j : 4 ≤ j ≤ 5 }∣ = 2 であるから4 + 3 + 2 = 9 4+3+2=9 4 + 3 + 2 = 9 である。よって∣ A ∣ = 18 + 9 = 27 \lvert A\rvert=18+9=27 ∣ A ∣ = 18 + 9 = 27 であり、命題 3.3 (4) が与える範囲18 ≤ ∣ A ∣ ≤ 36 18\le\lvert A\rvert\le36 18 ≤ ∣ A ∣ ≤ 36 に収まる。使用セル数は、全状態を保持すれば24 24 24 、連続する二層だけを保持すれば2 × 6 = 12 2\times6=12 2 × 6 = 12 以下である。
5 演習
問題 5.1.
定理 1.4 (3) の一意性の証明を、累積帰納法を用いずに単純帰納法だけで書き直そうとすると、どこで行き詰まるかを述べよ。行き詰まる箇所を、帰納法の仮定として何が必要かという形で特定し、§D2.1 命題 1.2 を用いて累積帰納法へ戻す道筋を書け。
定理 1.4 (2) の証明は、位相順序の定義だけを用いてι ( t ) < i \iota(t)<i ι ( t ) < i を導いている。この一手を落とすと、3 の存在の証明のどの等式が意味をもたなくなるかを指摘し、その等式を明示して説明せよ。
命題 3.2 の証明では、j ≥ w i j\ge w_i j ≥ w i のときにF i n \mathcal F_{\mathrm{in}} F in が空でないことを確かめている。この確認を落とすと、最後に用いた最大値の分割の等式が成り立たなくなる。F i n = ∅ \mathcal F_{\mathrm{in}}=\emptyset F in = ∅ かつ等式を無批判に用いた場合にどのような誤りが生じるかを、具体的なi i i とj j j の値を挙げて示せ。
状態遷移図式Σ \Sigma Σ が層分解をもたない例を一つ作り、それにもかかわらず定理 1.4 を適用することができることを確かめよ。さらに、その例で連続する二つの層だけを保持する評価を用いることができない理由を、命題 2.4 (3) の証明のどの段が破れるかによって述べよ。
重さの上限のもとで価値を最大にするのではなく、価値の下限P P P を満たす選び方のうち重さの総和を最小にする問題を考える。この問題について状態集合、弧集合、境界値および遷移関数を設計し、最適値がその漸化式を満たすことを命題 3.2 の証明にならって証明せよ。さらに状態数と遷移数を数え、命題 2.2 によって基本操作の回数の上界と下界を書き下せ。
注意 1.6 の二つの例について、それぞれ「解が存在しない」ことと「解が一意でない」ことを、定義 1.2 の二条件に戻って確かめよ。さらに、Q = { s , t , r } Q=\{s,t,r\} Q = { s , t , r } と長さ3 3 3 の有向閉路をもつ例を作り、解が存在しないようにする遷移関数を与えよ。
6 つまずいたら
弧の向きを取り違えない。定義 1.1 では弧( t , s ) (t,s) ( t , s ) を「s s s の値を定めるのにt t t の値を用いる」と読む。逆向きに定めると、位相順序に沿った評価は先行状態がまだ定まっていない状態から始まり、定理 1.4 (2) が成り立たない。
「最適部分構造をもつ」という言い方は、それ自体では証明にならない。命題 3.2 のように、最適値が漸化式を満たすことを実行可能解の集合の分割によって示し、その上で定理 1.4 の一意性を用いる、という二段の議論が必要である。
解の一意性と評価の順序の任意性は別の主張である。前者は定理 1.4 (3) が、後者は系 1.5 が述べる。後者は前者から従うのであって、逆ではない。
空間計算量の値は規約に依存する。定義 2.1 は入力を保持する領域を数えない。入力も数える規約を採ると、命題 3.4 (3) の2 ( W + 1 ) 2(W+1) 2 ( W + 1 ) という上界は、入力を保持する分だけ大きくなる。
容量に比例する上界を多項式時間と読み替えない。注意 3.5 のとおり、W W W の値とW W W を表すビット数は別物である。
7 扱った範囲と次の記事
本記事は、状態、遷移および境界値を有限有向非巡回グラフとして定式化し、その漸化式の解がただ一つ存在すること、および任意の位相順序に沿った評価がその解を与えることを証明した。評価の結果が位相順序の取り方によらないことを系として導き、有向閉路を許すと解の一意存在が壊れることを例で示した。空間計算量を定義し、状態数と遷移数から評価の基本操作の回数と使用セル数を上下から抑えた。層分解をもつ図式については、連続する二つの層だけを保持する評価が同じ値を与えることを証明した。0-1 ナップサック問題については、最適値が漸化式を満たすことを証明し、状態数と遷移数から時間計算量と空間計算量を導いた。最適解そのものを復元する手続きと、この問題の計算量理論における位置づけは扱っていない。
次の記事では、一つの操作ではなく有限な操作列の全体に対して計算量の上界を与える枠組みを定め、集計法、会計法およびポテンシャル法によって二進カウンタと動的配列の操作列を評価する。