【发布时间】:2013-05-26 21:05:20
【问题描述】:
假设您有一个布尔函数,它接受两个数字(二进制)并在它们等于 16 时返回 true:
01000 + 01000 = 10000
8 + 8 = 16 -> true
00110 + 01000 = 01110
6 + 8 = 14 -> false
在这个例子中,函数有十个输入,我们称它们为 abcde + fghij。
在底层,它直接以门逻辑建模,并使用两个加法器和一些异或门来检查二进制字符串 10000 的等价性。
然后,我们将这个二元函数输入布尔可满足性算法,以找到一组产生真实输出的输入(例如上面的第一个示例)。
我的问题是:如果我们要明确观察到的约束条件,SAT 算法会更快地找到解决方案吗?
“观察到的约束”是什么意思?好吧,一个观察到的约束可能是“如果任一数字大于 16,则不要费心执行加法并返回 false”。
你可以像这样包含这个约束:
(a ^ ¬b ^ ¬c ^ ¬d ^ ¬e) ^ (f ^ ¬g ^ ¬h ^ ¬i ^ ¬j) ^(你之前的函数)
另一个约束可能是“如果一个数字是偶数而另一个是奇数则返回 false”。
((e ^ ¬j) v (¬e ^ j)) ^(你之前的函数)
这些布尔函数在正确性上是等价的,但在门逻辑中,后者(可能)会更有效。简化为 SAT 时,建模问题是唯一需要考虑的问题,还是有助于包括这些观察到的约束?
我知道这不是一个很好的例子,但希望它能解释我的问题。
提前致谢
【问题讨论】:
-
我有点困惑;我不太明白你在问什么,我不确定这是否是在问关于 SAT 问题的问题?
标签: algorithm complexity-theory boolean-logic computation-theory