首页 > 其他 > 详细

2-sat学习笔记

时间:2020-01-12 10:55:02      阅读:71      评论:0      收藏:0      [点我收藏+]

2-sat 2个条件自适应问题 也就是说n个变量 每个变量都有两个取值 要求:求出一组方案满足一些限制。值得一提的是 k-sat是完全NP问题 无法在多项式时间内解决。

想要解决2-sat问题 第一种方法 爆搜,第二种方法 图论 因为我们没有一种好的方法去解决这个问题 可以考虑转换为图论模型也是最特殊的一种解决方法的问题.(毕竟看起来这个东西至少网络流建图是非常困难的。

解决方法:

发现每个点要么取0要么取1 对于一个点我们 建两个点 \(a_i\)\(a_{i+n}\)来表示当前这个点选0和1。

连边L:规定一条有向边\(x->y\)来表示如果选择了x就必须选择y。下面是一些常规的满足限制的建图.

\(i,j\)不能同时选,那么说明选\(i\)必须选\(j'\),选\(j\)必须选\(i'\) 那么显然\(i->j'\) \(j->i'\);

\(i,j\)要么都取要么都不取,说明选\(i\)必须选\(j\),选\(j\)必须选\(i\),考虑一下关系的逆否性我们也可以得出选\(i'\)必须选择\(j'\),选\(j'\)必须选\(i'\),那么\(i->j\),\(j->i\),\(j'->i'\),\(i'->j'\);

\(i,j\)不能同时不取(至少选择一个):选了\(i'\)就要选择\(j\)\(j'\)就要选择\(i\),\(i'->j\),\(j'->i\);

\(i,i'\)必须取i那么\(i'->i\)这连边的含义是由于我们选择\(i'\)就是不满足要求的因为此时\(i\)就选择不了了我们强制选择\(i'\)时选择\(i\)就行了。

\(i,j\)必须不相同即 要么选\(i\)要么选\(j\),选\(i\)必选\(j'\)\(j\)必选\(i'\)\(i'\)必选\(j\)\(j'\)必选\(i\),那么显然\(i->j'\),\(j->i'\),\(i'->j\),\(j'->i\);

剩下的一些关系不再赘述 一般我们除了考虑关系的正向性还要考虑关系的逆否性.

关于最后判定合法问题 研究了一会 理解不算太深 大体如下:

首先缩点,我们发现最后剩下一张DAG在这张图上我直接选择一个入度为0的点会牵连到一堆点显然选择关系是很难传递下去的。

于是考虑一下我们每次都选择一个出度为0的点这个点对后续没有任何影响只对前面的的点具有一定的影响。

显然这种不选择关系是可以传递的。

考虑反向建图我们不断选取 入度为0的点即出度为0的点 对后面没有影响并且传递不选信息。

然后不断这样进行下去我们就构造出来了一组合法解。

进一步的 我们发现 在反图上的拓扑序就是我们点双联通分量的标号。

由刚才的结论 拓扑序小的先选我们可以直接利用点双联通分量的判断来进行判定。

2-sat学习笔记

原文:https://www.cnblogs.com/chdy/p/12182089.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!