Aritalab:Lecture/Algorithm/CooksTheorem
m |
m |
||
Line 1: | Line 1: | ||
==クックの定理== | ==クックの定理== | ||
− | + | クックが1971年に証明した、論理式の充足可能性問題がNP完全であることを解説します。 | |
;参考文献 : Garey MR, Johnson DS "Computers and Intractability" ''WH Freeman & Co.'' 1979 | ;参考文献 : Garey MR, Johnson DS "Computers and Intractability" ''WH Freeman & Co.'' 1979 | ||
==論理式の充足可能性問題== | ==論理式の充足可能性問題== | ||
− | ブール変数の集合 U = { u<sub>1</sub>, u<sub>2</sub> ... u<sub>m</sub> } に対する真偽の割り当て | + | ブール変数の集合 U = { u<sub>1</sub>, u<sub>2</sub> ... u<sub>m</sub> } に対する真偽の割り当て U → {T, F} を考えます。変数が m 個あれば、割り当てパターンは 2<sup>m</sup> 通りあります。 |
− | U に含まれる複数個のブール変数 u またはその否定 ¬u | + | U に含まれる複数個のブール変数 u またはその否定 ¬u を論理和 (or) ∨ でつないだものを節といいます。 |
節が真になるとき、その節は充足されたといいます。 | 節が真になるとき、その節は充足されたといいます。 | ||
例えば{ u<sub>1</sub>, ¬u<sub>2</sub>, u<sub>3</sub> } という節は、 u<sub>1</sub> = F かつ u<sub>2</sub> = T かつ u<sub>3</sub> = F でない限り充足されます。(充足する真偽の割り当ては7パターンあります。) | 例えば{ u<sub>1</sub>, ¬u<sub>2</sub>, u<sub>3</sub> } という節は、 u<sub>1</sub> = F かつ u<sub>2</sub> = T かつ u<sub>3</sub> = F でない限り充足されます。(充足する真偽の割り当ては7パターンあります。) | ||
− | 節の集合 C が充足可能であるとは、C に含まれる節を全て充足するようなブール変数の集合 U | + | 節の集合 C が充足可能であるとは、C に含まれる節を全て充足するようなブール変数の集合 U に対する真偽の割り当てが存在することをいいます。この定義を用いて、充足可能性問題 (SAT: Satisfiability Problem) は以下のように書けます。 |
:「変数の集合 U 上の節集合 C に対して、それを充足する真偽の割り当てが存在するか?」 | :「変数の集合 U 上の節集合 C に対して、それを充足する真偽の割り当てが存在するか?」 | ||
Line 16: | Line 16: | ||
: C = { {¬u<sub>1</sub>, u<sub>2</sub>}, {u<sub>1</sub>, ¬u<sub>2</sub>} } は充足可能 ( u<sub>1</sub> = u<sub>2</sub> = T のとき) | : C = { {¬u<sub>1</sub>, u<sub>2</sub>}, {u<sub>1</sub>, ¬u<sub>2</sub>} } は充足可能 ( u<sub>1</sub> = u<sub>2</sub> = T のとき) | ||
: C = { {u<sub>1</sub>, u<sub>2</sub>}, {u<sub>1</sub>, ¬u<sub>2</sub>}, {¬u<sub>1</sub>} } は充足不可能 | : C = { {u<sub>1</sub>, u<sub>2</sub>}, {u<sub>1</sub>, ¬u<sub>2</sub>}, {¬u<sub>1</sub>} } は充足不可能 | ||
− | となります。充足可能性を判定するには、2<sup>m</sup> | + | となります。充足可能性を判定するには、2<sup>m</sup> 通りに近い真偽パターンを試す以外に方法が無さそうです。それゆえNP完全、クラスNPの中でも最も難しいとされる問題クラスに属しています。(ただしP ≠ NP は証明されていません。) |
==Cookの定理== | ==Cookの定理== | ||
Line 44: | Line 44: | ||
| 2 p(n)<sup>2</sup> * v | | 2 p(n)<sup>2</sup> * v | ||
|} | |} | ||
− | : r ... 初期状態 q<sub>0</sub>、受理状態 q<sub>Y</sub>, q<sub>N</sub> も含めた全状態数 |Q| | + | ただし |
− | : v ... | + | : r ... 初期状態 q<sub>0</sub>、受理状態 q<sub>Y</sub>, q<sub>N</sub> も含めた全状態数 |Q| のこと、 |
+ | : v ... 空白記号 (b = s<sub>0</sub>とする) や入力記号も含めた、テープ記号数 | Γ | のことです。 | ||
− | + | これらの変数を用いて次表に示す6つの節グループを作成し、NDTM ''M'' の動きを規定します。 | |
{| class="wikitable" | {| class="wikitable" | ||
− | ! グループ | + | ! width="10%"| グループ |
+ | ! width="20%"| 意味 | ||
+ | ! width="40%"| 節の構成 | ||
+ | ! width="15%"| 変数の範囲 | ||
+ | ! width="15%"| 節の個数(大雑把に) | ||
|- | |- | ||
| rowspan="2"| 状態に関する制約 | | rowspan="2"| 状態に関する制約 | ||
Line 65: | Line 70: | ||
| rowspan="2" | ヘッド位置に関する制約 | | rowspan="2" | ヘッド位置に関する制約 | ||
| 時刻 i においてヘッドはいずれかのテープ位置にある | | 時刻 i においてヘッドはいずれかのテープ位置にある | ||
− | | { H [ t<sub>i</sub>, -p(n) ], H [ t<sub>i</sub>, -p(n)+1 ], ..., H [ t<sub>i</sub>, p(n)+1 | + | | { H [ t<sub>i</sub>, -p(n) ], H [ t<sub>i</sub>, -p(n)+1 ], ..., H [ t<sub>i</sub>, p(n)+1 ] } |
| 0 ≤ i ≤ p(n) | | 0 ≤ i ≤ p(n) | ||
| p(n) | | p(n) | ||
Line 85: | Line 90: | ||
| p(n) * 2 p(n) * v | | p(n) * 2 p(n) * v | ||
|- | |- | ||
− | | ''M'' の初期設定に関する制約 | + | | rowspan="2"| ''M'' の初期設定に関する制約 |
− | | | + | | 時間0の初期状態では、テープが左端でヘッドは空白記号をみている |
− | | { Q [ t<sub>0</sub>, q<sub>0</sub> ] }, { H [ t<sub>0</sub>, 1 ] }, { S [ t<sub>0</sub>, 0, s<sub>0</sub> ] } | + | |{ Q [ t<sub>0</sub>, q<sub>0</sub> ] }, { H [ t<sub>0</sub>, 1 ] }, { S [ t<sub>0</sub>, 0, s<sub>0</sub> ] } |
+ | | - | ||
+ | | 3 | ||
+ | |- | ||
+ | | テープに入力 x = k<sub>1</sub>k<sub>2</sub>...k<sub>n</sub>のみ書かれている | ||
+ | |{ S [ t<sub>0</sub>, 1, k<sub>1</sub> ] }, { S [ t<sub>0</sub>, 2, k<sub>2</sub> ] }, u... { S [ t<sub>0</sub>, n, k<sub>n</sub> ] }, <br/> { S [ t<sub>0</sub>, n+1, b ] }, { S [ t<sub>0</sub>, n+2, b ] }, ... { S [ t<sub>0</sub>, p(n)+1, b ] } | ||
+ | | - | ||
| p(n) | | p(n) | ||
|- | |- | ||
Line 93: | Line 104: | ||
| 時刻 p(n) には ''M'' が状態 q<sub>Y</sub> に到達 | | 時刻 p(n) には ''M'' が状態 q<sub>Y</sub> に到達 | ||
| { Q [ t<sub>p(n)</sub>, q<sub>Y</sub> ] } | | { Q [ t<sub>p(n)</sub>, q<sub>Y</sub> ] } | ||
+ | | - | ||
| 1 | | 1 | ||
|- | |- | ||
| rowspan="2" | 状態遷移に関する制約 | | rowspan="2" | 状態遷移に関する制約 | ||
− | | 時刻 i | + | | 時刻 i にテープ位置 j をアクセスしない場合 j の中身はs<sub>l</sub>のまま変化しない |
| { ¬S [ t<sub>i</sub>, j, s<sub>l</sub> ], H [ t<sub>i</sub>, j ], S [ t<sub>i+1</sub>, j, s<sub>l</sub> ] } | | { ¬S [ t<sub>i</sub>, j, s<sub>l</sub> ], H [ t<sub>i</sub>, j ], S [ t<sub>i+1</sub>, j, s<sub>l</sub> ] } | ||
| 0 ≤ i ≤ p(n), <br/> -p(n) ≤ j ≤ p(n)+1, <br/> 0 ≤ l ≤ v | | 0 ≤ i ≤ p(n), <br/> -p(n) ≤ j ≤ p(n)+1, <br/> 0 ≤ l ≤ v | ||
| 2 p(n)<sup>2</sup> * v | | 2 p(n)<sup>2</sup> * v | ||
|- | |- | ||
− | | 時刻 i | + | | 時刻 i における状態遷移が δ(q<sub>k</sub>,s<sub>l</sub>) = (q<sub>k'</sub>,s<sub>l'</sub>,Δ) で表現される |
− | + | | { ¬H[ t<sub>i</sub>, j ], ¬Q[ t<sub>i</sub>, q<sub>k</sub> ], ¬S[ t<sub>i</sub>, j, s<sub>l</sub> ],<br/> H[ t<sub>i+1</sub>, j + Δ ] }<br/>{ ¬H[ t<sub>i</sub>, j ], ¬Q[ t<sub>i</sub>, q<sub>k</sub> ], ¬S[ t<sub>i</sub>, j, s<sub>l</sub> ],<br/> Q[ t<sub>i+1</sub>, q<sub>k'</sub> ] } <br/>{ ¬H[ t<sub>i</sub>, j ], ¬Q[ t<sub>i</sub>, q<sub>k</sub> ], ¬S[ t<sub>i</sub>, j, s<sub>l</sub> ],<br/> S[ t<sub>i+1</sub>, j, s<sub>l'</sub> ] } <br/> | |
+ | | 0 ≤ i < p(n),<br/>-p(n) ≤ j ≤ p(n) + 1,<br/>0 ≤ k ≤ r,<br/>0 ≤ l ≤ v | ||
+ | | 6 * p(n)<sup>2</sup>* r * v | ||
|} | |} |
Revision as of 12:12, 1 November 2010
クックの定理
クックが1971年に証明した、論理式の充足可能性問題がNP完全であることを解説します。
- 参考文献
- Garey MR, Johnson DS "Computers and Intractability" WH Freeman & Co. 1979
論理式の充足可能性問題
ブール変数の集合 U = { u1, u2 ... um } に対する真偽の割り当て U → {T, F} を考えます。変数が m 個あれば、割り当てパターンは 2m 通りあります。 U に含まれる複数個のブール変数 u またはその否定 ¬u を論理和 (or) ∨ でつないだものを節といいます。 節が真になるとき、その節は充足されたといいます。 例えば{ u1, ¬u2, u3 } という節は、 u1 = F かつ u2 = T かつ u3 = F でない限り充足されます。(充足する真偽の割り当ては7パターンあります。)
節の集合 C が充足可能であるとは、C に含まれる節を全て充足するようなブール変数の集合 U に対する真偽の割り当てが存在することをいいます。この定義を用いて、充足可能性問題 (SAT: Satisfiability Problem) は以下のように書けます。
- 「変数の集合 U 上の節集合 C に対して、それを充足する真偽の割り当てが存在するか?」
例えばU = { u1, u2 } において
- C = { {¬u1, u2}, {u1, ¬u2} } は充足可能 ( u1 = u2 = T のとき)
- C = { {u1, u2}, {u1, ¬u2}, {¬u1} } は充足不可能
となります。充足可能性を判定するには、2m 通りに近い真偽パターンを試す以外に方法が無さそうです。それゆえNP完全、クラスNPの中でも最も難しいとされる問題クラスに属しています。(ただしP ≠ NP は証明されていません。)
Cookの定理
- 充足可能性問題 (SAT) はNP完全である
SATがNPに入ることは明らかです。正解となる論理変数の割り当てを知っていれば、節が充足されることを検証するのは簡単です(線形時間しか要しません)。 SATがNP完全であることを示すには、NPに属するあらゆる問題が、SATの一例とみなせることを示さなくてはなりません。しかし、あらゆるNP問題を逐一SATに変換していては埒が明きません。 そのかわり、非決定性チューリング機械 (NDTM) の全動作パターンを、SATで特定できることを示します。
入力文字列を x 、計算が終わるまでに必要な多項式時間ステップを p(n) (n = |X|) とします (受理状態も含めます)。 この時間内で、NDTM M = (Γ, Q, δ, x) はテープ位置 -p(n) から p(n) + 1 の内側しか処理できないことを利用します。M の状態数やテープ記号数も有限ですから、これらに関する処理を有限個の変数で記述することが可能です。
変数 | 意味 | パラメータ | 大雑把な個数 |
---|---|---|---|
Q[ti, qk] | 時間 i において M が状態 qkにある時に限り True | 0 ≤ i ≤ p(n) 0 ≤ k ≤ r |
p(n) * r |
H[ti, j] | 時間 i において M のヘッドが テープ位置 j にある時に限り True |
0 ≤ i ≤ p(n) -p(n) ≤ j ≤ p(n) + 1 |
2 p(n)2 |
S[ti, j, sk] | 時間 i においてテープ位置 j に 記号 sk が書かれている時に限り True |
0 ≤ i ≤ p(n) -p(n) ≤ j ≤ p(n) + 1 0 ≤ k ≤ v |
2 p(n)2 * v |
ただし
- r ... 初期状態 q0、受理状態 qY, qN も含めた全状態数 |Q| のこと、
- v ... 空白記号 (b = s0とする) や入力記号も含めた、テープ記号数 | Γ | のことです。
これらの変数を用いて次表に示す6つの節グループを作成し、NDTM M の動きを規定します。
グループ | 意味 | 節の構成 | 変数の範囲 | 節の個数(大雑把に) |
---|---|---|---|---|
状態に関する制約 | 時刻 i において M はいずれかの状態にある | { Q [ ti, q0 ], Q [ ti, qY ], Q [ ti, qN ], Q [ ti, q3 ], ... , Q [ ti, qr ] } | 0 ≤ i ≤ p(n) | p(n) |
時刻 i において M は二つの状態を同時に取らない | { ¬Q [ ti, qj ], ¬Q [ ti, qj' ] } | 0 ≤ i ≤ p(n), 0 ≤ j < j' ≤ r |
p(n) * r2/2 | |
ヘッド位置に関する制約 | 時刻 i においてヘッドはいずれかのテープ位置にある | { H [ ti, -p(n) ], H [ ti, -p(n)+1 ], ..., H [ ti, p(n)+1 ] } | 0 ≤ i ≤ p(n) | p(n) |
時刻 i においてヘッドは二つの位置を同時に取らない | { ¬H [ ti, j ], ¬H [ ti, j' ] } | 0 ≤ i ≤ p(n), -p(n) ≤ j < j' ≤ p(n)+1 |
p(n) * 2 p(n)2 | |
テープに書く記号に関する制約 | 時刻 i においてテープ位置 j にはいずれかの記号 k がある | { S [ ti, j, s0 ], S [ ti, j, s1 ], ..., S [ ti, j, sv ] } | 0 ≤ i ≤ p(n), -p(n) ≤ j ≤ p(n)+1 |
p(n) * 2 p(n) |
時刻 i においてテープ位置 j は二種の記号を同時に取らない | { ¬S [ ti, j, sk ], ¬S [ ti, j, sk' ] } | 0 ≤ i ≤ p(n), -p(n) ≤ j ≤ p(n)+1, 0 ≤k < k' ≤ v |
p(n) * 2 p(n) * v | |
M の初期設定に関する制約 | 時間0の初期状態では、テープが左端でヘッドは空白記号をみている | { Q [ t0, q0 ] }, { H [ t0, 1 ] }, { S [ t0, 0, s0 ] } | - | 3 |
テープに入力 x = k1k2...knのみ書かれている | { S [ t0, 1, k1 ] }, { S [ t0, 2, k2 ] }, u... { S [ t0, n, kn ] }, { S [ t0, n+1, b ] }, { S [ t0, n+2, b ] }, ... { S [ t0, p(n)+1, b ] } |
- | p(n) | |
受理状態に関する制約 | 時刻 p(n) には M が状態 qY に到達 | { Q [ tp(n), qY ] } | - | 1 |
状態遷移に関する制約 | 時刻 i にテープ位置 j をアクセスしない場合 j の中身はslのまま変化しない | { ¬S [ ti, j, sl ], H [ ti, j ], S [ ti+1, j, sl ] } | 0 ≤ i ≤ p(n), -p(n) ≤ j ≤ p(n)+1, 0 ≤ l ≤ v |
2 p(n)2 * v |
時刻 i における状態遷移が δ(qk,sl) = (qk',sl',Δ) で表現される | { ¬H[ ti, j ], ¬Q[ ti, qk ], ¬S[ ti, j, sl ], H[ ti+1, j + Δ ] } { ¬H[ ti, j ], ¬Q[ ti, qk ], ¬S[ ti, j, sl ], Q[ ti+1, qk' ] } { ¬H[ ti, j ], ¬Q[ ti, qk ], ¬S[ ti, j, sl ], S[ ti+1, j, sl' ] } |
0 ≤ i < p(n), -p(n) ≤ j ≤ p(n) + 1, 0 ≤ k ≤ r, 0 ≤ l ≤ v |
6 * p(n)2* r * v |