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

博文

为k-SAT问题彻底解决欢呼,感谢杜立智的精彩评论

已有 6163 次阅读 2016-6-27 05:58 |个人分类:随笔|系统分类:科研笔记| SAT, 子句消去计数法

为k-SAT问题解决一周年欢呼

    在科学网上发表子句消去计数法一周年了(http://blog.sciencenet.cn/blog-340399-905817.html)。这应该值得我庆祝。同时我要在此感谢名博主杜立智对该文精彩绝伦的评价(http://blog.sciencenet.cn/blog-327757-905854.html)。

    子句消去计数法(现在我把它称为子句标志消去法)是多项式时间复杂度的算法吗?毫无疑问,是!时至今天我能这么肯定,是因为用这个算法很容易得到k-SAT的全部解!什么是对问题最好的证明?那就是实际解决了问题。

    子句消去计数法求k-SAT的解实在太简单了,以至于杜立智给了最高规格的评价:证明了x=x。至今还无人有证明x=x的方法,我做到了吗?

    我视杜立智为友,是因为他是一个唯一敢肯定这一算法正确性的人,其批评又促进我百思得解。

    如何求得k-SAT的全部解?我这里给出一个3-SAT的例子,只要读者将右面的n位数中含有左面子句的数码且位置相同数同子句一起逐一消去(n位数没有时,只消去子句)。当所有子句消去之后,剩下的n位数的反码都是解!这里n=5,有底纹的部分表示消去了。

    可以将得到的那些n位数(左面下面的3个5位二进制数)带入k-SAT进行验证,可知完全正确。

1  3-SAT和解标志

x4

x3

x2

x1

x0

 

NO

 

x4

x3

x2

x1

x0

 

0

0

0

 

 

 

0

 

0

0

0

0

0

 

1

0

0

 

 

 

1

 

0

0

0

0

1

 

1

0

1

 

 

 

2

 

0

0

0

1

0

 

1

1

1

 

 

 

3

 

0

0

0

1

1

 

0

 

0

1

 

 

4

 

0

0

1

0

0

 

1

 

1

0

 

 

5

 

0

0

1

0

1

 

1

1

 

 

1

 

6

 

0

0

1

1

0

 

0

0

 

 

0

 

7

 

0

0

1

1

1

 

 

1

0

1

 

 

8

 

0

1

0

0

0

 

 

1

1

0

 

 

9

 

0

1

0

0

1

 

 

0

1

1

 

 

10

 

0

1

0

1

0

 

 

1

1

1

 

 

11

 

0

1

0

1

1

 

 

0

0

0

 

 

12

 

0

1

1

0

0

 

 

 

0

1

0

 

13

 

0

1

1

0

1

 

 

 

1

0

0

 

14

 

0

1

1

1

0

 

 

 

1

1

0

 

15

 

0

1

1

1

1

 

 

 

0

0

1

 

16

 

1

0

0

0

0

 

 

 

 

 

 

 

17

 

1

0

0

0

1

 

 

 

 

 

 

 

18

 

1

0

0

1

0

AS.5'

1

1

0

1

0

 

19

 

1

0

0

1

1

AS.8'

1

0

1

1

1

 

20

 

1

0

1

0

0

AS.24'

0

0

1

1

1

 

21

 

1

0

1

0

1

 

 

 

 

 

 

 

22

 

1

0

1

1

0

 

 

 

 

 

 

 

23

 

1

0

1

1

1

 

 

 

 

 

 

 

24

 

1

1

0

0

0

 

 

 

 

 

 

 

25

 

1

1

0

0

1

 

 

 

 

 

 

 

26

 

1

1

0

1

0

 

 

 

 

 

 

 

27

 

1

1

0

1

1

 

 

 

 

 

 

 

28

 

1

1

1

0

0

 

 

 

 

 

 

 

29

 

1

1

1

0

1

 

 

 

 

 

 

 

30

 

1

1

1

1

0

 

 

 

 

 

 

 

31

 

1

1

1

1

1

 

     子句最多有2的k次方乘以n取k的组合数,即为2kCkn。子句标志消去法的规模是子句的数量m,在用子句标志消去法求解的过程中根本就没有出现对m的循环,因而m的变化过程是逐次取1到2kCkn这些整数。也就是说该算法时间复杂度为O( m)。需要说明,右面的n位二进制数是装在每一个熟悉二进制表数人的心中的,正如我们熟悉十进制数的数码在什么位置一样。莫把右面的2n个数看成算法操作的一部分,它们是算法的对象。这正如同x是2n以内的正整数一样,我们需要将其全部值写出来吗?况且这种子句标志查找的过程可以制造出象加法器一样的运算器,给出相应的机器指令,不会增加算法的时间复杂度。

     希望大家掌握这个求k-SAT所有解的方法,使我能为相关计算作点贡献。更欢迎数学,计算机方面专家给出评价和批评。

姜咏江

 2016-6-27



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

上一篇:速度对比:一个可以快速求解的3SAT例题
下一篇:k=n时k-SAT能快速求解吗?答田文洪老师
收藏 IP: 120.52.24.*| 热度|

3 檀成龙 蔡小宁 icgwang

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

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

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

GMT+8, 2024-11-23 12:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部