してみましょう通常のAND、OR、およびNOT演算子と、いくつかの変数からなるブール式も。Bの満足できる割り当ての数をカウントしたいと思います。それは私がの変数に真理値の異なる割り当て数を見つけたい、であるBそのためBが真の値をとります。例えば、式A ∨ Bは 3つの満足割り当てを有します。(∨ B )∧ (C ∨ ¬ Bは) 4を有しています。これが#SAT問題です。
明らかに、この問題の効率的な解決策は、SATの効率的な解決策を意味しますが、これはありそうにありません。実際、この問題は#P完全であり、SATよりも厳密に難しい場合があります。したがって、保証された効率的なソリューションを期待していません。
しかし、SAT自体の本当に難しいインスタンスは比較的少ないことがよく知られています。(たとえば、Cheeseman 1991、「本当に難しい問題はどこにあるか」を参照してください。)通常の枝刈り検索は、最悪の場合は指数関数的ですが、多くのインスタンスを効率的に解決できます。解決方法は、最悪の場合指数関数的ですが、実際にはさらに効率的です。
私の質問は:
一般的なブール式の充足可能な割り当ての数をすばやくカウントできるアルゴリズムは、そのようなアルゴリズムが一般的なインスタンスで指数関数的な時間を必要とする場合でも既知ですか?可能なすべての割り当てを列挙するよりも著しく優れたものはありますか?