2-sat问题

来源:互联网 发布:大雄的生化危机 知乎 编辑:程序博客网 时间:2024/04/30 09:55

2-SAT问题是这样的:有n个布尔变量Xi,另有m个需要满足的条件,每个条件的形式都是“Xi为真/假或者Xj为真/假”。
(a∨!b)∧(b∨c)∧(!c∨!a)
2-SAT的目标是给每个变量赋值使得所有条件得到满足。
上式令a和b为真而c为假时公式可以得到满足。
( a∨b ) ∧ (a ∨!b ) ∧ (!a ∨b ) ∧ (!a ∨!b )无法满足

利用蕴涵(→,表示如果a则b)将每个字句(a∨b)改写成等价形式(!a → b)∧(!b → a)
建图:对每个变量x,构造两个顶点分别代表x和!x,以→关系为边建立有向图。

如果图上的a点能够到达b点的话,就表示当a为真时b也一定为真。该图中同一个强连通分量中所含的所有文字的布尔值均相同。
如果存在某个布尔变量x,x和!x均在同一个强连通分量中,则无法令整个布尔公式的值为真。反之,如果不存在这样的布尔变量,那么对于每个布尔变量x,让
X所在的强连通分量的拓扑序在!X所在的强连通分量之后↔x为真


(a∨!b)∧(b∨c)∧(!c∨! a)

在实际问题中,2-SAT问题在大多数时候表现成以下形式:有N对物品,每对物品中必须选取一个,也只能选取一个,并且它们之间存在某些限制关系(如某两个物品不能都选,某两个物品不能都不选,某两个物品必须且只能选一个,某个物品必选)等,这时,可以将每对物品当成一个布尔值(选取第一个物品相当于0,选取第二个相当于1),如果所有的限制关系最多只对两个物品进行限制,则它们都可以转化成基本限制关系,从而转化为2-SAT模型。


下面是几道题:

POJ 3905 Perfect Election
POJ 3683  Priest John's Busiest Day
POJ 3648 Wedding


具体详见:http://download.csdn.net/download/boyxiejunboy/8911091(不用积分下载哦)

0 0
原创粉丝点击