関数fが#Pにある場合、長さNの入力文字列xが与えられると、値f(x)は区切られた非負の数になります。(これは、NP検証者の受け入れパスの数の観点からの定義に基づいています。)2P O LのY(N)
これは、多くの関数fが#Pの外側にあることを意味します。つまり、fが負であるか、または言及した場合、関数がより速く成長するためです。しかし、論文でモデル化されたnクイーンの問題の場合、これは入力値nをバイナリでエンコードするという著者の決定の成果にすぎません。予想される入力が単項文字列1 nの場合、f (1 n):=(有効なnの数2P O LのY(N)nn1nf(1n):=n-queen構成)は、特定の構成の有効性をチェックする単純なNP検証機能によって、確実に#Pになります。
もっと興味深い理由で(推測的に)#Pの外側にあるいくつかの関数を調べたい場合は、以下を考慮してください:
- UNSAT: ならばψは、そうでなければ充足不能ブール式であるF (ψ ):= 0。NP = coNPでない限り、この関数は#Pにはありません。おそらく、より一般的なカウントクラスGapPにもありません。つまり、UNSATはおそらく2つの#P関数の差f-gではありません。ただし、より一般的なカウンティング複雑度クラスP #Pにあり、実際には戸田の定理による多項式階層全体が含まれています。f(ψ ):= 1ψf(ψ ):= 0P#P
それは自然な「カウントの問題」ではないため、この例は気に入らないかもしれません。しかし、次の2つは次のようになります。
後者の2つの問題は、#PへのOracleアクセスでも効率的に計算できることは知られていません。ただし、それらはいわゆる「カウント階層」内で計算可能です。このクラス内で分類されるより自然な問題については、例えばこの最近の論文を参照してください。
ナッシュ均衡を数えることは、明らかに#P-hard です。こちらを参照してください。また、検索の問題が簡単な問題でさえ、#Pを数えるのが難しい場合があります。