科学网

 找回密码
  注册

tag 标签: k-CNF-SAT

相关帖子

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

没有相关内容

相关日志

k-CNF-SAT无解条件
accsys 2015-7-30 05:11
k-CNF-SAT 无解条件 姜咏江 K 阶合取范式如何去判断有无解有实际意义。判断无解的方法简单,只要某子句的变量完全表示都存在,那么合取范式必定无解。什么叫子句的完全表示? 举例来说, k=3 ,那么子句的完全表示有 2 3 =8 个: x i ’+x j ’+x m ’ , x i ’+x j ’+x m , x i ’+x j +x m ’ , x i ’+x j +x m , x i +x j ’+x m ’ , x i +x j ’+x m , x i +x j +x m ’ , x i +x j +x m 。 容易看出这就是 3 位二进制的 8 个数。 一般化,只要 k 个变量的各自正反表示子句都存在,则 k-CNF-SAT 必定无解。其原理来自子句子句消去记数法分组求解(见 http://blog.sciencenet.cn/blog-340399-928224.html ) 给子句完全表示下一个定义。 定义 : k 个逻辑变量表示子句对应的 k 位二进制数都存在,则称这些子句为子句完全表示。 由于子句完全表示的每个子句与 k 位二进制数一一对应,因而通过子句消去法总会有子句剩余下来,故这 k 个变量给定任何值都不会使合取范式有解。 为了能够快速判断 k-CNF-SAT 是否有解,在子句输入的过程中,要将能够构成子句完全表示的成员放到一起,如果有一组完全表示存在,则不必费力气求解了。 转: http://blog.sciencenet.cn/blog-340399-928224.html 2015-7-30
个人分类: 科研讨论|3061 次阅读|0 个评论
子句消去记数法分组定解算法
热度 3 accsys 2015-7-27 14:55
子句消去记数法分组定解算法 姜咏江 你想不到难题竟然这么简单! 有人认为子句消去记数法用到了对 2 n 个可能解标志的搜索,故而这就是指数型算法。虽然我一再强调 2 n 个可能解标志只是一组数而已,但他们仍然认为 n 就是规模。其实,求解 K-CNF-SAT 的过程,将子句逐一消去的操作,显然与合取范式子句的数量有关。这个数量虽然有限制界,但具体合取范式子句多少,只与题目的具体设定有关。设合取范式 k 阶子句的数量为 m ,则去掉恒一子句,应有 1 ≤ m ≤ 。这只是说决定动作的次数 m 的可能变化范围。在具体的 K-CNF 中,子句数量多少与 n 、 k 并无关系。 为了说明子句消去记数法并不以 n 为规模,我们采用可能解标识分组的方法来进行操作。这种分组只是在需要的时候会增加可能解标志的分组,不像穷举法那样 2 n 个可能值需要一一验证,而是一次性得到全部解。 n 个逻辑变量所有可能解可以用 n 个“ * ”表示( * 本身表示 0 或 1 )。这样一来,最初的可能解标识我们就用 * n * n-1 * n-2 …* 2 * 1 一个字来表示(这里的下标只是说明位置,计算中不写)。我们在消去子句的过程中,将这个可能解标志进行分组,最后就能够求出合取范式满足的所有解。 1. 基本思想 根据子句消去记数法,消去一个非恒一子句,合取范式可能解标志集中,消去子句的变量位置至少会有一个是其反码表示的可能解标识留下。例如,消去子句 x3+x5+x7’ ,那么 10 个变量的 3-CNF 的可能解标志组就变成了 7 个分组: B= { ***0*0*0** , ***0*0*1** , ***0*1*0** , ***1*0*0** ,***1*0*1** , ***1*1*0** , ***1*1*1** }。 集合 B 中 * 是 0 或 1 。 若再有子句 x3’+x5’+x7 ,则恰有 ***1*0*0** 被消去。则 B= { ***0*0*0** , ***0*0*1** , ***0*1*0** , ***1*0*1** , ***1*1*0** , ***1*1*1** } 若有变量落在 * 的位置,则因 * 即可是 0 ,亦可是 1 ,所以可将本组分解。 例如,若再消去 x3’+x5’+x10 知从上次剩余标标志组 B 中知,该子句的标识落在 ***0*0*0** 组中,被消去的为 1**0*0*0** ,将其消去,应剩 0**0*0*0** 。于是可能解变为: B= { 0**0*0*0** , ***0*0*1** , ***0*1*0** , ***1*0*1** , ***1*1*0** , ***1*1*1** }; 若再有子句 x3’+x7+x10’ ,但因该子句在标志组 ***1*1*0** 中,消去这个子句,故 B中***1*1*0** 变为1**1*1*0**。 如此继续,直至全部子句消去,从剩下的用 0 、 1 和 * 表示的可能解标志取反,就可以得到全部解! 2. 子句消去记数法分组定解算法 子句消去记数法分组定解算法如下: (0) 输入 k 阶合取范式; (1) 设立一个 n 位字,每位都是“ * ”的可能解标志集 B ; (2) 从头开始,逐一消去子句,恒一子句直接消去,若是非恒一子句,则依子句变量表达形式的采用拆分标志组,去掉相应标志组包含该子句的部分(若子句变量值正好与 B 的对应位相同,那么消去该组,不然从存在标志组中将其消去),获得剩余可能解标志组集合 B ; (3) 重复( 2 ),直至无子句或全部可能解标志组都被消去; (4) 若 B 标志完全被消去,说明此合取范式无满足解,不然各可能解标识的 0 、 1 位分别取反码, * 位分别选择 0 或 1 ,得到的 n 位二进制数都是原合取范式的解。 为了能够具体了解子句消去记数法分组定解算法,我们用例子加依解释。 3. 算法例题 例题 : 5 个逻辑变量的 3 阶合取范式 F=(x1’+x1+x3’)(x1’+x2’+x3’)(x2’+x3+x4)(x3+x4’+x5)(x1+x2+x3)(x2’+x4’+x5’) (x3’+x4’+x5’), 求满足 F=1 的解。 解:令 B= { ***** },因 (x1’+x1+x3’) 是恒一子句,直接消去。 消去 (x1’+x2’+x3’) ,则剩余 B= { **001 , **010 , **011 , **100 , **101 , **110 , **111 }; 再消去 (x2’+x3+x4) ,则因其标志在 **100 、 **101 中,消去 *110* ,剩, *0100 , *0101 ,于是 B= { **001 , **010 , **011 , *0100 , *0101 , **110 , **111 }; 再消去 (x3+x4’+x5) ,则因其标志在 *0100 、 *0101 、 **110 和 **111 中,则消去 101** ,剩 00110 、 01110 、 11110 、 00111 、 01111 、 11111 ,于是 B= { **001 , **010 , **011 , 00100 , 00101 , 00110 , 01110 , 11110 , 00111 , 01111 , 11111 }; 再消去 (x1+x2+x3) ,则因其标志在 00111 , 01111 , 11111 中,消去无剩余,得 B= { **001 , **010 , **011 , 00100 , 00101 , 00110 , 01110 , 11110 }; 再消去 (x2’+x4’+x5’) ,则先消去 00100 和 00101 ,则 B= { **001 , **010 , **011 , 00110 , 01110 , 11110 }; 然后在标志 **001 ,消去标志 00001 ,剩余 01001 、 10001 、 11001 ,则得 B= { 01001 、 10001 、 11001 , **010 , **011 , 00110 , 01110 , 11110 }; 再消去 (x3’+x4’+x5’) ,则在 **010 和 **011 中消去 00010 和 00011 ,得 B= { 01001 、 10001 、 11001 , 01010 , 10010 , 11010 , 01011 , 10011 , 11011 , 00110 , 01110 , 11110 }; 根据标志取反得解方法,得此合取范式共有 12 个向量解,分别是 B’ ={ 10110 , 01110 , 00110 , 10101 , 01101 , 00101 , 10100 , 01100 , 00100 , 11001 , 10001 , 00001 }。 4. 子句消去记数法 求解过程的多项式时间 对不起,多项式时间证明有修改,很快会登出。2015-8-11 5. 算法评价 子句消去记数法需要事先定义 2 n 个可能解标识,会被误认为是算法的一部分。用子句消去记数法分组定解算法,无需先定义全体可能解标识,只是设置一个用 * 组成的 n 位表示字,在以后的子句逐步消去过程中分裂出一些分组,最后得到全部确定解的标识。在求解的过程中不增加不必要的可能解存储空间,也节省了消去那些不是解标识的操作步骤,因而会较子句消去记数法提高了速度,实际执行缩短了一定时间。 特别声明 :此算法源自子句消去记数法,系本人独创,对用于商业市场行为保留追索发明权。 2015-7-27
个人分类: 科研论文|3358 次阅读|14 个评论
K-CNF-SAT人工子句消去计数法求解,兼答柳渝质疑
热度 2 accsys 2015-7-25 06:14
K-CNF-SAT 人工子句消去计数法求解 姜咏江 N 元变量的 k 个变量或其非组成的合取范式 k-CNF 的可能解有 2 N 个。依据子句消去记数法,只要消去子句的过程中有一个可能解的反码不为 0 ,那么这个可能解就被排除了。如此我们可以设定 2 N 个标志位,令其初值为 0 。当消去子句的变量按照自身为 1 ,反表示为 0 的原则,去掉可能解中对应位相同的标志,这样一次最多可排除 2 N-k 个可能解。这样最多经过 次,可以确定 k-CNF 的全部解或无解。 1. 设计解标志 例如, 5 个变量组成的 3 阶合取范式的可能解为 00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 01011 01100 01101 01110 01111 10000 10001 10010 10011 10100 10101 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 可以将 1 用变量表示, 0 用变量非(带下划线)表示,得到解标志: x5x4x3x2x1 , x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2x1 , x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3x2x1 , x5 x4 x3x2 x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3 x2x1 , x5 x4x3 x2 x1, x5 x4x3x2 x1 , x5 x4x3x2x1, x5 x4x3x2x1 , x5 x4x3x2 x1, x5 x4x3 x2 x1 , x5 x4x3 x2x1, x5 x4 x3 x2x1 , x5 x4 x3 x2 x1, x5 x4 x3x2 x1 , x5 x4 x3x2x1, x5x4 x3x2x1 , x5x4 x3x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2x1 , x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 2. 消去子句与可能解标志 随便找到一个不含恒一子句的 3 阶合取范式为例: (x1’+x2’+x3’)(x3+x4+x5’)(x2+x4’+x5)(x1’+x2’+x3)(x2’+x3’+x4)(x1’+x4’+x5) 第一个子句是 (x1’+x2’+x3’) ,那么在解标志中找到有 x3x2x1 的标志消去子句和这些标志,得剩余合取范式: (x3+x4+x5’)(x2+x4’+x5)(x1’+x2’+x3)(x2’+x3’+x4)(x1’+x4’+x5) 得可能解剩余标志: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2x1 , x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3x2 x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3 x2x1 , x5 x4x3 x2 x1, x5 x4x3x2 x1 , x5 x4x3x2x1, x5 x4x3x2 x1, x5 x4x3 x2 x1 , x5 x4x3 x2x1, x5 x4 x3 x2x1 , x5 x4 x3 x2 x1, x5 x4 x3x2 x1 , x5 x4 x3x2x1, x5x4 x3x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2x1 , x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 第二次,消去子句 (x3+x4+x5’) 和含有 x3x4 x5 的解标志,得 剩余合取范式: (x2+x4’+x5)(x1’+x2’+x3)(x2’+x3’+x4)(x1’+x4’+x5) 解标志: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2x1 , x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3x2 x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3x2 x1, x5 x4x3 x2 x1 , x5 x4x3 x2x1, x5 x4 x3 x2x1 , x5 x4 x3 x2 x1, x5 x4 x3x2 x1 , x5 x4 x3x2x1, x5x4 x3x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2x1 , x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 第三次,消去子句 (x2+x4’+x5) 和含有 x3 x4 x5 的解标志,得 剩余合取范式: (x1’+x2’+x3)(x2’+x3’+x4)(x1’+x4’+x5) 解标志: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2x1 , x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3x2 x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3x2 x1, x5 x4 x3 x2x1 , x5 x4 x3 x2 x1, x5x4 x3x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2x1 , x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 第四次,消去子句 (x1’+x2’+x3) 和含有 x1x2 x3 的解标志,得 剩余合取范式: (x2’+x3’+x4)(x1’+x4’+x5) 解标志: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3x2 x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3x2 x1, x5 x4 x3 x2 x1, x5x4 x3x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 第五次,消去子句 (x2’+x3’+x4) 和含有 x2x3 x4 的解标志,得 剩余合取范式: (x1’+x4’+x5) 解标志: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3x2 x1, x5 x4 x3 x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 第六次,消去子句 (x1’+x4’+x5) 和含有 x1x4 x5 的解标志,得 没有了剩余合取范式。剩余解标志为: x5x4x3x2 x1, x5x4x3 x2 x1 , x5x4x3 x2x1, x5x4 x3 x2 x1, x5x4 x3x2 x1 , x5x4 x3x2x1, x5 x4 x3 x2 x1 , x5 x4 x3 x2x1, x5 x4x3x2 x1, x5 x4 x3 x2 x1, x5x4 x3 x2 x1 , x5x4 x3 x2x1, x5x4x3 x2 x1, x5x4x3x2 x1 , x5x4x3x2x1 。 3. 如何确定所有解 通过子句的消去来消去那些不可能满足合取范式的解标志,总以一方没有剩余而结束。但消去的过程都是依据存在的子句进行的,而不是依据可能解标志一方。如果在操作的过程中,可能解标志集被清空,则最初的合取范式一定没有满足解。 本例的可能解标志剩余很多,这些剩余解标志的反码都是最初合取范式的解。例如有标志 x5x4x3 x2 x1, 那么有解 00010 ,即 x1=0,x2=1,x3=0x4=0x5=0 是所求解。 其他的解立即可以通过解标志取反都得到。 4. 可以更简单一些 如果你是一个熟悉从真值表如何抽象逻辑表达式的人,那么不用再去构造什么可能解标志了,而只要知道有多少个变量,就可以知道所谓的解标志,不过是一定位数的二进制数而已。例如已知 n=6 ,那么解标志集就是 000000 到 11111 的 2 6 = 64 个无效 0 要写的限位数而已。这个 2 n 个可能解标志集对任何的 k ≤ n 都适用。消去时,只要将 xi 的表示去找 n 位数对应的第 i 位是 1 , xi’ 对应的第 i 位是 0 ,就能把该消去的解标志消去了。 5. 解题时间的问题 子句消去记数法中不论何时,合取范式和可能解标志集都是已知的。因而不能够将合取范式的构造和可解标志集列入算法时间。 对于合取范式满足求解,可以通过穷举法进行,这无疑要将 2 n 个 n 位二进制数全部验证一遍,因而重复操作的次数是 2 n 。 对于子句消去记数法,我们不难看到,子句消去计数法的执行操作次数仅仅依据给出的合取范式。由于去掉恒一子句后,子句最多有 个,因而子句消去记数法的操作最多是 次。子句消去记数法会因为给出的子句数减少,而明显地减少操作次数,这一点穷举法是做不到的。显然子句消去记数法操作过程耗费的是所谓的多项式时间,这与可能解标志的数量多少无关。 是一个典型的多项式表达式,此表达式的值很可能有 2 n ,但从所谓的算法多项式时间来看,依据 来进行操作,就是多项式时间复杂度,而依据 2 n 来操作就是指数型时间复杂度,这中间的关节我们暂时不去研究。但就那所谓的传统的、被人们认可了的“多项式时间复杂度”来说,子句消去记数法的操作无疑是多项式时间。 2015-7-25
个人分类: 科研讨论|3299 次阅读|18 个评论
科学研究中的复杂与简单
热度 4 accsys 2015-7-24 21:36
科学研究中的复杂与简单 姜咏江 有一句话值得人们称赞,那就是“将复杂的问题弄简单了,那叫本事。将简单的问题说得复杂了,那叫蒙人。” 将复杂的问题能够用简单化的方法处理,这一直是科学工作者追求的目标。最近我将复杂的 n 元 k 阶合取范式的求解问题,彻底地简单化了一下,用子句消去记数法很容易就求出其全部解。按理这应该是值得大家称赞的工作成果,然而却有人公开说我是中学生的水平,是玩一种简单的概念,一文不值! 说实话,我认定 k-CNF-SAT 的求解问题就是一个初等数学加计算机设计理论与方法的问题,不需要微积分那种连续性,也没必要引入概率方法求解。这一信念通过子句消去记数法得到了证明。子句消去记数法是求解合取范式满足解适用的简单方法(见 http://blog.sciencenet.cn/blog-340399-907475.html 和 http://blog.sciencenet.cn/blog-340399-905817.html )。 这一方法虽然简单,然而其从夹缝中诞生,却不是件容易的事情。它几乎将我一生所学的知识都运用于研究的过程中,并不像有人见到我的求解方法之后,那样轻松地说这是中学生的智力。我真的不了解眼下的中国,一些战斗在研究领域的人是一种什么样的心态? 你说我的方法初级也好,简单也罢。你能不能拿出你更好的?如果你能够拿出来,那是你的本事,不然就对我的方法进行一下批判,说出它的错误、缺点,或者说说这早已是别人玩过的东西,岂不比在那里说些不负责任的嘲讽言语更叫人佩服你? 科学的计算方法应该是越简单越适用越好,而不是弄得复杂透顶。合取范式求解问题本身有简单的求解方法,只是人们对数学与计算机科学之间的相关关系还一时认识不清。所以才感到合取范式求解十分困难,以至于长时间不能够找到很好的解决方法。本人恰是计算机核心系统设计专家,深谙计算机理论与方法与数学之间的关系,故而能够想到用子句消去计数的方法,从而得到了简单的合取范式求解的方法。 众所周知,合取范式求解的问题所涉及的领域十分广泛,其中包括遗传算法、人工智能、计算机体系结构、并行计算、密码学、生产调度、优化理论等诸多学科。有人甚至夸张地说解决了 NPC 问题的多项式时间算法,就相当于解决了 NPC = P 问题,从而也就证明了 P=NP 这个千禧年美国克雷数学所公布的头号世界难题。甚至进而断言“世界上从此再无难题”。 我并不相信那些过于夸张的说法。我认为,世界上一切所谓的难题,都只不过人们尚未找到解决该问题的方法,特别是解决那些难题的简单方法而已。因而寻找难题的简单处理方法,应该是一切从事学术、科研人员的追求,是我们值得一生攀登的事情。 不论前人或其他人做得如何,我为我找到了求解合取范式的简单方法而自豪。虽然 P/NP 问题尚且不能够定论,然而我创造了简单求解合取范式的成果是以简单替代复杂的最好例子,我想这是任何人想否认它,也是难以做到的事情。 科学领域辛勤的劳动,往往收获就是那么意想不到的一点点。然而这一点点就值得我们终生奋斗。不论你是年轻,还是年迈! 愿一切复杂的问题,我们都能够找到简单的解决方法。 2015-7-24
个人分类: 随笔|3041 次阅读|11 个评论
Solution k-CNF-SAT by The Remove Clause Counting Method
accsys 2015-7-17 19:26
Solution k-CNF-SAT by The Remove Clause Counting Method Jiang Yongjiang Email: accsys@126.com Abstract : This paper presents a method for the remove clauses, which can be easily obtained from the total solution of k-CNF-SAT. This paper can prove NPC =P. Keywords : NPC, P/NP problem, Count clause removed 1. The Count Clause Removed Algorithm In this paper, we use the logical connectives are + (or),’ (not), and the (and) connective is omitted. We now give the following special algorithm of Count clause removed. (0) The establishment for n variables of one side symbols counter. like this x 1 ’x 2 ’x 3 ’…x n-1 ’ x n ’ ,…, x 1 x 2 x 3 …x n-1 x n plus 1. (2) Final we can find which counter is 0, then the name symbol is x i ,then x i =0. if is x i ’,then x i =1.So we can get all solutions of the k-CNF-SAT. (3) If non any counter is 0, the k-CNF cannot be equal to 1. Example : f ( x 1 ,..., x 6 )= ( x 1 + x 1 '+ x 2 ')( x 2 + x 3 + x 4 )( x 1 '+ x 3 '+ x 4 ')( x 1 '+ x 2 + x 5 ')( x 2 + x 3 + x 6 )( x 1 + x 5 + x 6 '),please find out the satisfiable solutions. Solution: (0) The counters are x 1 ’x 2 ’x 3 ’…x 5 ’x 6 ’ ,…, x 1 x 2 x 3 …x 5 x 6 , ( x 1 '+ x 3 '+ x 4 ') can be plus 1 in counters x 1 ’ …x 3 ’ x 4 ’… ,…, etc. (2) Check all of the clause and then look at the counters.If a counter’s value is 0, the oppsite counter’s name is the solution. For instance,the counter x 1 ’x 2 ’x 3 x 4 ’x 5 ’x 6 value is 0,then we have f (1,1,0,1,1, 0)=1. 2. Concepts and Properties Way can we get all the solutions of the k-CNF=1 by the Count clause removed algorithm ? Definition 1: if a clause has x and x’, then the clause is called a one-clause. Definition 2: If a clause has x and is not one-clause,then it is called x-clause. Definition 3: If we only have x or only have x’ the n variables word is called a One-side. We can know there is 2 n One-side. The counters are to record the number of clauses that are contained in One-side. Theorem 1: One-side of n variables in k-CNF for the highest number of related clauses is . Proof: becauseOne-side only have n variables, so get k ≤ n is . Thus we know the counter’s maximum value is . Definition 4: Remove clause ,that the one variable value is 1,it is called clause remove method in k-CNF. Obviously,clause remove n times if there is not any remain clause,The k-CNF=1, otherwise it will be 0. Theorem 2 : k-CNF, there is not any One-clause,if remove x-clause connot remove x’-clause. Proof: Because there is not any One-clause,so if we remove x-clause then we connot remove x’-clause. Theorem 3 : n variables k-CNF most have clauses, and One-clause maximum is . Definition 4: have clauses k-CNF is calld complete k-CNF. Corollary : Complete k-CNF value of constant is 0. Theorem 4 : Any One-clause is not in k-CNF and if one One-side is not there ,then the k-CNF=1. Proof : The x-clause contains all of the variables on one-side. If the one-side does not exist, it is determined that the opposite one-side remove thus there will not be any residual clause. 3. Conclusion The Count clause removed algorithm is easy and simple method to the k-CNF-SAT. It is in polynomial time problem solving the k-CNF-SAT problem,so we can conclude NPC=P. Original paper: http://blog.sciencenet.cn/blog-340399-905817.html 2015-7-17
个人分类: 科研论文|3337 次阅读|0 个评论
k-CNF-SAT子句消去计数法求解
热度 4 accsys 2015-7-16 12:05
k-CNF-SAT 子句消去计数法求解(正式发表) 姜咏江 Email:accsys@126.com 摘要 :给出子句消去计数法算法,该算法可以很容易求出 k-CNF-SAT 的全部解。证明了斯提芬 . 库克定义下的 NP C 问题 就是一个 P 类问题。 关键词 : NPC , P/NP 问题,子句消去计数法 1. 背景 P/NP 问题曾于 2000 年被美国克雷数学所定为最难的难题,有甚者说其挑战了人类智慧。 2010 年 8 月 6 日, HP LAB 的 Vinay Deolalikar 教授宣布证明了 P!=NP ,证明文章 已经发送到该问题各相关领域专家手中,等待检验,在他的主页上,证明过程已经公布( PDF 格式共 103 页)。 本文将给出 NP C 问题 k-CNF-SAT 就是一个 P 类问题的算法和相关证明,跟 Vinay Deolalikar 教授唱个反调,主张 P=NP ,是否会得到学术界认可,有待每个感兴趣的人检验。 2. 子句消 去 计数 法求解的算法 一个逻辑多项式如果存在一项的值是 1 ,那么这个逻辑多项式的值一定就是 1 。同样,一个逻辑项的存在为 0 的因子,那么这个逻辑项的值一定是 0 。逻辑变量非的值,一定是逻辑变量值的反码。逻辑运算的这些基本规律是子句消去法计数成立的基础。 本文用“ + ”表示或运算,用“ ’ ”表示非运算,与运算符号省略。 我们可以利用逐次消去 n 个变量或其非运算一方,通过 n 次消去,最终确定消去的变量取值是否是合取范式值为 1 的解。这叫子句消去法。用子句消去法进行改造,获得了下面的 子句消去计数法 。 用子句消去计数法求解 k-CNF-SAT 问题算法如下: (0) 设立 n 元单侧计数器: x 1 ’x 2 ’x 3 ’…x n-1 ’ x n ’ ,…, x 1 x 2 x 3 …x n-1 x n ,x 1 ’x 2 ’x 3 ’…x 5 ’x 6 ,共计 64 个。 ( 1 )去掉恒一子句 ( x 1 + x 1 '+ x 2 ') ,剩 ( x 2 + x 3 + x 4 )( x 1 '+ x 3 '+ x 4 ')( x 1 '+ x 2 + x 5 ')( x 2 + x 3 + x 6 )( x 1 + x 5 + x 6 ') ( 2 )剩下非恒一合取范式的第一子句使含 x 2 x 3 x 4 标识的计数器都加 1 ;第二子句使含 x 1 ' x 3 ' x 4 ' 标识的计数器都加 1 ;继续 5 次,查遍所有子句。 ( 3 )令为 0 计数器的变量取反码值即得解。例如,计数器 x 1 ’x 2 ’x 3 x 4 ’x 5 ’x 6 ,于是得 f ( x 1 ,..., x 6 ) 值为 1 的解有:( 110110 )。 ( 4 )一次性可以写出所有解。互为反码标识的计数器都为 0 ,则对应逻辑变量组合双方都是解。 验证 : 对于所得解可以带入原式验证。将 x 1 =1 、 x 2 =1 、 x 3 =0 、 x 4 =1 、 x 5 =1 、 x 6 =0 带入原式得: f (1,1,0,1,1, 0)=1 。 3. 概念与性质 为什么子句消去计数法就能够求出 k-CNF=1 的解?它的证明就在下面的概念和方法中。 定义 1 :如果子句中同时有逻辑变量和其反表示,则称子句为恒一子句。 显然,恒一子句的值总是 1 ,与逻辑变量的取值无关。 定义 2 :所有包含变量 x 的非恒一子句叫 x 相关子句。 定义 3 :我们将 n 对互反变量只取变量或变量非,得到的 n 个变量组合,叫一侧。显然, n 个变量的一侧有 2 n 个。 子句消去计数法的计数器就是记录一侧含有的子句数量的。 定理1 : n 个变量合取范式 k-CNF 中一侧 相关子句数最多为C n k。   证明 :因为一侧只有 n 个变量,从中取出 k 个为 C n k 。 此定理可以用来检查给定的合取范式是否不正确。如果给出的合取范式的一侧相关子句超过这个数,则可判定合取范式有错误。 定义 4 :将合取范式一个变量的值定为 1 的子句消去求解的方法,称为子句消去法。 显然,子句消去法经过 n 次消去,若没有剩余子句,则 k-CNF 是可满足的,反之不满足。 定理2 :非恒一子句全体,消去 x 相关子句中,一定不含有其反变量 x’ 。 证明 :因为非恒一子句 x 与 x’ 是不同时出现在一个子句,所以消去 x 相关子句, x’ 相关子句依然存在。 完全定理 : n 个逻辑变量所成的 k 元合取范式 k-CNF ,最多有C 2n k 个子句。非恒一子句最多有 C 2n k - n C 2n-2 k -2 个。 证明 :因为每个子句的元素可以是逻辑变量或它的非,这相当从 2n 个元素中取出 k 个的组合数,即为C 2n k 。而恒一子句最多有 n C 2n-2 k -2 个,所以非恒一子句最多有 C 2n k - n C 2n-2 k -2 个。 推论 :完全合取范式的值恒为 0 。 因为完全合取范式包含 x 与 x’ 的所有相关子句。所以用子句消去法无论经过怎样的 n 次消去子句,都不能使剩余没有子句。 可满足定理 :若非恒一子句中互反变量有一侧相关子句不存在,则 k-CNF-SAT 可满足 。 证明 :因为 x 的相关子句全体包含一侧所有的 n 个变量或其非,如果 一侧不存在,则可确定其相反一侧变量逐一消去,依据定理 2 可知最终没有剩余子句。 满足定理是我们进行 k-CNF-SAT 求解子句消去计数算法正确性的依据。 步数定理 :用子句消去计数法确定 k-CNF 可满足全部解,最多用了 C 2n k 次检查。 因为子句数不超过 C 2n k ,得证。 步数定理告诉我们,上面介绍的求解算法是一个多项式时间算法。 4. 结论 一般 P/NP 问题的描述与斯提芬 . 库克的 NP 、 NPC 定义有不同之处。本文仅是站在伟大的库克的肩膀上,用子句消去计数法原理,找出了 k-CNF-SAT 问题解的算法。 斯提芬 . 库克一脉学术观点认为:若任意 NPC 问题可证明是 P 问题,那么 P=NP 成立。本文给出了 k-CNF-SAT 问题一侧相关计数求解算法,是典型所谓的“多项式时间”,故可以得出在 斯提芬 . 库克定义的条件下,可以有 NPC = P ,这个结论否定了 P ! =NP 。 请看: http://blog.sciencenet.cn/blog-340399-928224.html (本论文系首创,引用请注明出处) 2015-7-16
个人分类: 科研论文|5462 次阅读|32 个评论
答柳渝对消去法求解k-CNF-SAT的质疑
热度 1 accsys 2015-7-2 08:02
答柳渝对消去法求解k-CNF-SAT的质疑 姜咏江 数学和计算机本身都是实实在在的东西,一定要在肯定概念的前提下来讨论问题。下面这段话是从 Introduction To Algorithms 第三版的中文译本抄录下来的,不知你是否认可? 就以我在博文中所举例的逻辑函数为例: f(x 1 ,x 2 ,x 3 ) = (x 1 +x 1 ’) (x 2 +x 2 ’) (x 3 +x 2 ’) (x 1 +x 2 ) (x 1 +x 3 ) (x 2 +x 3 ) (x 1 ’+x 2 ’) (x 1 ’+x 3 ’) (x 2 ’+x 3 ’) (x 1 ’+x 2 ) (x 1 ’+x 3 ) (x 1 +x 2 ’) (x 2 ’+x 3 ) (x 1 +x 3 ’) (x 2 +x 3 ’). 这个函数是不会有 f (x 1 ,x 2 ,x 3 ) = 1 的解。由变量的 对称性 ,可知有两个变量的子句只要我们用消去因子法,分别设定 00 , 01 , 11 ,这三个值,就可以断定 2-CNF 是否是可以满足,而无需考察更多。如果 k-CNF 的 k=5 ,那么只需考察 00000 , 00001 , 00011 , 00111 , 01111 , 11111 这些值就知道了。 注意,由对称性可知, k-CNF-SAT 问题无需考察 n 元 0 或 1 的向量,只需考察 k 元即可( k ≤ n )。考察总数不会超过 k+1 ,而不用考察 2 n 个 n 元 0 或 1 的向量。 下面的消去法求解可以告诉我们结果(不是高斯消去法)。 x1=1, 得 (x 2 +x 2 ’) (x 3 +x 2 ’) (x 2 +x 3 ) (x 1 ’+x 2 ’) (x 1 ’+x 3 ’) (x 2 ’+x 3 ’) (x 1 ’+x 2 ) (x 1 ’+x 3 ) (x 2 ’+x 3 ) (x 2 +x 3 ’). x2=1, 再得 (x 3 +x 2 ’) (x 1 ’+x 2 ’) (x 1 ’+x 3 ’) (x 2 ’+x 3 ’) (x 1 ’+x 3 ) (x 2 ’+x 3 ) =0 x1=0, 得 (x 2 +x 2 ’) (x 3 +x 2 ’) (x 1 +x 2 ) (x 1 +x 3 ) (x 2 +x 3 ) (x 2 ’+x 3 ’) (x 1 +x 2 ’) (x 2 ’+x 3 ) (x 1 +x 3 ’) (x 2 +x 3 ’). x2=0, 再得 (x 1 +x 2 ) (x 1 +x 3 ) (x 2 +x 3 ) (x 1 +x 3 ’) (x 2 +x 3 ’) =0 x1=0, 得 (x 2 +x 2 ’) (x 3 +x 2 ’) (x 1 +x 2 ) (x 1 +x 3 ) (x 2 +x 3 ) (x 2 ’+x 3 ’) (x 1 +x 2 ’) (x 2 ’+x 3 ) (x 1 +x 3 ’) (x 2 +x 3 ’). x2=1, 再得 (x 3 +x 2 ’) (x 1 +x 3 ) (x 2 ’+x 3 ’) (x 1 +x 2 ’) (x 2 ’+x 3 ) (x 1 +x 3 ’) =0 从蓝颜色子句可见原式无满足解。 象本例这种 k-CNF 表达式,被我称为“完全 k-CNF ”表达式,而 k-CNF 表达式子句的数量不到 C 2n k 个,我们称为非完全 k-CNF 表达式。完全 k-CNF是不会有解满足 f (x 1 ,x 2 ,…,x n ) = 1 的。只有“残缺的” k-CNF 表达式 k元解向量才有可能使 f (x 1 ,x 2 ,…,x n ) = 1 。 再与你简单谈谈实际如何更快地验证一个 k 位二进制表示的数会不会是 k-CNF-SAT 的解吧。依据逻辑表达式消去法原理,做起来非常简单。我们就用一个 k=3 元子句为例说明一下。 假设我们要检查 x1=1 , x2=0 , x3=1 是不是 3-CNF-SAT 满足的,只要我们看看表达式中是否有形如 x+y’+z 的子句,还要检查相同变量的 x’+y+z’ 形子句,如果两者都出现,一定是不满足的。如果两形子句皆无,说明其与函数无关。 形如 x+y’+z 子句和对应的 x’+y+z’ 形子句,我们称之为“互反子句”。互反子句出现一定不满足。其它情况可以用消去因子法验证。 例如 f (x 1 ,..., x 6 )= (x1+x1'+x2')(x2+x3+x4)(x1'+x3'+x4')(x1'+x2+x5')(x2+x3+x6)(x1+x5+x6') 中,只有 (x1'+x2+x5') 没有 (x1+x2'+x5) ,那么可以肯定说明 x1=0 , x2=1 , x5=0 不一定 是不满足的。用消去法将值为 1 的子句逐一消去: 令 x1=0, 得 (x2+x3+x4) (x2+x3+x6)(x1+x5+x6') 再令 x2=1, 得 (x1+x5+x6') 最后若 x5=0 ,可设x6=0,得 f (x 1 ,..., x 6 )=1 。说明有 x1=0 , x2=1 , x6=0是满足的。 不知你是否实际设计过逻辑电路?如果设计过,一定清楚:值为 1 ,用逻辑变量表示;而值为 0 时,要用逻辑变量的非来表示的。按照这种逻辑表达式抽象的表示方法,确定 k 位二进制数是否是 k-CNF-SAT 满足的,只要查看是否有相应表达形式的子句,再看看有无对应的反子句,就可以做出判断是否需要验证的决定。 要谈的问题很多,以上所谈,严格的定义与证明我会另文给出。根据我的经验,搞学术研究万不可以落入俗套,否则会庸扰自己难以自拔。解决的办法就是用实例检验,深入进去,常会有一新的感觉。我虽然涉猎 P/NP 问题较晚,但数学与计算机却是我的老本行,深浅程度讨论中自见分晓,切莫以非专业视吾,耽误了我们之间非常有意义的探讨。 这里所谈只是部分理解,不对之处欢迎再次批驳。 2015-7-2
个人分类: 科研讨论|3586 次阅读|2 个评论
谁说P≠NP?中国人的智力要让世界震惊!
热度 3 accsys 2015-7-1 07:52
谁说 P ≠ NP ? 姜咏江 据说世界头号难题 P/NP 问题,最后落实到 NPC 问题是否是 P 问题上?依据斯提芬 . 库克的理论,又落实到 3-CNF-SAT 这个 NPC 问题是否是 P 问题上。直至今日,世界上尚未见到有人能够明确地指出 3-CNF-SAT 是否是 P 问题。 本文作者经过较长时间的研究,对NPC问题 k-CNF-SAT 创造性地提出了消去法求解的简捷方法(见 http://blog.sciencenet.cn/blog-340399-901277.html ),并指出 k 阶合取范式 f ( x 1 ,…, x n ) 的子句最多数量,从而可以明确地证明 k-CNF-SAT 求解的时间复杂度是一个多项式时间 O( n k ) 。这就简单地证明了 P=NP ! 下面就是通俗简单的证明。 1. k-CNF-SAT的 子句最多有 C 2n k 个 n 个逻辑变量所成的 k 阶合取范式最多有多少个子句?在合取范式子句中仅可以出现变量与其非的表示。我们将逻辑变量和这个变量的非分别用 x 与 x’ 表示,那么 n 个逻辑变量所成的 k 阶合取范式子句数,就是从 2n 个元素中取出 k 个的组合数 C 2 n k 。 例如, n=3 , k=2 时的合取范式 2-CNF-SAT 子句最多有 C 2 n k =15: f ( x 1 , x 2 , x 3 )= ( x 1 + x 1 ’) ( x 2 + x 2 ’) ( x 3 + x 2 ’) ( x 1 + x 2 ) ( x 1 + x 3 ) ( x 2 + x 3 ) ( x 1 ’+ x 2 ’) ( x 1 ’+ x 3 ’) ( x 2 ’+ x 3 ’) ( x 1 ’+ x 2 ) ( x 1 ’+ x 3 ) ( x 1 + x 2 ’) ( x 2 ’+ x 3 ) ( x 1 + x 3 ’) ( x 2 + x 3 ’). 2. 消去法求解 k-CNF-SAT 的时间复杂度为 O( n k ) 由于 k-CNF-SAT 子句最多有 C 2n k 个,所以用消去法确定 f ( x 1 ,…, x n )=1 的解,每次操作至少消去 1 个子句。因而,求解过程最多操作不超过 C 2n k 次,而 C 2n k =2n (2n-1)…(2n-k+1)/k!,这 是一个 k 次多项式。于是按照所谓的算法时间复杂度的大 O 表示法,求解合取范式 k-CNF-SAT 的 f ( x 1 ,…, x n )=1 的解是一个多项式时间,即可以用 O( n k ) 来表示。 友情提示:引用请注明出处(盗用必究)。Email: accsys@126.com 2015-7-1
个人分类: 科研论文|4781 次阅读|7 个评论

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

GMT+8, 2024-5-19 16:30

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部