削除された内容 追加された内容
Alexbot (会話 | 投稿記録)
m ロボットによる: 細部の編集
m編集の要約なし
1行目:
[[ファイル:P_np_np-complete_np-hard.svg|thumb|300px|right| [[P (計算複雑性理論)|P]]、[[NP]]、[[NP完全問題|NP完全]]、[[NP困難]]の相関を表す[[ベン図]]]]
 
'''NP困難'''(-こんなん、NP-hard)とは[[計算複雑性理論]]における問題のクラスの1つ。非形式的に言えば「[[NP]]に属する最も難しい問題と比べて、少なくとも同等以上に難しい」問題である。問題 ''H'' がNP困難のクラスに属するとは、「[[NP完全問題]]に属するいずれかの問題 ''L'' が ''H'' へ[[多項式時間変換|多項式時間チューリング還元]]可能である」と定義される。即ち<math>\scriptstyle L\, \leq\,_T H</math>であり、NP困難問題を解ける[[神託機械]]がもしあれば、それを利用してNP完全問題を多項式時間で解くことができる。<br />
NP完全問題とは、NPの任意の問題から[[多項式時間変換|多項式時間多対一還元]]可能であり、かつ、<span style="text-decoration:underline;">NPに属する</span>問題である。これと異なり、NP困難である問題は<span style="text-decoration:underline;">NPに属するとは限らない</span>。[[P (計算複雑性理論)|P]]や[[NP]]は[[決定問題]]のクラスなので、NP完全もまた決定問題に限られるが、NP困難には決定問題、[[検索問題]]([[:en:Search problem|en]])、[[最適化問題]]など様々な問題が属しうる。
 
上に挙げた定義から次のことが言える(以下は定義ではなく主張)。
 
* 問題 ''H'' は少なくとも L と同等以上に難しい。何故なぜなら H を用いて ''L'' を解けるからである。
* ''L'' はNP完全であり、NPの中では最も難しいので、問題 ''H'' は少なくともNPと同等以上に難しい。しかし ''H'' はNPに属している必要はなく、したがって[[決定問題]]ではなくても良い。
* NP完全問題同士は互いに多項式時間[[多対一還元]](別称:多項式変換とも)可能なので、すべてのNP完全問題は ''H'' に還元して多項式時間で解ける。したがってNPに属する全ての問題も ''H'' に還元できる。ただここでは二種類の変換を組み合わせていることに注意されたいが必要。NP完全に属する決定問題をNP完全な問題 ''L'' に帰着する際は多項式変換であり、''L'' を ''H'' に変換する際は多項式時間[[チューリング還元]]である。
* もし最適化問題 H の特殊例としてNP完全な決定問題 ''L'' を考えられるなら、''H'' はNP困難である。
* もし ''H'' がたまたまNPに属すなら、''H'' はNP完全。何故なぜならこの場合多項式時間チューリング還元が多項式変換の要件を満たすので。<ref>注:英語版(版:18:14, 10 November 2008)ではこの一文は疑問があるとして削除されている。</ref>
 
NP困難な[[最適化問題]]は、最適解を求めるのが非常に困難であるため、[[近似アルゴリズム]]に関しても研究されている。
 
== P≠NP予想との関係 ==
もし、いずれかのNP困難な問題を[[多項式時間]]で解くアルゴリズムが存在したなら、NPの全ての問題について多項式時間で解けることになり、P = NP が成り立つ。同様に、いずれかのNP完全な問題を多項式時間で解くアルゴリズムが存在した場合も、NPに属する全ての問題が多項式時間で解ける。そのため「'''いずれかの'''NP困難(またはNP完全)な問題を多項式時間で解く方法が存在するか」という問題はそのまま [[P≠NP予想]]の否定の証明になる。ところが、P=NPが成立しても「'''任意の'''NP困難な問題が多項式時間で解ける」とは言えない。これに対し、P≠NPが成り立つならば「'''如何いかなる'''NP困難な問題についても、これを多項式時間で解く一般的なアルゴリズムは存在しない」と言える。この関係を右上の[[ベン図]]に示す。
 
== NP困難な問題の例 ==
*[[停止問題]] - NP困難だがNP完全ではない決定問題。NP困難であることは、例えば[[充足可能性問題]]を停止問題に容易に還元できることから言える(充足できる解を見付けたら停止し、そうでない場合は無限ループするような[[チューリングマシン]]の停止問題を考えればよい)。NP完全でないことは、NPに属する問題は全て有限の手続きで決定可能だが、停止問題は一般には決定不可能であることにる。ただし、NP困難でありかつNP完全でない問題の全てが決定不可能というわけではない。例えば[[TQBF問題]]([[:en:True quantified Boolean formula|en]])は[[PSPACE]]で決定可能だが、多分NPではない。
*[[巡回セールスマン問題]] - 最適化問題。
*[[ハミルトン閉路問題]] - 巡回セールスマン問題の特殊ケース。NP困難かつNP完全な決定問題。
31行目:
 
== NP関連クラスの命名規約について ==
NPに関連するクラスの名称はまぎらわしい。「NP困難」はクラス名に「NP」と付く全てが[[NP]]というわけではない。しかし現状では定着した名称なので、今更いまさら変わりそうにない。とはいえ、NPを中心に置いた上でそれなりに体系があるのも事実である。
'''NP完全''' — NPの'''中では'''「完全」な問題を意味する。つまりNPの'''中では'''最も解くのが難しい。 
'''NP困難''' — 「少なくとも」NPと同等以上に難しい問題(ただNP'''に属する'''とは限らない)。
'''NP-easy''' — 「たかだか」NPと同等以下しか難しくない問題(ただNP'''に属する'''とは限らない)。
'''NP-equivalent''' — NPと同等に難しい問題(ただNP'''に属する'''とは限らない)。
 
== 関連項目 ==
*[[NP完全問題]]
*[[多項式時間変換]] - 多対一還元やチューリング還元に計算時間の制限を付加したもの。
*[[チューリング還元]] - 計算時間を多項式時間に制限する場合は、それを示すために前に「多項式時間~」と付けるか、または Cook還元と呼ぶ
*[[多対一還元]] - 計算時間を多項式時間に制限する場合は、それを示すために前に「多項式時間~」と付けるか、または Karp還元と呼ぶ。単に「多項式変換」と書けば通常 Karp還元を指す
 
== 脚注 ==