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

博文

3-SAT问题中如何选择算法操作对象?

已有 3586 次阅读 2016-7-2 07:41 |个人分类:3SAT解法|系统分类:科研笔记| 3-SAT, 子句标志消去法

3-SAT问题中如何选择算法操作对象?

姜咏江

计算机科学中的3-SAT问题之所以成为NP问题,是因为算法的操作对象选择变量造成的。将操作对象选择为子句,就会设计出多项式时间复杂度算法,从而就找到了NP-complete问题转化成P类问题的基本方法。

一年前我创造的“子句消去计数法”称为“子句标志消去法”更为恰当,因为那些子句计数器就是起到一个标志的作用。

子句标志消去法就是将3-SAT问题的操作对象选择为子句,从而避开了以变量为操作对象的穷举法,成为了最直接的多项式时间复杂度的算法。

以附录中与田文洪老师讨论的问题为例,其中变量xy都有n个,变量的总数为2n个。转化成n-CNF之后,如果以变量做为操作对象,那么算法的规模即为2n。由于每个变量可以取值01,故每次操作对象的值都具有不确定性,这就造成算法的众多分支,形成了算法的树形结构。

子句标志消去法以此例中的子句为操作对象,由于每个子句的值是确定的,而将子句数m做为规模,其标志值就在022n-1这些2n位二进制数中间,则对于每个子句只要进行一次标志查找,就可以实现操作的结果,而无需对同一个子句进行反复操作。因而子句标志消去法这个算法时间复杂度就是O(m)

读者不难理解,子句标志消去法对3-SATk-SATn-SAT同样适用。

 

2016-7-2

附录:

[11]田文洪  2016-7-1 09:47 

姜老师,需要说明一下您建议的方法如何避开CNF子项数量是2^n的?这个输入若是我第一个评论中的例子,例如把(x1∧y1) ∨ (x2∧y2) ∨ ... ∨ (xn∧yn) 变成CNF(conjunctive normal form)的例子:

(x1∨x2∨…∨xn) ∧
(y1∨x2∨…∨xn) ∧
(x1∨y2∨…∨xn) ∧
(y1∨y2∨…∨xn) ∧ ... ∧
(x1∨x2∨…∨yn) ∧
(y1∨x2∨…∨yn) ∧
(x1∨y2∨…∨yn) ∧
(y1∨y2∨…∨yn).

这是输入的话,您建议的方法是如何做的?

博主回复(2016-7-1 12:26)1.将其它逻辑表达式转化成k-CNF的过程不应该算到求k-CNF=1的满足解算法。
2. k-CNF=1求解穷举法是以变量个数n做为规模来计算的。操作的对象是逻辑变量,对每一个逻辑变量设值都有不确定性,才会产生指数级的重复执行。
3. 用子句标志消去法是以子句数m为规模来计算的。操作的对象是子句,且每个子句的表示值是确定的,施行消去的的过程没有不确定性,因而对每个子句来说这是一个连续确定的操作过程。
4. 子句数m的变化范围也是正整数集,并且是由k-CNF中的子句数来确定的,子句的变量构成与变量数n有关,变量多,子句的构成会多一些,然而子句数量m却在一定范围内是自由的。取值4096以内整数的变量x和取值2^12以内的整数的变量m没什么区别。不能因为2^12是n=12时的2^n,就认为m与x完全不同。
5. 此例的n只是k=n而已,实际上变量的数量,如x和y的数量对等,变量数至少是2n。但不论变量数有多少,由于子句不可重复,子句数m取值总是自然数有限序列,而子句标志不论变量个数有多大(其到达某值N)子句标志数也是一个有限正整数,最多也不会超过2^N个。

 

 



https://wap.sciencenet.cn/blog-340399-988111.html

上一篇:k=n时k-SAT能快速求解吗?答田文洪老师
下一篇:2016中国计算机大会P与NP问题论坛已获批准
收藏 IP: 61.135.194.*| 热度|

0

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

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

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

GMT+8, 2024-4-24 15:42

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部