【发布时间】:2021-09-21 07:22:25
【问题描述】:
我正在研究一个示例: 对于 3-SAT 问题,我们有子句 c=l1 或 l2 或 l3。有多少令人满意的任务是可能的。考虑到这些分配,设计一个打破琐碎障碍的分支算法。
我对此并不陌生,我的问题不是关于解决方案,而是关于问题的解释:
-
据我了解,有 2^3=8 种可能的解决方案,其中 7 种是令人满意的。问题是否要求找到这些分配或找到可能的解决方案的数量,因为这样的子句总会有 7 个可能的解决方案。
-
打破琐碎障碍是什么意思,不使用蛮力找到所有可能的分配并计数正确是什么意思?
-
欢迎任何方向或更好的解释。
【问题讨论】:
-
我可能不那么“新”,但在阅读问题时,我的困惑与您完全相同。您对可能分配的总数和令人满意的分配数量的理解是正确的。但我不知道“打破琐碎的障碍”可能意味着什么;他们要求你设计一个算法,但我什至不知道你的算法应该解决什么问题。
-
利用表达式的对称性,尝试FFF、TFF、TTF、TTT就够了,变量个数是线性的而不是指数的。因此,3+3+1 解决方案。 (为了它的价值。)
-
正如其他人所说,“琐碎障碍”是一个模糊的术语。如果那来自老师,我会寻找不同的课程。我猜这意味着“不生成所有可能的真假赋值,在表达式中测试它们”。一个简单的起点是查找分支定界算法。一般的想法是跳过由于结构中的某些内容而无法满足表达式的变量赋值。
标签: algorithm boolean-operations sat