NP完全とかNP困難とか
友人からNP完全とNP困難について分かりやすく説明してくれと言われたので、頑張ってまとめました。
時間計算量に関しては↓のエントリ参照。
時間計算量に関して-- http://d.hatena.ne.jp/nsasaki/20110426/1303807572
そもそもNPって何?って話から。
Wikipediaより
NPとは、計算複雑性理論における問題の複雑性クラスで、Non-deterministic Polynomial time(非決定性多項式時間)の略である。
定義
NP の定義は次の3つである、ただしこれらはお互い同値であることが証明されている。
- 非決定性チューリングマシンによって多項式時間で解くことができる問題。
- yes となる証拠が与えられたとき、その証拠が本当に正しいかどうかを多項式時間で判定できる問題。
- 問題の探索状態を木で表したとき、yes にたどり着く最短距離が問題のサイズの多項式に比例する問題。
端的に説明するときは 2番目の定義(多項式時間で検算可能)が用いられることが多い。
なお NP はクラス P 同様、判定問題のクラスであり yes/no で答えることの出来ない問題は NP には属さない。
誤解されることが多いが、NP は多項式時間で解けない問題のクラスではない(Not P の略ではない)。上記の定義は全てのクラス P の問題にも当てはまるので、クラス P は クラス NP に含まれる。
と書いてあるけど分かりませんよね。。
専門知識がない人(と言っても高校数学レベルは必要ですが)には2.が一番分かりやすいかと。。
有名な例は3-SAT。
3-SAT
3-SATを理解するためにまず、論理演算の話を。
論理演算とは、に関して、
という演算体系のこと。
3-SATとは
のように3個の論理和と任意個の論理積で構成され、その値が1になるような組み合わせが存在するか。という問題。
ここではが答えの一つ。
変数がn個存在するときについて考えると、一般的な解き方が判明していないので総当たりで調べることになる。
この場合、問題を解くのに最悪のケースで回トライすることになる。
また、各トライでは論理積の数がm個のとき3mn回の計算で答えが出る。(各xについて調べるため)
これはwikipediaさんの2.の定義で言うところのyesとなる証拠が与えられればそれが正しいのかどうか多項式時間で判定できる例である。
NPについて
くだけた言い方をすると、
なんか証拠が与えられた時にそれを確かめるのは変数に対して、確かめるのにかかる時間はその変数の多項式で調べられる。
しかし、何も証拠がないとどれくらいかかるかは分からないかもしれないよ。
っていう感じ。
ちなみにクラスPというのは
何も証拠がなくても多項式で解ける問題。
だからPはNPに含まれると。
で、クラスPとクラスNPは等しくないだろうという予想されている。
この予想はP≠NP予想と呼ばれている。
これが正しいのかそれとも間違っているのかという証明はされていない。
また、クレイ数学研究所のミレニアム懸賞問題の一つとして、この問題に対して100万ドルの懸賞金がかけられている。