2-SAT 学习笔记

来源:互联网 发布:淘宝虎头鞋子 编辑:程序博客网 时间:2024/05/23 16:39

今天学习了2-SAT算法

简单说一下对个算法的理解

首先它要解决的问题是:(以我个人理解)有n个物品,拿或不拿,两个状态;有m个条件,每个条件都限制怎么个拿法,比如,如果那物品1,那么一定不能拿物品3,或者要1必须拿3;2-SAT算法给出怎么拿,以及是否有解

接下来是算法本省内容:

建图:

其实算法本质,就是找到必要条件,比如说,x1||x2, 那么也就是说,要想这条件成立的话,当x1为否定的时候,x2一定位肯定,当x2为否定,x1比为肯;因此,建立有向图,将每个变量拆为两个点,2i表示真,2i+1表示否,对于上述例子来说,就可以得到两条边,x1的否定点指向x2肯定点,另外的是x2否定点指向x1的否定点。因此,每个条件应对两条边

搜索:

对第i个变量来说,假设2i为真,那么将2i以及它所能到达的边均标记为真,如果在这个过程中,发现某个变量的两个点都被标记,说明2i为真是不对的(因为一个变量只能是真或者假,不能同时为真和假),把刚才设为真的点改为假,然后将2i+1设为真,如果还是矛盾,说明无解



原创粉丝点击