コンピュータが問題を解く際、どれほどの時間やメモリが必要になるかを分析する学問を計算複雑性理論と呼びます。その中で、特に「効率的に解くことが極めて困難である」とされる問題のクラスがNP困難(NP-hard)です。
簡単に言えば、NP困難な問題とは「NPクラスに属するあらゆる問題と同等か、それ以上に難しい問題」を指します。もし、たった一つでもNP困難な問題を効率的(多項式時間)に解くアルゴリズムが見つかれば、NPに属するすべての問題が効率的に解けることになります。しかし、現代の計算機科学では、そのようなアルゴリズムは存在しないと考えられています。
Key Facts
- 定義: NPに属するすべての問題が、多項式時間でその問題に還元できる場合に「NP困難」と呼ぶ。
- 難易度: NPクラスの中で最も難しい問題と同等以上の複雑さを持つ。
- 範囲: NP困難な問題は、必ずしもNPクラス(解の検証が効率的にできる問題)である必要はなく、決定不能な問題も含まれる。
- P≠NP予想: P≠NPであると仮定される場合、NP困難な問題を多項式時間で解くことは不可能である。
NP困難の定義とメカニズム
ある問題 $H$ がNP困難であるとは、NPクラスに属する任意の問題 $L$ に対して、「$L$ を $H$ に多項式時間で還元できる」ことを意味します。ここで言う多項式時間還元とは、問題 $L$ の解法を、問題 $H$ を解く仕組みを利用して効率的に導き出せることを指します。
また、別の定義として「あるNP完全問題から多項式時間で還元できること」でもNP困難であることを証明できます。これは、NP完全問題自体がNP内のすべての問題を代表して還元可能であるためです。この定義により、NP困難は単なる「はい/いいえ」で答える決定問題だけでなく、最適解を求める最適化問題や探索問題まで幅広く含めることができます。

NP完全との違いと関係性
混同されやすい概念にNP完全(NP-complete)がありますが、両者の決定的な違いは「その問題自体がNPクラスに属しているか」という点にあります。
- NP完全: 「NP困難」であり、かつ「NPクラス」に属する問題。つまり、解くのは難しいが、提示された答えが正しいかを確認することは効率的にできる問題です。
- NP困難: NPクラスに属している必要はありません。そのため、NP完全よりもさらに難しい、あるいは答えを出すこと自体が不可能な問題も含まれます。
決定不能な問題の例:停止問題
NP困難でありながらNP完全ではない代表例に停止問題があります。これは「あるプログラムに特定の入力を与えたとき、それが無限ループに陥らずに終了するか」を判定する問題です。停止問題はNP困難であることが証明されていますが、そもそも計算機で解くことが不可能な「決定不能」な問題であるため、NPクラス(有限時間で検証可能)には含まれません。
NP困難な問題の具体例と応用
現実世界で直面する多くの最適化問題がNP困難に該当します。代表的な例として、すべての都市を一度だけ訪れて最短ルートで戻ってくる巡回セールスマン問題や、数値の集合から合計がゼロになる部分集合を探す部分和問題が挙げられます。
これらの問題は厳密な最適解を求めるのに膨大な時間がかかるため、実務では「近似アルゴリズム」が用いられます。近似比を一定に保つAPXや、任意の精度まで近似可能なPTAS/FPTASといった手法により、実用的な時間で「十分に近い解」を導き出します。
| カテゴリー | 具体的な問題・応用例 |
|---|---|
| 最適化問題 | ナップサック問題、最大クリーク問題、最長単純パス問題 |
| グラフ理論 | グラフ彩色(コンパイラのレジスタ割り当てなどに利用) |
| 実務応用 | 配送ルート最適化、スケジューリング、暗号理論、データマイニング |
| 決定不能問題 | 停止問題 |
計算複雑性クラスのまとめ
NPを基準とした関連クラスの定義は以下の通りです。
- NP: 非決定性多項式時間で解ける、または解の検証が多項式時間で可能な決定問題のクラス。
- NP-easy: NPと同等か、それより簡単な問題。
- NP-equivalent: NP困難かつNP-easyな決定問題。
- NP-intermediate: P≠NPの場合に存在する、PでもNP完全でもない中間的な難易度の問題。
Frequently Asked Questions
NP困難な問題を効率的に解く方法はありますか?
現在の理論では、P≠NPであると想定されているため、すべてのNP困難な問題を多項式時間で解く汎用的なアルゴリズムは存在しないと考えられています。そのため、近似アルゴリズムやヒューリスティクスを用いて、実用的な時間で近似解を得るアプローチが一般的です。
NP完全とNP困難の最大の違いは何ですか?
最大の違いは「NPクラスへの所属」です。NP完全な問題は必ずNPクラスに属しており、解の正しさを効率的に検証できます。一方、NP困難な問題はNPクラスに属している必要はなく、検証すら不可能な決定不能問題を含むより広い概念です。
なぜNP困難な問題が重要視されるのですか?
ある問題がNP困難であると証明されることは、「その問題を完璧に解こうとする努力は(おそらく)無駄である」という理論的根拠になります。これにより、エンジニアは無駄な探索を避け、近似解や特殊な条件下での解法といった現実的な戦略に切り替えることができます。
停止問題はなぜNP完全ではないのですか?
NP完全であるためには、まずその問題がNPクラス(決定可能で、解の検証が多項式時間で可能)である必要があります。しかし、停止問題は計算理論的に「決定不能」であることが証明されており、いかなる有限時間でも正解を導き出せないケースがあるため、NPクラスに入ることができず、結果としてNP完全にはなり得ません。
References
- , ed. (1998). Handbook of Theoretical Computer Science. Vol. A, Algorithms and complexity. Amsterdam: Elsevier. . 247934368.
- (1974). "Postscript about NP-hard problems". ACM SIGACT News. 6 (2): 15–16. :10.1145/1008304.1008305. 46480926.
- Daniel Pierre Bovet; Pierluigi Crescenzi (1994). Introduction to the Theory of Complexity. Prentice Hall. p. 69. .
- "Shtetl-Optimized » Blog Archive » The Scientific Case for P≠NP". www.scottaaronson.com. 7 March 2014. Retrieved 2016-09-25.
- "Is undecidable(complement of R) a subset of NP-hard?". Computer Science Stack Exchange. Retrieved 2024-02-09.
- Escoffier, B.; Paschos, B.Th. (2010). "A survey on the structure of approximation classes". Computer Science Review. 4 (1): 19–40. :10.1016/j.cosrev.2009.11.001.
- ; ; Rinnooy Kan, A. H. G.; Shmoys, D. B. (1985), The Traveling Salesman Problem: A Guided Tour of Combinatorial Optimization, John Wiley & Sons, .
- More precisely, this language is ; see, for example, Wegener, Ingo (2005), Complexity Theory: Exploring the Limits of Efficient Algorithms, Springer, p. 189, .