CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

3SAT的子句消去法求解方法介绍

已有 2994 次阅读 2015-12-11 08:56 |个人分类:3SAT解法|系统分类:科研笔记| 子句消去法, 3SAT

3SAT的子句消去法求解方法介绍

姜咏江

子句消去法求解用01表示的3SAT问题简单易学。这里以简单的例子来说明解法。

1.             独立子句块

由逻辑变量x1,x2,x3构成的3SAT有最多有8个子句,将其用阵列表示,即为表1所示。

1子句块

序号

x1

x2

x3

1

0

0

0

2

1

0

0

3

0

1

0

4

1

1

0

5

0

0

1

6

1

0

1

7

0

1

1

8

1

1

1

子句消去法的要点是将变量设定01的值,并将表中有这个值的子句全消去。如果全部变量值设定之后,表中无子句,则设定的变量值向量就是这个3SAT的解,如有剩余子句存在,则此3SAT无满足解。

从表1中可见我们无法确定x1,x2,x3为何值能够把这些子句全消去。由3个变量形成的子句叫子句块,3SAT子句块中子句数为8,那么这个3SAT一定无满足解。

将表1的子句随便删除一个(如有底纹一行),就构成了7个子句的子句块,这种子句块一定有唯一解。确定解的办法简单:

1)选中有4个相同值的变量,并让该变量取这个值(x3=0,这是必选值,不然无解)。

2)剩余子句块如表2 所示。在x3=0的情况下,只有选x1=1x2=0才能够将这3个子句全部消去(变量选值最多的数码)。

2  剩余子句块

序号

x1

x2

x3

5

0

0

1

6

1

0

1

8

1

1

1

小结:7个子句的子句块有唯一解。只要子句块有一个变量有4个相同值,就必选。子句数不足7的子句块必有多解。子句块解的数量为8-(块子句数)。

例如,表3可以有6个解{100010001101011111}(操作时选x3=1即可)。

3  多解子句块

序号

x1

x2

x3

1

0

0

1

2

1

1

1

2.             避免关联子句块无解

有共同变量的子句块形成关联段。3SAT求解要先求出唯一解子句块的解,这些块解求出来之后,会剩下一些相互关联的多解子句块。如果这些多解的关联子句块出现了表4的情况,那么必定产生无解。

4  剩余关联多解子句块

序号

x1=0

x2

x3

x4=1

x5=0

1

1

0

0

 

 

2

1

0

1

 

 

3

 

1

0

0

 

4

 

1

1

0

 

5

 

0

0

 

1

6

 

1

0

 

1

如果在此之前x1,x4,x5的值都是通过求唯一解的过程得到的,那么可以断定此3SAT无解。在求解中这些先确定的值变动一下能够避免图4中的有色的4个二进制数出现,那么就可以继续设定变量值求解。

一般的3SAT都有多解。子句消去法一次可以求出部分解,少数情况下可以一次求出全部解。

参考:http://blog.sciencenet.cn/blog-340399-928224.html 

2015-12-11

 

 




https://blog.sciencenet.cn/blog-340399-942538.html

上一篇:悬赏百万美元千禧难题有了新进展
下一篇:3SAT剩余子句块多解表示方法
收藏 IP: 221.194.176.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 14:16

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部