【原创】2-SAT算法 入门(上) 未完成

#2-SAT算法

##2-SAT问题的定义

SAT是适定性(Satisfiability)问题的简称 。一般形式为k-适定性
问题,简称 k-SAT。 当k>2时,k-SAT是NP完全的。因此一般
讨论的是k=2的情况,即2-SAT问题。

适定性问题?What the Huak?
什么意思呢?

就2-SAT问题而言。给定N个元素,每个元素有两种取值,要么为真,要么为假。(注意,是两种情况必须选且只能选1个)并且存在若干约束条件,这些条件总是涉及至多两个元素,规定了它们的取值的关系。
下文中为了表述方便,令元素x取真时为x,取假时为x’,记元素x的取值为A[x]
上述的限制条件形如

(令x取真时,A[x]=1,x取假时,A[x]=0)
A[x] == 1
A[x] == 0
A[x] & A[y] == 1
A[x] & A[y] == 0
A[x] & !A[y] == 1
A[x] | A[y] == 1
A[x] | A[y] == 0
A[x] | !A[y] == 1
A[x] ^ A[y] == 1
A[x] ^ A[y] == 0
A[x] ^ !A[y] == 1

比方说 A[x] & !A[y]==1,就是当A[x]和!A[y]必须相等,因此要么A[x]=1,A[y]=0,要么A[x]=0,A[y]=1。

满足以上的规则的问题就是2-SAT问题。

##2-SAT算法

对于N个元素中的每个元素i,我们把它分成ii’两个点,分别代表i取真i取假的情况。
接下来重申一个重要条件:i和i’这两者中必须且只能选一个

用这2*N个点建一个有向图,其中边 <x,y> 代表选了x就必须选y
同理<x',y'>代表选了x‘就要选y’。<x,y'>,<x',y>类似。

我们随便找一个条件,如A[x] | A[y] == 1的条件。
当A[x]取1,时,A[y]取1和0都可以。
当A[x]取0,时,A[y]必须取1。
当A[y]取1,时,A[x]取1和0都可以。
当A[y]取0,时,A[x]必须取1。
因此我们要连<x',y>,<y',x>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值