算法:如何找到SAT的解决方案数量?

时间:2017-01-29 07:10:46

标签: algorithm optimization combinatorics sat satisfiability

假设变量N的数量和子句K的数量相等。查找一个算法,该算法返回满足子句的不同方法的数量。

我读到SAT与独立集有关。

1 个答案:

答案 0 :(得分:2)

包含N个变量的函数的truth-table2^N行。每行对应一个minterm,可以是解决方案,也可以不是。

N个变量的子句完全排除minterm中的一个作为解决方案的一部分。那是minterm,它由该子句的所有反转变量组成。

如果K条款都不同,

  

解决方案的数量是2 ^ N - K

示例:

包含K=3变量的N=3子句:

 A or  B or  C
!A or  B or  C
 A or  B or !C

三个输入的真值表:

A  B  C  output
0  0  0  0         //  excluded by A or B or C
0  0  1  0         //  excluded by A or B or !C
0  1  0  1
0  1  1  1
1  0  0  0         //  excluded by !A or B or C     
1  0  1  1
1  1  0  1
1  1  1  1

可能的八个术语中有五个仍然有效。因此,该示例具有2 ^ 3 - 3 = 5个解。