码迷,mamicode.com
首页 > 其他好文 > 详细

2-SAT

时间:2017-08-18 14:39:29      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:解决   关系   题解   字典   有一个   过程   组合   缩点   运算   

2-SAT

  设 $n$ 个布尔变量 $f_1, f_2, ..., f_n$ .

  给定 $m$ 个形如 " 变量 - 逻辑运算符 - 变量 " 的二元限制条件, 例如 $f_1 ~ and ~ f_2$ .

  解布尔变量.

 

  就现在的研究层次, 我们要解决的问题是 存在性 层次的相关问题:

  ① 解什么时候存在.

  ② 构造一组合法解.

  ③ 构造一组字典序最小的解.

 

等价建图

  我们将每个布尔变量 $f_x$ , 拆成两个点 $x, x‘$ , $x$ 代表 true , $x‘$ 代表 false .

 

  我们定义蕴含关系:  

    如果选择了点 $x$ , 那么必须选择点 $y$ .

    对应地, 我们在图中连边 $x \rightarrow y$ .

  蕴含关系具有传递性.

 

  举个例子: $f_x ~ or ~ f_y$ 应该如何连边?

  若 $f_x$ 为假, 则 $f_y$ 必然为真.   ---- ①

  逆否命题: 若 $f_y$ 为假, 则 $f_x$ 必然为真. ---- ②

  我们发现 ①② 不仅是必要条件, 同时也是充分条件, 即 $f_x ~ or ~ f_y \Leftrightarrow ①②$ .

  所以我们连边 $x‘ \rightarrow y, y‘ \rightarrow x$ .

 

  我们不难发现, 建出来的图是左右对称的.

  

  那么, 我们现在的问题被转化为:

    ① 在图中的每个点对中选择一个点.

    ② 若一个点被选择, 则它的所有后继都要被选择.

 

问题解决

  我们考虑对这张图跑 Tarjan 算法, 求强连通分量.

  并对所有的强连通分量, 按照结束访问的时间, 从小到大进行标号.

 

  如果存在 $x, x‘$ 在同一个强连通分量内, 那么一定无解.

  因为选择了 $x$ 就必须要选择 $x‘$ , 选择了 $x‘$ 就 $x$ , 而我们目标每个点对中选择一个.

 

  否则, 我们可以尝试构造性地证明一定有解.

  

  我们如果选择了某个强连通分量内的点, 那么整个强连通分量都要选择.

  我们按照强连通分量, 将图进行缩点.

  现在的问题和原问题的形式是一致的:

    ① 现在的点是原本的强连通分量.

    ② 我们有 $m$ 个点对.

    ③ 每个点 $x$ 具有一个标号 $L_x$ .

    ④ 图具有左右对称的性质.

    ⑤ 我们要在每个点对中选择一个点, 且如果一个点被选择, 那么它的所有后继都要被选择.

 

  点的标号存在一些性质.

  如果存在边 $x \rightarrow y$ , 那么 $L_y < L_x$ .

  证明

    ① 当我们访问 $x$ 的时候, 还没有访问到 $y$ , 那么一定会先结束访问 $y$ .

    ② 当我们访问 $x$ 的时候, 已经访问过 $y$ , 那么 $y$ 在 $x$ 前先结束访问.

 

  我们对于每个点对 $(x, y)$ , 选择标号小的点.

  证明:

    ① 我们对每个点对 $(x, y)$ , 选择标号小的点, 那么已经能满足 "每个点对中选择一个点" 的约束条件.

    ② 证明 "如果一个点被选择, 那么它的所有后继都要被选择." .

      假设原图中存在点 $x$ , 它有后继 $y$ , 我们选择了点 $x$ , 却没有选择点 $y$ .

      那么有

        $$\begin{aligned} L_y  & > L_{y‘} & (选择了 y‘ 却没有选择 y) \\ & > L_{x‘} & (图的对称性 + 标号性质) \\ & > L_x & (选择了 x 却没有选择 x‘) \\ & > L_y & (标号性质) \end{aligned}$$

      所以矛盾, 所以必然不存在这种情况.

 

  总结一些, 我们得到了两个重要的结论:

    ① 2-SAT 问题有解, 当且仅当不存在 $x$, $x‘$ , $x$ 和 $x‘$ 在同一个强连通分量内.

    ② 若 2-SAT 问题有解, 那么我们对每对强连通分量, 取标号较小的, 即对每个变量 $f_x$ , 取它对应的强连通分量的标号较小的.

 

一元限制条件

  有些问题中还增加了一元限制条件 $not ~ f_x$ , $f_x$ .

  $not ~ f_x \Rightarrow (x \rightarrow x‘)$  .

  $f_x \Rightarrow (x‘ \rightarrow x)$ .

 

  我们尝试兼容这种情况, 即尝试对构造性证明加以补充.

  若 $x \rightarrow x‘$ , 那么必然选择 $x‘$ .

  而对于标号必有 $L_{x‘} < L_x$ , 根据构造性证明的过程, 必然选择 $L_{x‘}$ .

  二者得以统一.

2-SAT

标签:解决   关系   题解   字典   有一个   过程   组合   缩点   运算   

原文地址:http://www.cnblogs.com/Sdchr/p/7389219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!