假设变量N的数量和子句K的数量相等。找到一个算法,返回满足子句的不同方法的数量。
我读到SAT与独立集有关。
具有N
变量的函数具有具有2^N
行的真值表。每一行对应一个minterm,minterm可以是解决方案,也可以不是解决方案。
一个包含N
变量的子句只排除其中一个minterm作为解决方案的一部分。这是由子句的所有反转变量组成的minterm。
假设K
子句都不同,
解决方案的数量是2^N-K
示例:
具有N=3
变量的K=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个解决方案。