2-SAT 学习笔记

今天学习了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设为真,如果还是矛盾,说明无解



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值