【问题标题】:Design a branching algorithm breaking the triviality barrier for 3-SAT problem设计一种分支算法,打破 3-SAT 问题的琐碎障碍
【发布时间】:2021-09-21 07:22:25
【问题描述】:

我正在研究一个示例: 对于 3-SAT 问题,我们有子句 c=l1 或 l2 或 l3。有多少令人满意的任务是可能的。考虑到这些分配,设计一个打破琐碎障碍的分支算法。

我对此并不陌生,我的问题不是关于解决方案,而是关于问题的解释:

  1. 据我了解,有 2^3=8 种可能的解决方案,其中 7 种是令人满意的。问题是否要求找到这些分配或找到可能的解决方案的数量,因为这样的子句总会有 7 个可能的解决方案。

  2. 打破琐碎障碍是什么意思,不使用蛮力找到所有可能的分配并计数正确是什么意思?

  3. 欢迎任何方向或更好的解释。

【问题讨论】:

  • 我可能不那么“新”,但在阅读问题时,我的困惑与您完全相同。您对可能分配的总数和令人满意的分配数量的理解是正确的。但我不知道“打破琐碎的障碍”可能意味着什么;他们要求你设计一个算法,但我什至不知道你的算法应该解决什么问题。
  • 利用表达式的对称性,尝试FFF、TFF、TTF、TTT就够了,变量个数是线性的而不是指数的。因此,3+3+1 解决方案。 (为了它的价值。)
  • 正如其他人所说,“琐碎障碍”是一个模糊的术语。如果那来自老师,我会寻找不同的课程。我猜这意味着“不生成所有可能的真假赋值,在表达式中测试它们”。一个简单的起点是查找分支定界算法。一般的想法是跳过由于结构中的某些内容而无法满足表达式的变量赋值。

标签: algorithm boolean-operations sat


【解决方案1】:
  1. 这里的“平凡”算法递归地对每个变量进行分支,然后计算公式。这里的观察结果是,通过一次最多分支三个变量并丢弃明显不可行的分配,我们最终会为每三个变量分支 7 种方式而不是 8 种。

  2. 我想说打破琐碎意味着找到一个算法,对于某些 delta

【讨论】:

  • 我想我同意你的看法。现在我设计了找到 7 个解决方案的算法,这意味着它运行 2^n-1=7 次。你能详细说明 O(7^(n/3)) 时间吗?我虽然在这里我们修复了 n=3,这意味着时间将是一个常数。
  • @Engineeringbridges 3SAT 公式有很多子句。所以算法是: 0. 空合取根据定义是可满足的。 1. 否则,选择一个子句。 2. 对于该子句的每个令人满意的分配,将这些分配传播到公式的其余部分,并递归地确定该派生公式是否可满足。 3. 当且仅当至少有一个递归调用是时,该公式是可满足的。
猜你喜欢
  • 2010-12-18
  • 2014-11-16
  • 2017-06-13
  • 1970-01-01
  • 2018-03-16
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多