科学网

 找回密码
  注册

tag 标签: 3-SAT

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

子句包含消去法多项式时间证明
accsys 2019-11-26 05:40
子句包含消去法多项式时间证明 姜咏江 子句包含消去法是在 3-SAT 的解空间( 2 n 个 n 位二进制数)中,逐一消去那些包含子句的可能解 (n 位数 ) 的过程。设 3-SAT 子句有 m 个,那么全部子句处理完成,计算次数为 (2 n -2 n-3 )+ (2 n -2 n-3 -2 n-3 )+ (2 n -2 n-3 -2 n-3 -2 n-3 )+…+(2 n -2 n-3 -2 n-3 -2 n-3 -…-2 n-3 ) =(2 n -2 n-3 ) +(2 n -2 * 2 n-3 ) + (2 n -3*2 n-3 )+…+ (2 n -(m-1)2 n-3 ) + (2 n -m2 n-3 ) =m2 n –(1+2+3+…+m) 2 n-3 = m2 n –m(m+1) 2 n-4 = m2 n (1-(m+1) 2 -4 ). 这是一个关于 n 的指数时间复杂度,是关于 2 n 的多项式时间复杂度。 仿量子计算机一次可以处理 2 n 个 n 位二进制数,因而令 N=2 n ,则子句包含消去法是一个关于 m 的多项式 m(1-(m+1) 2 -4 ) 时间算法。 如今,只有并行计算的仿量子计算机可以这样快速计算,虽说量子计算机也可以如此计算,但量子计算机尚在襁褓之中,选择仿量子计算机是明智之举。
个人分类: 仿量子计算机|1543 次阅读|0 个评论
通俗解释P与NP这个世界难题
accsys 2017-11-8 07:11
通俗解释 P 与 NP 这个世界难题 姜咏江 与人工智能关系重大的 P 与 NP 问题,是美国克雷数学所千禧年以百万美元大奖悬赏的七大难题之一。通俗地讲,就是“最坏在指数时间可以猜测验证答案的问题,是否可以在多项式时间求出一个正确答案”。前类问题称为 NP ,后类问题称为 P ,一般表示为 P?=NP 。 例如,最多由 3 个不同逻辑变量值的或运算组成的多项式叫子句,若干个子句的与运算叫合取范式。问,能否找到 n 个变量的一组值使合取范式的结果为 1 ? 这个实例叫布尔可满足性问题,也叫 3-SAT 问题。 3-SAT 问题直接涉及到集成电路可靠性分析等。人们已经证明了,如果 3-SAT 可以在多项式时间求出答案,那么 P=NP 就成立。 每个子句变量值不多于 k 个的子句所成的合取范式叫 SAT 。能够将其它 NP 问题,通过多项式时间转化为 SAT 问题的一类,称为 NP 完全问题,简写成 NPC 。由于所有 SAT 都可以转化成 3-SAT ,所以谁能够解决 3-SAT 或 NPC 中任何一个,那么就等同证明了 P=NP 。 NPC 问题有很多,典型的还有子集和问题、哈密顿回路问题、背包问题、邮差问题、图的顶点覆盖问题、因素效果分析问题等。 什么是指数时间?就是事情的解决是概率性的。即一次处理得到的结果不一定对,需要验证才能够知道。这多体现为重复进行某种操作才可以得到正确答案。 什么是多项式时间?就是一次性处理就可以得到正确的答案。 变量 x 多项式的数学表达为: a+bx+cx 2 +…+ ξ x k ,其中 k 是常数。如果错误地将 k 理解成变量,就会混淆指数和多项式。例如组合和表达式 ( n 0 )+( n 1 )+…+( n k )+( n k+1 ) +…+( n n-1 ) +( n n )=2 n ,这里 n 是变量,此为 n 个元素从 0 取到 n 个的组合数之和。实际上这是是指数 2 n 的另一种表达形式,不是 P 与 NP 问题所说的多项式。 P 与 NP 问题从上个世纪 70 年代,史提芬 . 库克提出 NPC 类之后,学界已经认为只要能够找到一个 NPC 类问题的多项式时间解法,那么就证明了 P=NP 。近些年国外学者屡次发表 P ≠ NP 的证明,都未被承认。笔者认为这不是一个纯理论证明的问题,而是一个创造理论实现证明的实际依据问题。解决 P 与 NP 问题,最有力的关键是要找出 NPC 类某个问题的多项式时间算法,或者没有。由于 n 是趋于无限大的,这让后者的逻辑证明进入了死穴。 P 与 NP 问题国内研究的学者不很多,因而许多问题都不会与其关联。笔者深入研究了 SAT ,发现用限位数理论去分析逻辑变量的可选值,逐步消去那些只能取唯一值变量,消去结果为真的子句,如果合取范式有解,那么就可在不超过 O(n 4 ) 时间复杂度,即不超过 4 次多项式时间,可求出 3-SAT 满足解。 维基百科上有P/NP问题介绍,想了解更多可以去读。 2017-11-8
个人分类: P/NP问题|7110 次阅读|0 个评论
NPC=P
accsys 2017-10-22 12:22
NPC=P 姜咏江 我说过, “搞创新科学研究就如同坐过山车。”在设计 3-SAT 问题求满足解程序的过程中,又让我坐了一次过山车。在用子句消去法求出联想的满足解,最后遇到了全是孤立变量的情况,而且孤立变量形成的 3-SAT 也可以无解!这是我先前没有深入思考的。 经过一个多月的深入研究,变换思路,引进了 “可无解块”和“可无解表”。一切问题就迎刃而解了。再次验证了限位数理论的重要性。可以肯定,子句消去法的算法时间复杂度不会超过 O( n 4 ) 。如果谁要是说 P ≠ NP ,我一定要与他有一场论争。 其实, 3-SAT 有许多有利于指数时间 DPLL 的合取范式,也有许多有利于多项式时间算法的子句消去法的合取范式,个别例子求解的速度很快,不能说明问题,只有所有的情况都考虑在内,才能够得到最终的结论。 2017-10-22
个人分类: P/NP问题|2292 次阅读|0 个评论
求解世界难题如同坐过山车刺激富有吸引力
accsys 2017-6-21 21:27
求解世界难题如同坐过山车刺激富有吸引力 姜咏江 一晃,研究 P/NP 世界难题已经过去三年多了。在求解 SAT 问题多项式时间算法的研究中,真感到了玩“过山车”般的惊险刺激,然而却是那样充满了吸引力。 当我将 3-SAT 一般性求解程序设计完成之后,我才踏实地感觉到, Boolean Satisfiability Problem 被我解决了。我研究的子句消去法可以在最坏的 O ( n 4 ) 时间复杂度完成求出满足解是确定无误的。 有人说 P/NP 问题考验着人类的智慧,这有些过分。 P/NP 是计算机科学的重大问题。这个问题既需要数学又需要计算机理论。这样在两个高深的科学领域中都十分精通的科学工作者不多。特别是计算机科学理论的基础研究还不够深,因而这个 P/NP 问题才成了世界难题。 我忙了一段时间的英文论文基本完成,投到世界一流期刊是必然的事情,谁让咱们的中国话在科学领域不管用呢? 以往的数学对广泛存在于世界的离散因素关联缺乏行之有效的研究方法。我相信这个方向会成为重要的课题。 2017-6-21
个人分类: P/NP问题|3329 次阅读|0 个评论
科研需要坚韧不拔的意志和无所畏惧的精神
accsys 2017-5-1 22:20
姜咏江 有一段时间没写博文了,原因很简单,忙着将子句消去法写成计算机程序。说实在的,对一个七十多岁的人来说,还真是有点玩命。但我这个人办事不愿意半途而废。今天是“五一”劳动节,我确实还真地劳动了一番,将求 3-SAT 满足解的程序彻底完成了。高兴之余,想起来写点,以作为纪念。 为什么要拼命自己编程?很简单,别人编不来。我说我解决了 SAT 问题的多项式时间算法,大概没有什么人会相信,因为中涉及到了 P/NP 这个几十年未能够解决的计算机科学的世界难题,世界上那么多聪明的科学家,数学界、计算机界的名人名家都未能解决,你就解决了?其实,这是一般人的习惯看法。但事情总有特殊性,我就是那种特殊的人物。 SAT 问题的全解和满足解问题,我都在理论上解决了。可是要学界的人们认可你,那可不是一件容易的事情。特别是在我们中国,就更是困难。原因是一般学者说了不算,而权威名家一般都不会轻易说出自己的见解, P/NP 问题毕竟是全世界都一直未能解决的头号难题。为了让学术界认可,需要做艰苦细致地工作,其中最重要的是拿出“真东西”来!真东西是什么?就是实际能够求 SAT 满足解的程序。说起来,这就是我非要玩命设计出求解 SAT 解问题程序的根本原因。 我说过,子句消去法求 3-SAT 的满足解时间复杂度不超过 O(n 4 ) ,通过我写出的程序执行,完全可以证实这个结论。上百个变量的 3-SAT 求解,在我的笔记本上十几秒就可以得到结果。顺便说一句,那种用随机的方法产生的合取范式,能否得到正确的解,同样具有随机性。因而在理论上说明不了什么。本人的子句消去法可以清楚地告诉人们,什么情况下 SAT 有解,什么情况下无解,而且会准确地说出解的数量。国外搞得 SAT 竞赛,据说每年一次。这种竞赛在没有理论保证的情况下,应该说只是一种游戏而已。如果他们能够认识到我创造的理论的正确性,这种游戏就该结束了。从这方面看,我的研究倒有点罪过了。。。 SAT 问题的解决,据说涉及众多方面,但我感到最重要直接的是集成电路优化、可靠性检测,这涉及到信息产品的效率、速度、可靠性、安全性。未来设计的超大规模集成电路系统,不会发生未知原因的死机,也不用设计那种“看门狗”之类的东西。如果集成电路运行状态都在我们的掌控之中,在相互比拼的决战中,不出状况,岂不是会高人一头?用在国防战场方面,意义之重大可想而知! 不怕讽刺挖苦,科研需要有坚韧不拔的精神,成功就属于你。当然,这一切需要你有雄厚的根基,渊博的知识和勇于探索的底气。 为了纪念我实际设计求解 3-SAT 满足解和全解的程序的完工和测试,特此写字。 2017-5-1
个人分类: 3SAT解法|4283 次阅读|0 个评论
3-SAT快速求解方法
accsys 2016-11-6 15:57
姜咏江 SAT问题中最基本的是3-SAT。子句消去法可以在多项式时间完成对3-SAT求出满足解,但如何对具体的3-SAT求解达到最快? 依据子句消去法确定变量唯一解的基本规则,只要在k阶子句块中一个变量有2 k-1 个相同的表现值,那么这个表现值就是这个变量的解。3-SAT的子句块最高是3阶,在消去子句的过程中会剩下2阶或1阶子句。因而任何时候,3阶子句块变量有4个相同的表现值,2阶子句块中变量有2个相同的表现值,或者一个变量只有唯一的表现值,那么这时都可以用表现值作为变量的解。 例如, SAT=(x1+x20’)(x1’+x20’)(x1+x4’+x6’) (x1’+x4’+x6) (x1+x4’+x6) (x1’+x4’+x6’) (x2+x4’) (x2+x4)x5’) (x9+x15’)(x9’+x15’) (x9’+x15) (x11’+x13+x16) (x11+x13’+x16) (x11+x13+x16) 用0和1表示这个SAT就如 表1 所示。 下面的 表1, SAT出现了1,2,3阶子句块,这时可从子句块中找到x20=0,x5=0,x4=0,x2=1,x9=0,x15=0。 表 1 1 0 0 0 0 0 x1 x2 x4 x5 x6 x9 x11 x13 x15 x16 x20 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 1 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 1 1 1 这样就会立即得到 表 2 ,显然设定 x16=1 ,那么所有的子句都会被消去。 表 2 1 0 0 0 0 0 x1 x2 x4 x5 x6 x9 x11 x13 x15 x16 x20 0 1 1 1 0 1 1 1 1 最后求出的满足解是: x20=0,x5=0,x4=0,x2=1,x9=0,x15=0 ,x16=1,其它变量值可以是0或1. 在SAT用子句消去法求解的过程中,只有找不到k阶子句块变量有2 k-1 个相同的表现值时,才用子句消去法求有唯一可选解的变量,并将唯一可选解变量也用子句消去法消去。当所有剩下的变量都有2个可选解时,才从任何一个变量值设置开始,使用子句消去法消去那些剩余子句块变量值唯一子句,最后就能够一次性获得3-SAT的满足解。 2016/11/6
个人分类: 教学点滴|2680 次阅读|0 个评论
3-SAT问题中如何选择算法操作对象?
accsys 2016-7-2 07:41
3-SAT问题中如何选择算法操作对象? 姜咏江 计算机科学中的 3-SAT 问题之所以成为 NP 问题,是因为算法的操作对象选择变量造成的。将操作对象选择为子句,就会设计出多项式时间复杂度算法,从而就找到了 NP-complete 问题转化成 P 类问题的基本方法。 一年前我创造的“子句消去计数法”称为“子句标志消去法”更为恰当,因为那些子句计数器就是起到一个标志的作用。 子句标志消去法就是将 3-SAT 问题的操作对象选择为子句,从而避开了以变量为操作对象的穷举法,成为了最直接的多项式时间复杂度的算法。 以附录中与田文洪老师讨论的问题为例,其中变量 x 和 y 都有 n 个,变量的总数为 2n 个。转化成 n-CNF 之后,如果以变量做为操作对象,那么算法的规模即为 2n 。由于每个变量可以取值 0 和 1 ,故每次操作对象的值都具有不确定性,这就造成算法的众多分支,形成了算法的树形结构。 子句标志消去法以此例中的子句为操作对象,由于每个子句的值是确定的,而将子句数 m 做为规模,其标志值就在 0 ~ 2 2n -1 这些 2n 位二进制数中间,则对于每个子句只要进行一次标志查找,就可以实现操作的结果,而无需对同一个子句进行反复操作。因而子句标志消去法这个算法时间复杂度就是 O(m) 。 读者不难理解,子句标志消去法对 3-SAT , k-SAT , n-SAT 同样适用。 2016-7-2 附录: 田文洪 2016-7-109:47 姜老师,需要说明一下您建议的方法如何避开CNF子项数量是2^n的?这个输入若是我第一个评论中的例子,例如把(x1∧y1)∨(x2∧y2)∨...∨(xn∧yn)变成CNF(conjunctivenormalform)的例子: (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-112: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个。
个人分类: 3SAT解法|3600 次阅读|0 个评论
学术研究常常需要你改变思路
热度 1 accsys 2015-12-23 09:45
学术研究常常需要你改变思路 姜咏江 学术研究和创新科研常常需要你改变前人的思路,如此才有希望获得独到的成就。我现在可以完全肯定 3-SAT 问题已经被我解决了。 3-SAT 就是一个初等数学的问题。一个初等数学就能够解决的问题,被学术界说得如此神乎其神,其原因多半是研究中缺乏及时地改变思路所至。 搞学术或科研,自然免不了先要学习前人或别人的许多东西,自然免不了要顺着人家的思路进行研究思考,这是学术研究的惯性。但是,如果沿着那种成型的思路走不下去的时侯,就应该考虑换个角度或方法研究,这样才会有所发现。 我在机器计算基础研究中发现了限位数理论和方法,因而才想到将 k-CNF-SAT 的子句按照 k 个变量组织到一起,看看有什么特征。这就是“子句块”和“关联段”。我这种变换角度的思考方法,是我获得 3-SAT 解法成功的关键。有了子句块和关联段的概念,再对之施行“子句消去法”,那么不仅 3-SAT 是个初等数学问题,就连 k-CNF-SAT 也都是初等数学问题! 我进入 P/NP 问题的研究过程就记录在科学网上。说起我进入 P/NP 问题的研究,那是一个完全偶然的事情。我擅长的是计算机 CPU 设计, 2014 年在网上介绍 CPU 设计的重要性之时,被李斌网友提及 P/NP 问题才是重大的科研问题所吸引。于是就以玩玩的态度,在科学网上做起了 P/NP 问题的学术研究。这其中最大的目的还是想活动活动大脑,顺便在网上结交一些朋友。 我起先以为 P/NP 问题关乎到程序运行时间计算问题。因而抛出了程序执行时间计算方法的博文,被李斌嘲笑我根本没有弄清楚 P/NP 问题。这期间免不了要深入学习什么是 P/NP 问题,最后落实到 3-SAT 的求解方法。 子句消去法是分段子句消去法的简称。“逻辑多项式的某项值为 1 ,那么这个逻辑多项式的值就是 1 ” ,这就是子句消去法的基本原理。这一简单的原理恐怕没有什么人不清楚。如果一个个设定逻辑变量的值,子句消去法无疑是一种穷举的方法,不是多项式时间的算法。但我相信,找到合取范式 k-CNF 的结构规律,一定会找出规律的计算方法。说实话,这其中我有若干次想放弃,对一些批评和讥讽感到有理。一个半个多世纪都未被学术界解决的问题,你一个七十岁的老者能够破解?兴趣是学术研究最大的动力,这方面也许有人不信,但我确实是被兴趣所驱使,一种不想失败的想法激励着我继续。事实证明我成功了,我自己也就轻松了。 用子句消去法求解 3-CNF=1 的解,每一个中学生都可以学会,这不就是一个初等数学问题?既然是初等数学问题,为何长期得不到解决? 其实, k-SAT 问题涉及到一种离散型关联关系的计算,而这种计算并不是通常的算术运算所能够解决的。算术运算是一种连续地因果关系的思维模式,其极致就是数学分析的微积分思想。离散型关联关系的因素之间只为相互结构所左右,而不具备因果关系的那些显著特征。离散关联关系形成问题的结果只需要回答是否,而不会像我们所通晓的数那样分为相互关联的级别。 例如,逻辑变量表达式 ( x’ 1 + x’ 2 + x’ 3 )( x 1 + x’ 2 + x’ 3 )( x’ 1 + x 2 + x’ 3 )( x 1 + x 2 + x’ 3 )( x’ 1 + x’ 2 + x 3 )( x 1 + x’ 2 + x 3 )( x’ 1 + x 2 + x 3 )( x 1 + x 2 + x 3 ) ,不论我们给出逻辑变量 x 1 、 x 2 、 x 3 怎样的值,该表达式最终的结果一定是 0 ,这是逻辑变量间的结构造成的。这种多因素的结构关联,在以往的研究中缺失很多。显然书写成上面这种表达式的方式不利于结构因素研究。将上面的表达式写成下面表 1 的形式( x i 用 1 记录, x’ i 用 0 记录),就能够一目了然地看出变量之间的相互制约关系。 由表 1 可以看出,我们将每一行看作一个子句,无论我们对 x 1 、 x 2 、 x 3 设定怎样的值,都不能够将全部子句消去。而去掉表 1 中的某些行,那么就可以设定 x 1 、 x 2 、 x 3 的值将子句全部消去。 表 1 3-CNF 完全子句块 x 1 x 2 x 3 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1 对于 3-CNF 来说,设定 x 1 、 x 2 、 x 3 的值后,能消去 3-CNF 的全部子句,就等于求出了 3-CNF=1 的解。所以逻辑变量间的结构如何就成了 k-CNF=1 求解的钥匙。 子句块之间的相互关联结构也影响到 k-CNF=1 求解,这是离散因素结构分析的必然。表上有限次操作无疑是一种多项式时间复杂度的算法。 一年多的时间,我能够完成 3-CNF=1 的求解方法,关键的地方是改变了以往人们的思考路线,引进了表结构方式,从而找到了 k-CNF=1 求解的基本途径。 按照维基百科网站上的说法, P/NP 问题涉及的科研层面太广了,解决了 3-SAT 问题就等于解决了 P/NP 问题。一般认为, NPC 的典型 3-SAT 的多项式时间求解存在,就等同于 P=NP 。这究竟是否完全正确,我还没有详细地研究。 2015-12-23
个人分类: 3SAT解法|2815 次阅读|2 个评论
3-SAT问题为什么长期得不到解决?
accsys 2015-11-2 09:38
3-SAT 问题为什么长期得不到解决? 3-SAT 是解决 P/NP 问题的关键问题之一,可就是长期得不到有效的解法,原因在哪里呢? 第一、人们过于将 3-SAT 问题做为整体性问题来求解了。 例如,随便写出 100 个变量的 3-SAT ,如果你将 3 个逻辑变量的子句放到一起,如果同变量的子句有 8 个(不包括同一变量正反都在的子句),那么 3-SAT 肯定就没有满足解。但是,如果将那些子句无规律地放到一起,这种易于判断的特征就消失了。 再如,没有共同逻辑变量的子句之间是无关的,因而各自变量值的变化不影响局部的求解。 第二、 3-SAT 的关联段解决定着整体的解。 3-SAT 是否有解是由那些相互有共同变量关联的段来决定的。关联段分为一元关联,二元关联和三元关联。 3-SAT 的三元关联的段之间是相互独立的,不会超过 8 个子句(不包括同一变量正反都在的子句)。二元关联和一元关联会形成长段。实际上,关联段是 3-SAT 的基本组成部分,只要这些基本组成的关联段都有解,那么 3-SAT 整体才有解;只要其中任何一个关联段无解, 3-SAT 整体就无解。 第三、每个 3-SAT 的关联段最多需要 7 次求解过程就可以将该关联段的解都求出。 关联段解的长度是由段中包含的逻辑变量数来确定的。用分段子句消去法求解的次数是由起始子句块的可能解数量确定的。有解的子句块最多有 7 个可能解,因而关联段最多要进行 7 次求解过程。 第四、利用分段子句消去法才能够在求解中判断出变量应该的取值。 由于 3-SAT 关联段是否有解要看关联变量之间的相互制约情况。这其中制约最简单的情况是 2 个变量值已经确定,看所有通过第三个变量相关的子句是否能都设定这一个变量值消去。复杂些的是有一个变量值确定的有 2 个共同变量的子句,是否可以找到这两个变量的值,将这些子句全部消去。分段子句消去法给出了关联段求解中有一解和无解的判断方法,并且给出了有 2 个解的延续处理方法,从而能够顺利地求出关联段的解。 分段子句消去法给出的这些函数方法是以往 3-SAT 研究中未见有人使用过的。 2015-11-2
个人分类: 教学点滴|6457 次阅读|0 个评论
秋后算帐篇:详细解析天才的姜咏江解决了3SAT难题
accsys 2015-10-29 14:59
重读杜立智的《详细解析天才的姜咏江解决了3SAT难题》的博文(见 http://blog.sciencenet.cn/blog-327757-905854.html ),既觉得好笑,又觉得我们的科研态度需要纠正。 说实话,我当时给出的子句消去计数法实在是让没有研究过限位数理论的人难以理解。就是在他们的怀疑,甚至是嘲讽的鼓励下,使我完成了3-SAT分段子句消去法,这个方法概念简单,就在初等数学的范围之内,有一定的数学知识都可以看懂,并且能够学会3-SAT问题的求解。 围绕3-SAT问题研究,我想表达两点感想: 第一、不要迷信国外,相信中国人的智慧和能力是超群的。 第二、现在,人生七十不算老,六十七十正当年。 好好发掘中国人自己的潜力吧,不要那么迷信国外,特别是资质不浅的教授们。 2015年10月29日
个人分类: 随笔|2188 次阅读|0 个评论
3-SAT分段子句消去法(正规专业版)
热度 1 accsys 2015-10-15 06:53
前言:本文投给《中国科技论文在线》后说我已经在科学网上发表了。前在博客中发表的不够正规专业,因此将正规一些的再用博文发表一次,供数学计算机专业的人士讨论。 3-SAT 分段子句消去法 姜咏江 摘要 :本文给出了 3-SAT 分段消去子句的求解算法。证明了可以在多项式时间求出 3-SAT 的解。从而证实斯提芬 . 库克定义下的 NP-complete 问题就是一个 P 类问题。 关键词 : NP-complete ; P/NP 问题;子句消去法 中图分类号 : O158 The 3-SAT Algorithm by Sections JiangYongjiang Abstract : In this paper,I gave the remove clausemethed to get answer of the 3-SAT proplem. This is a polynomial time algorithm.It is proved the problem of NP-complete is a P class problem. Key words : NP-complete;P/NP problem; The clause remove method 1. 引言 P/NP 问题曾于 2000 年被美国克雷数学所定为世界头号难题 ,更有甚者说其挑战了人类智慧。所谓 P/NP 问题的定义是这样给出的: 复杂度类P包含所有那些可以由一个确定型图灵机在多项式表达的时间内解决的问题;类NP由所有其肯定解可以在给定正确信息的多项式时间内验证的决定问题组成,或者等效的说,那些解可以在非确定图灵机上在多项式时间内找出的问题的集合。 实际上这个定义有很多歧义。这涉及到人们对确定型图灵机、非确定型图灵机、多项式时间、问题、决定问题、肯定解、给定正确信息、验证等一系列概念的统一认识,因而很难形成统一的见解。 1971 年斯提芬 . 库克 (Stephen A. Cook) 发表了《 The Complexity of Theorem Proving Procedures 》 才把 P 之外的问题归结为三大类,即 NP 、 NPC 及 NPH 。库克的分类得到了学术界的认可。库克给出的 P 、 NP 、 NPC 、 NPH 问题的定义如下: 可以在多项式时间内求出解的问题,叫 P 问题( Polynomial problem )。 可以在多项式的时间里验证一个解的问题,叫 NP 问题( Non-deterministic polynomial )。 如果所有的 NP 问题都存在多项式时间算法使其能够归约为某一 NP 问题,则称该 NP 问题为 NPC 问题( NP-complete )。 如果所有的 NP 问题都存在多项式时间算法使其归约到某问题,则称该问题为 NPH 问题( NP-hard )。 所谓的多项式时间算法,就是一种函数求解过程。显然,求解方法也是一种验证方法,因而有 P 类问题属于 NP 类问题。如果 NP 类问题也属于 P 类问题,那么就有 P=NP 了。学术界已经证明了所有的 NPC 之间都有多项式时间算法实现转化。由 NPC 的定义不难看出,只要找到一个 NPC 问题的多项式时间算法,也就等于找到了所有 NP 问题的多项式时间算法,于是也就证明了 NP=P 。 2. 典型的 NPC 问题 长时间以来,人们将寻找 NPC 类问题的多项式时间算法作为了解决 P=NP 问题的关键途径。一些典型的 NP 类问题 (见 图 1 所示)早已经被一些数学家证明是 NPC 问题了。例如,由 3 个逻辑变量组成的合取范式 3-CNF-SAT (简称为 3-SAT )满足问题、子集和问题 SUBSET-SUM 、旅行商问题 TSP 、哈密顿回路问题 HAM-CYCLE 等,这些都是 NPC 问题寻找多项式时间算法研究的热门问题。 图 1 典型 NPC 问题及相关 Fig. 1 NPC Problems 3. 3-SAT 与子句消去法 本文给出的分段子句消去法是解决如何在多项式时间求出 3-SAT 满足解的方法。 3.1 3-SAT 定义 所谓的 3-CNF 就是多个由 3 个逻辑变量或其非组成的多项式间形成的与运算表达式。一般这种逻辑表达式被称为合取范式 (CNF) ,多项式逻辑因子称为子句。 将逻辑变量 x 的非运算用 x’ 表示,集合 A= { x 1 , x 2 ,..., x n } , A’= { x 1 ’, x 2 ’ ,..., x n ’ }, 3-CNF 定义如下: 3-CNF= 其中 m 是子句的数量, x ij ∈ A ∪ A’. 求 3-CNF=1 解的问题一般叫 3-SAT. 3.2 子句消去法与反子句 由逻辑代数知,逻辑多项式的任何一项值为 1 ,则多项式的值为 1 。因而欲使 3-CNF=1 ,只要每个子句的值为 1 就行。 定义 1 :设定子句中逻辑项值为 1 ,并消去该项值为 1 的所有子句的方法,称为子句消去法。 定义 2 :将子句中的项用非运算表示得到的子句叫原子句的反子句。 定义 3 :子句中包含变量 x 与 x’ ,则称此子句为恒一子句。 由于恒一子句的逻辑值总是 1 ,不影响子句消去法,所以本文后面提到的 3-CNF 、 3-SAT 、 k-CNF 或合取范式等一律不包含恒一子句。 4. 3-CNF 表格式和关联段 分段子句消去法要用到 3-CNF 的表格表达方式。 4.1 3-CNF 的表格式 将逻辑变量 x 用 1 表示, x’ 用 0 表示,建立的 3-CNF 表格式如图 2 所示。子句以 3 位二进制数的形式占表中一行,并且规定变量相同的子句行相邻。 图 2 3-CNF 值格式 Fig. 2 The form of 3-CNF 定义4 :变量相同的子句放到一起叫子句块。 定义5 :能够使子句块中全部子句消去的变量值叫块解。 4.2 关联段 定义 6 :由相同变量联接的子句块组称为关联段。 依据定义,图 2 中有 5 个子句块的关联段。 定义 7 :能使关联段中所有子句值为 1 的段中变量值,称为段解。 定义 8 :子句块间有一个共同变量的叫一元关联。子句间有 2 个共同变量的叫二元关联。 定义 9 :子句块间没有共同变量的子句块,称为独立段。 显然, 3-CNF 有三个共同变量的子句就是子句块。 5. 子句消去法相关定理 为了说明子句消去法对 k ≥ 3 合取范式 k-CNF=1 求解的有效性,我们以更一般的情况来论述本节一些内容。 5.1 k-CNF 的定理 定理1 :所有变量值都设定之后,仍然有剩余子句存在,则设定的 n 位数不是 k-CNF=1 的解,否则是解。 证明 :因为依子句消去法,消去的子句值是 1 ,直到所有变量值设定后剩下的子句值一定是 0 。这些值为 0 的子句是合取范式的因子,必使 k-CNF=0 。 定理2 :子句块中若有互反子句存在,则二值都不是块解。 证明 :依据子句消去法,以子句的值为 1 消去的所有子句中不包括其反子句,因此总有其反子句不能被消去,则互反子句值都不是块解。 推论1 : k-CNF 中子句的反子句值不是块解。 推论2 : k-CNF 子句块解不超过 2 k -1 个。 推论3 :若 k-CNF 中有 2 k 个子句的子句块存在,则 k-CNF=1 无解。 定理3 :从一个子句块出发确定的 k-CNF=1 解,也可以从另一子句块出发确定这个解。 证明 :假设由子句块 A 确定的解 a 不是由子句块 B 确定的解,那么因 a 中必含有 B 的一个子句值,于是可以从这个值出发,按照 a 的值扩充来求解,仍然是这个合取范式的一个解。于是可知,从 A 做起始块或 B 做起始块可以得到相同的解。 由此定理可知,选择任何子句块做为起始块求解,效果一样。 定理4 : n 个变量的 k-CNF 子句块最多有 C n k 个 。 证明 :显然 k 阶子句的变量是从 n 个变量中取出 k 个构成的集合,每个变量取值 0 或 1 就构成了子句块。依据排列组合知识,知定理成立。 5.2 3-CNF 的定理和性质 定理5 :子句块或关联段无解,则 3-CNF=1 无解。 证明 :因为子句块解与关联段解都是 3-CNF=1 解的组成部分,其无解, 3-CNF=1 自然无解。 将独立的子句块也看成一个关联段,那么有下面定理 6 。 定理 6 : 3-CNF=1 的求解可以分别对各关联段求解。 证明 :由 3-CNF 的表格式可知关联段是不重合的,并且将各关联段的解按照变量顺序组合就是 3-CNF=1 的解,所以可以分开求解。 定义 10 :子句消去过程中剩余子句块间有相同变量,则称这些子句块为动态块,消去此动态块的变量值叫动态块解。 定理 7 :动态块无解,则关联段无解。 证明 :因为动态块变量是关联段解的组成部分,所以动态块无解,其所在关联段就无解。 定理 8 :确定了一个变量值的动态块其余变量的所有可能值都存在,则此次段选值不是段解。 证明 :如表 1 所示,如果固定了左侧 3 列中一个变量的值,那么剩余 2 个变量的值可能为右侧的 2 列值。如果右面 2 列 4 行值都存在,则表明无论设定剩余 2 个变量取任何值,都不能够将动态块的子句消除干净,因此知此次选值不是段解。 表 1 一个变量值确定其它变量值 Tab. 1 Situation of fixed onevariable 块子句可能值 固定一个变量后剩余变量可取值 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 1 推论4 :动态块确定一个变量值后其余 2 变量有 3 组值,则有惟一动态块解;两组或一组值,则有多个动态块解。 推论5 :子句块中变量有4子句同值,取其它值可无解。 定理 9 :连续多值可选的关联段最终可确定段解。 证明 : 3-CNF 求解中只有一个变量值确定的动态块可以产生多解。若设定关联变量值后的剩余动态块仍然有多值可设,则可连续查找关联块,直至无解、有惟一解或有关联段的结束动态块出现。如果最终出现关联子句块无解,则关联段无解。如果出现子句块块有唯一解,可反方向设定关联变量值去确定前面每个多值动态块的解;如果多解情况最终关联的是未曾设定解的子句块,可以把子句块解设定,然后反方向去确定多解的动态子句块,最终会连成一个关联段,得到关联段的解或无解。 6. 3-SAT 分段消去算法 运用子句消去法,可以按照关联段设定变量值,消去子句,逐步对 3-CNF=1 求解。 6.1 关联段子句消去法 运用子句消去法,可以按照关联段设定变量值,消去相关子句,逐步对 3-CNF=1 求解。对没有 8 个子句的子句块组成的数值表 3-CNF ,进行如下步骤的操作可以求出满足解。 ( 1 )将所有子句块中一个变量有 4 个相同值的变量设定其值,消去相应子句; ( 2 )对形成表 2 右侧 3 种类型子句的动态块和只需设定一个变量值的动态块求出唯一解,并消去相应子句; ( 3 )设定所有多解的剩余子句块的解,优先处理可能形成无解的情况。 如果前面都是唯一解的情况,遇到了无法回避的表 3 的无解情况,那么 3-SAT 无解。 依据子句消去法,若所有的关联段都有解,那么 3-CNF=1 就有解。其解为各关联段解的组合。 6.2 关联段子句消去法实例 图 3 给出了用分段子句消去法求 3-CNF=1 的例子。 首先,本例的子句块 x 1 x 2 x 3 选 x 3 =0 ;子句块 x 3 x 4 x 5 选 x 5 =0 ;子句块 x 4 x 5 x 6 选 x 6 =0 (见图 3 ( 1 ))。 其次,消去相应子句后,有 x 5 x 6 x 8 动态块必需确定 x 8 =0 (图 3 ( 2 )) 最后,消去相应子句后,剩下了有多解的关联段(图 3 ( 3 )),可以设定 x 1 =0 、 x 2 =1 将全部剩余子句消去。此 3-CNF=1 有解 010*00*0*** 。 图 3 3-CNF=1 求解过程 Fig. 3 procedue of the remove clauses 6.3 分段子句消去法的多项式时间复杂度 分段子句消去法,将 3-CNF 的子句分成了相互关联的段,并以段解来组成 3-CNF=1 的解。由于关联段是不重复的,所以 3-CNF 的关联段最多有 个,此时最多有一至两个子句块之间关联,其余子句块都是独立的。 由于 3-CNF 的每个关联段都可以一 次求段解操作,因而用分段子句消去法求出 3-CNF=1 的解或判定无解,最多需要进行 段消去子句的过程。从这一点来说,用分段子句消去法求 3-CNF=1 的解是一个 O( n ) 时间复杂度的算法。 其实, 3-CNF=1 是否有解,主要取决于子句数 m 和子句分配的结构,亦即子句之间关联的程度。 3-CNF 关联段子句越多, 3-CNF=1 的解就越少,反之解的数量会很多。当所有子句块只有一个子句并且都是独立块时, 3-CNF=1 会有最多的解。 7. 结论 3-SAT 求满足解的分段子句消去法是一个多项式时间复杂度的算法。本算法证明了典型的 NP-complete 问题之一 3-SAT 是一个 P 类问题。依据学术界公认的观点,分段子句消去法可以说明 P=NP 。 (References) https://en.wikipedia.org/wiki/P_versus_NP_problem Steven Cook. The complexity of theorem proving procedures. In Proc. ThirdAnnual ACM Symposium on the Theory of Computing, pages 151-158,1971. Thomas H. Cormen Charles E. LeisersonRonald L. Rivest Clufford Stein. Introduction to Algorithms,Third Edition,pages1082-1104,2009. Gilles Brassard and Paul Bratley. Fundamentals of Algorithmics. PrenticeHall,1996. 附加一个例题: 100个变量的3sat求解.xls 2015年11月22日补充修改
个人分类: 科研论文|5223 次阅读|1 个评论
100个变量的3-SAT求解实例
accsys 2015-10-8 20:50
100 个变量的 3-SAT 求解实例 姜咏江 用分关联段子句消去法求 3-SAT 的满足解并不困难。我这里有一个 100 个变量的求解实例。手工操作也用不了多长时间。求解时,要先找有唯一解的子句块,从各个唯一解的子句块解出发,运用剩余动态块有唯一解的判定,做起来并不困难。遇到段多解留在最后处理,可以按需要取值。如果将多解留下,最终可以表达出更多的解。第二张表就是这个意思。 我用 Excel 的窗口分割,将解的变量值设定放在上面,滚动下面窗口,不影响观查变量直的设定。为了朋友们能够观看过程,仍然用绿色覆盖消去的子句,其实直接消去操作起来更容易。 解法请参考: http://blog.sciencenet.cn/blog-340399-925143.html 100个变量的3sat求解.xls 2015-10-8
个人分类: 随笔|2055 次阅读|0 个评论
3-SAT分段子句消去法求唯一解例题
热度 1 accsys 2015-10-6 08:49
3-SAT 分段子句消去法求唯一解例题 姜咏江 利用子句块唯一解和动态块唯一解来处理 3-SAT 求解,最方便的是 3-CNF=1 有唯一解的情况。这也是用其他方法求解 3-SAT 问题最不易的事情。 在用关联段子句消去的过程中,如果出现动态块消去呈现多解的情况,如果选择的变量值不合适,有可能出现后续无解的情况。正确的做法是暂不设值,而是沿着一元关联的子句块寻找唯一解的剩余子句块。只要找到关联的满足唯一解的子句块,就可以先设定这个子句块的变量值,然后反方向去确定前面多解的选值,这样可以最终正确地求出 3-SAT 的解。如果最终都是多解的子句块,那么这个3-SAT的问题肯定是多解了,此时确定最后一个子句块解,反向可得解。 3-SAT 有唯一解的情况,用分段子句消去法既方便又准确。有兴趣的朋友不妨试试。我还没有编写程序处理。不过手工操作弄个百八十个变量也不是难事。就是上千个变量也未必是难事,操作过程中随着子句的消去,工作量会迅速减少,时间自然会加速减少。 本文给朋友一个唯一解的例子,希望有心人能够自己做做看,体会一下求解3-SAT问题的关键点在何处。表下面一行是实际消去子句后的结果。 唯一解实例 : 3-SAT分段子句消去法唯一解例题.xls 参考: http://blog.sciencenet.cn/blog-340399-925143.html 2015-10-6
个人分类: 机器计算|2658 次阅读|2 个评论
一个简单的3-SAT求解例题
热度 1 accsys 2015-9-22 13:09
一个简单的 3-SAT 求解例题 姜咏江 这里给出一个最简单有唯一解的 3-SAT 例题,其解法如下图。 本例选择 x1x2x3 为起始块,则因子句 110 和 001 互反,所以块值只有 000 、 100 、 010 。图中所示是起始块解除法的计算,出现黄色块表示无解,只有 x1x2x3=010 时才可能得到该 3-SAT 的解。 此题 3-SAT 的解为 x1x2x3x4x5x6=010100 。 2015-9-22
个人分类: 科研讨论|2968 次阅读|1 个评论
象做多位数除法一样求出3-SAT的解
热度 1 accsys 2015-9-22 07:18
象做多位数除法一样求出 3-SAT 的解 姜咏江 3-SAT 是破解千禧大奖P/NP的典型 NP-complete 问题。据说 NP-complete 问题 一直没有多项式时间复杂度的算法,因而回答不了P/NP问题,所以美国克雷数学所才于 2000 年悬赏百万美元,广征P/NP问题破解。 不才,知道其中的难度,但出于兴趣,开动脑筋,经历波折数次,终于设计出了 3-SAT 分段子句消去法,使 3-SAT 的求解过程,如同做多位整数除法的算数题,可以用来解决一些问题。 君,如有兴趣,可参阅 http://blog.sciencenet.cn/blog-340399-928224.html 还是那句话:“把简单问题说复杂了,那叫蒙人。把复杂问题说简单了,那叫本事。” 科研快乐! 2015-9-22
个人分类: 随笔|2082 次阅读|1 个评论
3-SAT分段子句消去算法,数学人都能看懂NPC=P的证明
热度 1 accsys 2015-9-21 06:30
3-SAT 分段多项式时间求解算法 姜咏江 摘要 :本文给出了 3-SAT 分段消去子句的求解算法。证明了可以在多项式时间求出 3-SAT 的解。从而证实斯提芬 . 库克定义下的 NP-complete 问题就是一个 P 类问题。 关键词 : NP-complete , P/NP 问题,子句消去法 转: http://blog.sciencenet.cn/blog-340399-928224.html 2015-10-04
个人分类: 科研论文|5297 次阅读|2 个评论
3-SAT分段多项式时间求解算法
热度 1 accsys 2015-9-19 04:57
3-SAT 分段多项式时间求解算法 姜咏江 摘要 :本文给出了 3-SAT 分段消去子句的求解算法。证明了可以在多项式时间求出 3-SAT 的解。从而证实斯提芬 . 库克定义下的 NP-complete 问题就是一个 P 类问题。 关键词 : NP-complete , P/NP 问题,子句消去法 转: http://blog.sciencenet.cn/blog-340399-928224.html 联系邮箱: accsys@126.com (为防止网络被窃,在此公开并存档) 2015-09-19
个人分类: 科研论文|2904 次阅读|2 个评论

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

GMT+8, 2024-5-9 07:26

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部