【けいさんりょうくらす】

計算量クラス とは?

💡 問題の「難しさ」をランク付けする、計算理論の地図
📌 このページのポイント
計算量クラスの包含関係 EXPTIME PSPACE NP P ソート・最短経路 行列乗算 効率よく解ける NP完全 巡回セールスマン ナップサック・SAT NPで最も難しい P → 速く解ける NP完全 → 検証だけ速い PSPACE → メモリ多項式
計算量クラスの包含関係
ひよこ ひよこ

計算量クラスって何のためにあるの?

ペンギン先生 ペンギン先生

「この問題は速く解けるのか、それとも本質的に難しいのか」を判断するためだよ。たとえばソートはPクラスだから効率よく解けるけど、巡回セールスマン問題はNP完全で効率よく解く方法が見つかっていないんだ

ひよこ ひよこ

PとNPの違いをもう少し教えて!

ペンギン先生 ペンギン先生

Pは「速く解ける問題」、NPは「答えが正しいか速く確認できる問題」だよ。たとえば数独を解くのは大変だけど、完成した数独が正しいかチェックするのは簡単だよね。数独の解答チェックはP、数独を解くことはNPなんだ

ひよこ ひよこ

NP完全とNP困難はどう違うの?

ペンギン先生 ペンギン先生

NP完全は「NPの中で最も難しい問題」で、NP困難は「NP完全と同じかそれ以上に難しい問題」だよ。NP困難にはNPに入らない問題も含まれるから、より広い概念なんだ。停止問題はNP困難だけどNP完全ではない例だね

ひよこ ひよこ

実際のプログラミングでも気にする必要あるの?

ペンギン先生 ペンギン先生

大ありだよ。自分が解こうとしている問題がどのクラスに属するか知っていれば、「完璧な解を求めるのは諦めて近似解で妥協しよう」とか「問題のサイズを制限しよう」という判断ができる。アルゴリズム選択の指針として、エンジニアにとっても重要な知識だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「計算量クラス」って出てきたら「問題の難しさをグループ分けした分類表」と思えればだいたいOK!
📖 おまけ:英語の意味
「Complexity Class」 = 計算量クラス(計算複雑性クラス)
💬 Complexityは「複雑さ」、Classは「分類」だよ。計算の難しさを理論的に格付けするための概念なんだ
← 用語集にもどる