令为一个布尔公式,由通常的AND,OR和NOT运算符以及一些变量组成。我想计算的令人满意的作业数量。也就是说,我想找到真值的不同分配到的变量数目为其假定真值。例如,公式具有三个令人满意的赋值;有四个。这是#SAT问题。
显然,对此问题的有效解决方案将是对SAT的有效解决方案,这不太可能,而且实际上此问题是#P完全的,因此可能比SAT严格得多。因此,我不期望有一个保证有效的解决方案。
但是众所周知,SAT本身真正困难的实例相对很少。(例如,Cheeseman 1991,“ 真正困难的问题在哪里”。)普通的修剪搜索,尽管在最坏的情况下是指数式的,但可以有效地解决许多实例。解决方法虽然在最坏的情况下是指数级的,但在实践中甚至更为有效。
我的问题是:
是否有已知算法可以快速计算一个典型布尔公式的满意赋值数量,即使这种算法在一般情况下需要指数时间也是如此?有什么比列举每个可能的任务明显更好的了吗?