ある量の計算資源を使って解くことができるすべての計算問題の集合を複雑性クラスという。
複雑性クラス P は、チューリング機械で多項式時間で解ける決定問題の集合である。このクラスは、直感的に言えば最悪の場合でも効率的に解くことができる問題である[2]。
複雑性クラス NP は、非決定性チューリング機械で多項式時間で解ける決定問題の集合である。このクラスには効率的に解くことが望ましいとされる様々な問題が含まれている。例えば、充足可能性問題、ハミルトン閉路問題、頂点被覆問題などである。このクラスの全問題は、その解法を効率的に検証する方法があるという特徴を持つ[2]。
多くの複雑性クラスは、それを表現するのに必要となる数理論理学によって特徴付けられる。これは、記述計算量の概念と関係がある。
伝統芸能
闘牛
フライングディスク
アルバイト
バトントワリング
エネルギー
スキューバダイビング
百日咳
サッカー
離乳食
中国のお茶の歴史
人体と細胞
消化器系事典
ステキな星座
華麗な花嫁
夏に咲く花情報
癒しの国
日本のお茶
けの付く言葉
ワインカラー
各クラスに対し、そのクラスの完全問題を考えることがある。 クラスCの完全問題とはCに属する問題のうちで最も計算するのが難しい問題のことである。 具体的な定義は以下のようになる。
?困難 (?hard)
クラスCに対して、問題PがC困難であるとは、Cに属する任意の問題をPに帰着(多くの場合多項式時間帰着を考えるが、そうでない場合もある)できるということである。すなわちPはCに属するいかなる問題よりも、同等かそれ以上に難しいということである。但し、C完全と異なり、P自身はCに属するとは限らない。
?完全 (?complete)
クラスCに対して、問題PがC完全であるとは、PがCに属しかつC困難ということである。すなわちPはCに属する問題の中で、本質的に最も難しい問題であるということである。