通常来说,$\mathcal{P} \subseteq \mathcal{NP}$。(解决是一个(困难的)验证)
大多数人认为
Definition: A problem is
定义: 如果一个问题的难度至少与
没太看懂老师在说什么,反正就很难解决就是了。
很多问题可以变换为 SAT。
- 一个有效解可以被“高效地”验证
A possible solution (valuation) can be verified “efficiently” - 没有已知可作用于所有情况“高效”的算法
No known algorithm to solve the problem “efficiently” in all cases - 实践来说,SAT解决器非常高效($\mathcal{NP}$是最差情况)
对于一个
-
$1$ -SAT 是$\mathcal{P}$ -
$2$ -SAT 是$\mathcal{P}$ -
$3$ -SAT 是$\mathcal{NP}$
通常来说来说将一个 CNF 转换成 DNF 会导致子句数量指数爆炸(exponential blowup)。
Brute force:对有
- 有
$2^N$ 个真值分配 - 每一个需要验证
$N$ 次
Conjecture (Strong Exponential Time Hypothesis (SETH)): SAT cannot be solved inp
Davis-Putman-Logemann-Loveland algorithms.
- 简单场景
- 原子命题
$p$ 只出现为$p$ 或者$\neg p$ (不同时出现):相对应地分配真值
- 原子命题
- 选择一个变量
$p$ 并为其设置一个真值的分支- 如果
$p=T$ :移除全部包含$p$ 的子句以及子句中所有$\neg p$ 的文字- 对于包含
$p$ 的子句,例如$\cdots \wedge (\cdots\vee p \vee\cdots)\wedge\cdots$ ,考虑到子句已包含一个$T$ ,固整个子句是$T$ ,所以可以移除 - 对于子句中所有
$\neg p$ 的文字,考虑$\cdots \wedge (\cdots\vee\neg p \vee\cdots)\wedge\cdots$ ,考虑到子句中的$\neg p = F$ ,固整个子句是依旧不确定,所以可以移除$\neg p$ 变成$\cdots \wedge (\cdots\vee\cdots)\wedge\cdots$
- 对于包含
- 如果
$p=F$ :移除全部包含$\neg p$ 的子句以及子句中所有$p$ 的文字- 对于包含
$p$ 的子句,例如$\cdots \wedge (\cdots\vee\neg p \vee\cdots)\wedge\cdots$ ,考虑到子句已包含一个$T$ ,固整个子句是$T$ ,所以可以移除 - 对于子句中所有
$p$ 的文字,考虑$\cdots \wedge (\cdots\vee p \vee\cdots)\wedge\cdots$ ,考虑到子句中的$p = F$ ,固整个子句是依旧不确定,所以可以移除$p$ 变成$\cdots \wedge (\cdots\vee\cdots)\wedge\cdots$
- 对于包含
- 如果
- 保持执行直到
- 所有子句被移除(全真):则为 SAT
- 有一个子句是空的(一个是假的):回溯到步骤二,给
$p$ 选择一个不同的值,如果无法回溯,则返回 UNSAT
Example: to
-
$p=T$
$(q\vee r) \wedge (\neg q \vee r)$ -
$q=F$
$(r)$ -
$r=T$
SAT