科学网

 找回密码
  注册

tag 标签: SAT问题

相关帖子

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

没有相关内容

相关日志

P与NP问题最终解决就在2017年
热度 4 accsys 2017-2-8 08:23
姜咏江 我有充分的把握断定2017年将是计算机科学P与NP难题最终获得解决的一年。中国的学者多数人都主张P=NP,我认为这是正确的结论。用自信和勇气打破自卑,会让我们在科学发展的道路上充分展现中华民族的才华。 我孤陋寡闻,仅知道姜新文、杜立智、田文洪、崔鹏和我主张P=NP。我虽然没有读过他们的论文,但却相信他们的主张是对的,因为我经过自己深入地研究,通过子句消去法求解SAT问题,最终证实了SAT可以在多项式时间内求解。论文《Mathematical Theory of Clause Elimination Algorithm for SAT》已经于2017年1月中旬放到了arXiv上,编号1769278。我确信这篇论文正确性,因为我解决了SAT问题5个层次的问题。这5个层次的问题是:第一, k阶子句块什么情况下无解? 第二, 什么情况下变量在子句块中有唯一解? 第三, 不同子句块中的同一个变量什么情况下无解? 第四, 变量的值不是0就是1,可以选择哪个? 第五, 每个变量都有两个可选解,如何选择变量值 ?( http://blog.sciencenet.cn/blog-340399-1031805.html )这5个层次是破解SAT问题的精髓,余下的问题就是要研究如何能够寻找特别的简化的方法。 传统的观点认为,如果NP-completed的任何一个问题有多项式时间复杂度的算法,那么就可以得出结论P=NP。既然中国的学者有很多一致的主张,为什么我们不能一起公开信心十足地进行讨论? P与NP不仅涉及理论,而且涉及实践的诸多方面。重视这个问题,我们将获得极大的进步。我相信2017年就是世界公认的P/NP问题解决之年。
个人分类: 科研论文|4120 次阅读|6 个评论
SAT问题子句消去法快速求解 —— 摘要
热度 1 accsys 2016-12-31 11:26
姜咏江1,陈跃2 (1. 对外经济贸易大学离退休处,北京朝阳,100013; 2. 西安交通大学,陕西西安,710000) 摘 要 :布尔可满足性问题(SAT)是最基本的NPC问题,直接涉及到集成电路设计优化、生物 基因、人工智能、互联网等诸多领域的快速计算。给出了一种子句消去法,运用限位数、子句 块和关联段等概念,探索出了用确定法则快速求出SAT满足解的计算方法,为纯离散变量计算 找到了一种新途径。 关键词 :SAT问题;限位数;子句消去法;子句块;关联段;多项式时间复杂度 注:此为发表在《工业技术创新》2016年 12月 第03卷 第06期
个人分类: SAT问题|2836 次阅读|1 个评论
我应不应该去踢美国克雷数学研究所的门?
热度 2 accsys 2016-12-20 10:48
姜咏江 美国克雷数学研究所千禧年悬赏百万美元,征求 P/NP 问题解答。我用我的限位数理论和子句消去法,两年多时间找到了 SAT 问题的多项式时间求解算法,从而使 NPC=P 了,进而也就将 P=NP 这个问题解决了。我是不是应该在圣诞节之前去踢克雷数学所的门?
个人分类: 随笔|3032 次阅读|4 个评论
限位数——一个人们不曾研究的领域
accsys 2016-12-19 09:03
姜咏江 什么是限位数?就是数码位数一定的数。以往人们并没有注意对限位数的研究,是因为人们极少用到它。现在人们用电脑了,用电脑要解决问题,在设计上就不得不考虑位数一定的数,而且要考虑怎样用位数一定的数来表达实数。当然这个问题首先是计算机设计专家碰到的问题。在计算机中只有不带符号的二进制整数,而且是限定了位数的 32 位、 64 位或 128 位等。人们不可能造出位数无限长的计算机,因而用限位数来表示和运算来解决实数的运算问题,是首先要解决的问题。实际上这个问题已经基本上解决了。解决最彻底是我在十多年前完成的限位数理论和方法,在计算机算术运算器的设计中有着根本性的作用。不管人们是否认可,它就放在那里。 这两年多,我研究 SAT 问题多项式时间复杂度算法,对限位数的使用又有了新的发现。如果把过去研究限位数看作只是一维的研究方法,那么针对 SAT 问题,已经进入了二维空间的研究。毫无疑问,这种研究为破解难题 SAT 问题,找到了坚实的理论基础,为那些需要整体结构分析才能够解决的难题,打开了一扇大门。 关于限位数在数值计算当中的基本原理,我在《自己设计制作 CPU 与单片机》一书中已经介绍。对于限位数二维空间的特点,本文就做一点简单的介绍,目的是让人们能够理解 SAT 问题如何利用子句消去法完成计算求解。 为了简单,仅就二进制限位数的一些基本性质述说。 k 位二进制数最多有 2 k 个,叫全块。 k 位二进制数全体,每位 0 和 1 都有 2 k-1 个。 将数码 0 和 1 互换得到的数叫反码数。每一个限位数都有唯一反码数。 反码数之间每位数码都不同,非反码数之间至少有一位数码相同。 限位数在子句消去法中的应用: SAT 问题可以用 0 和 1 表示成一张表。表中的每一行就是一个限位数,叫子句。 x 1 x 2 x 3 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 如果我们将变量的值设定为 0 ,那么这一列每个为 0 的子句的值就是 1 。按照逻辑运算的法则,就不影响对其余子句是否值为 1 的判断,因而可以消去。上表是全块,不论如何设定变量的值,都不可能让全部子句值为 1 ,一定会有子句剩下。显然,不是全块,就可能设定变量值将全部子句消去。 只要非全块中有一个变量有2 k-1 个0或1,那么这个变量就有唯一解。 用这种全局结构的判断就可以逐步地求出 SAT 的解,而无需考虑多次猜测性的重来。 当变量同时在不同的子句块中出现时,要比单一子句块复杂,但用上面限位数的性质,就可以找到那些只有唯一值的变量,通过这些变量的值确定,最终可达到求出 SAT 的解。当然,如果 SAT 本身就无解,子句消去法在求解的过程中,可发现无解的全块和有唯一解的矛盾的情况。 二维的限位数值得我们深入地进行研究。目前在解决 SAT 问题满足解中只是露出了头角而已。 2016-12-19
个人分类: 离散数学|2400 次阅读|1 个评论
SAT问题基本定义和术语
accsys 2016-12-17 08:30
Basicdefinitionsandterminology A propositionallogic formula ,alsocalled Booleanexpression ,isbuiltfrom variables ,operatorsAND( conjunction ,alsodenotedby∧),OR( disjunction ,∨),NOT( negation ,),andparentheses.Aformulaissaidtobe satisfiable ifitcanbemadeTRUEbyassigningappropriate logicalvalues (i.e.TRUE,FALSE)toitsvariables.The Booleansatisfiabilityproblem ( SAT )is,givenaformula,tocheckwhetheritissatisfiable.This decisionproblem isofcentralimportanceinvariousareasof computerscience ,including theoreticalcomputerscience , complexitytheory , algorithmics , cryptography and artificialintelligence . 命题逻辑公式(也称为布尔表达式),由变量、与运算符 ∧ 、或运算符 ∨ 、非运算符 和括号组成。设定适当的逻辑变量值使逻辑表达式的值为真,就说逻辑表达式是能够满足的。布尔可满足性问题(SAT)就是检查逻辑表达式是否是可满足的。这个判定问题是计算机科学,包括计算机理论、复杂性理论、算法、密码学和人工智能众多领域的核心重要问题。 ThereareseveralspecialcasesoftheBooleansatisfiabilityprobleminwhichtheformulasarerequiredtohaveaparticularstructure.A literal iseitheravariable,thencalled positiveliteral ,orthenegationofavariable,thencalled negativeliteral .A clause isadisjunctionofliterals(orasingleliteral).Aclauseiscalled Horn clause ifitcontainsatmostonepositiveliteral.Aformulaisin conjunctivenormalform ( CNF )ifitisaconjunctionofclauses(orasingleclause).Forexample, x 1 isapositiveliteral, x 2 isanegativeliteral, x 1 ∨ x 2 isaclause,and( x 1 ∨ x 2 )∧( x 1 ∨ x 2 ∨ x 3 )∧ x 1 isaformulainconjunctivenormalform,its1stand3rdclauseareHornclauses,butits2ndclauseisnot.Theformulaissatisfiable,choosing x 1 =FALSE, x 2 =FALSE,and x 3 arbitrarily,since(FALSE∨FALSE)∧(FALSE∨FALSE∨ x 3 )∧FALSEevaluatesto(FALSE∨TRUE)∧(TRUE∨FALSE∨ x 3 )∧TRUE,andinturntoTRUE∧TRUE∧TRUE(i.e.toTRUE).Incontrast,theCNFformula a ∧ a ,consistingoftwoclausesofoneliteral,isunsatisfiable,sincefor a =TRUEand a =FALSEitevaluatestoTRUE∧TRUE(i.e.toFALSE)andFALSE∧FALSE(i.e.againtoFALSE),respectively. 一些具体情况下,布尔满足性问题表达式要求有特定的结构。逻辑变量叫正文字,它的非运算形式叫反文字,子句是它们的或运算形式(包括一个文字)。最多有一个正文字的子句叫强子句。子句进行与运算的表达式叫合取范式(CNF)。例如, x 1 是正文字, x 2 是反文字, x 1 ∨ x 2 就是一个子句。而( x 1 ∨ x 2 )∧( x 1 ∨ x 2 ∨ x 3 )∧ x 1 是合取范式。此式的第一和第三子句是强子句,第二个子句不是。选择 x 1 =假, x 2 =假, x 3 任意,从(假∨假)∧(假∨假∨ x 3 )∧假,得出(假∨真)∧(真∨假∨ x 3 )∧真,子句值运算为真∧真∧真(即结果为真)。 批注:真够啰嗦的!
个人分类: 生活点滴|3699 次阅读|0 个评论
将复杂问题弄简单了方显出科学人的本事
热度 4 accsys 2016-12-5 07:15
P与NP问题说简单了,就是将复杂问题如何弄成简单的问题。不是自吹,我用两年多点的时间,找到了SAT问题快速求解的子句消去法,将不确定的猜测验证方法彻底抛弃了。这也检验了自己科学研究的能力。什么世界难题?只要你找到了它的特有规律,再复杂的问题也会变得简单。请看我的博文 http://blog.sciencenet.cn/blog-340399-1018554.html ,是不是吹牛?立见分晓。
个人分类: SAT问题|2454 次阅读|11 个评论
振奋!每个华人一看就会做这个世界难题
热度 2 accsys 2016-12-4 08:51
振奋!每个华人一看就会做这个世界难题 将若干个逻辑变量及其非的形式“或运算”组成的表达式,再进行“与运算”,这些变量都取什么值会使结果为“真”?这就是所谓的世界难题 SAT 。 以往 SAT 问题没有快速求解方法,上百个变量,即使用计算机也无法在短时间内求出能够成立的满足解。下面介绍的子句消去法只要你熟悉汉字,会做算术题,就能快速地计算出SAT问题的满足解! 1. 用 0 和 1 表示题目 CNF=( 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 3 + x 4 ’)( x 1 ’+ x 3 + x 4 )( x 3 ’+ x 4 ’+ x 6 )( x 3 + x 5 ’+ x 6 ’)( x 3 ’+ x 5 ’+ x 6 + x 10 )( x 3 + x 5 + x 6 + x 10 )( x 6 + x 7 + x 8 ’)( x 6 + x 7 ’+ x 8 )( x 6 ’+ x 7 + x 8 ’)( x 8 ’+ x 9 )( x 8 + x 9 )( x 10 ’) CNF 是 SAT 题目,“ + ”是或运算符号,“ ’ ”是变量非运算符,与运算符省略。用“ 1 ” 表示 x ,用“ 0 ” 表示 x ’ , CNF 就可以用表 1 来表示。 表 1 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 2. 子句块和变量唯一解 CNF 每个括号内的多项式叫 子句 。变量相同的子句称为 子句块 。有 k 个变量的子句块叫 k 阶子句块。 k 阶子句块最多能有 2 k 个子句,这个子句块称为 完全块 。 判定无解 :有完全块的 CNF 一定没有结果为“真”的解! 判定变量唯一解 : k 阶非完全块有 2 k-1 个“ 0 ”或“ 1 ”,它就是这个变量的唯一解。 3. 解题方法 (1) 消去变量唯一解子句 首先检查变量唯一解, 有则设定这个变量值,消去这个变量有这个值的子句。如表 1 中二阶子句块 x8x9 和一阶子句块 x10 都有变量唯一解,所以设定 x9=1,x10=0 ,然后消去相关子句。结果见表 2 。 表 2 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 (2) 找出变量唯一可选解 逻辑变量只能取值 0 和 1 。如果一个变量不论取值 0 还是 1 ,消去相关子句都会剩下完全块或矛盾值,那么就知道 CNF 没有“真”值解。如果只有一个值使剩下的是完全块或矛盾值,那么就可以取这个变量的另外一个值,消去相关子句(两个值都剩下非完全块,暂时不设定这个变量值)。例如 x1=1 会剩下完全块相互矛盾(见表 3 )。 表 3 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 当测试 x1=1 消去相关子句时,出现了完全块冲突(黄色),因而 x1=1 不是可选解。如果选定 x1=0 消去相关子句,如表 4 所示,没有完全子句块及变量唯一解矛盾。因而可以设定 0 是 x1 的值,消去相关子句后继续求解。 注意 : 0 和 1 都不是变量可选解,那么 CNF 没有“真”值解! 表 4 0 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 1 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 (3) 只看关联变量可选解 确定变量可选解不必全做,只要看同属于不同子句块的变量就可以 。非完全块不是关联变量一律有 2 个可选解(可证明)。 检测表 4 的关联变量 x3 和 x6 的可选解,知道 0 和 1 都是。 (4) 任选变量值消去变量唯一解相关子句 剩下的变量都有两个可选解的时侯,有定理保证一定有解。这样就可以任意确定一个变量值,消去相关子句,再确定变量唯一解,消去相关子句。重复操作,直至没有剩余子句,最终就求出了 CNF 结果为“真”的满足解了。表 5 至表 8 表示了操作过程。 表 5 选择 x6=1 消去子句 0 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 1 0 1 1 1 0 1 0 0 0 1 0 表 6 选择 x3=1 消去子句 0 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 1 1 0 0 1 0 表 7 选择 x2=1 消去子句 0 1 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 1 0 表 8 选择 x7=1 消去子句 0 1 1 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 (5) 验算 对于子句消去法计算得到的全体变量值是否是 CNF=1 的解,是可以验证的。一种办法是将每个变量求出的值(空白可以任意取值 0 或 1 ),代入 CNF 的逻辑表达式,检验最终结果是否是 CNF=1 。 介绍一个简单的验证方法,即将所求解值置入原题(表 1 )的上面,检验每一行是否有与其变量值相同的子句表现值。若有,则将子句消去,若最终没有子句剩下,就说明得到的解完全正确。 本题如果 x 7 不选,令 x 8 =0 ,也可将全部子句消去,从而完成解的验证。 表 9 验证 CNF=1 的满足解 0 1 1 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 4. 华人不聪明吗? 说华人不聪明是一种偏见。这个世界难题如此简单就解决了,是不是聪明智慧的表现? 据说 SAT 问题找到多项式时间复杂度算法就解决了 PversusNP 问题。 P=NP 。 方法是简单的,理论是深刻的。 给一个100个逻辑变量的SAT题,大家可以试试。 3SAT100.xls (答案在下面附件)。 复件3SAT100.xls 参阅: http://blog.sciencenet.cn/blog-340399-1009188.html http://blog.sciencenet.cn/blog-340399-1011907.html
个人分类: SAT问题|2859 次阅读|10 个评论
千禧难题P与NP问题(科普2)
accsys 2016-11-19 13:42
千禧难题 P 与 NP 问题(科普 2 ) 姜咏江 2.SAT 问题求解方法 P 与 NP 问题之所以能够称为世界难题,这是因为这个问题最早要追溯到上个世纪 50 年代,数学家 库尔特 · 哥德尔向计算机发明人之一冯诺依曼的提出了这个问题。 1971 年斯提芬 . 库克给出了 NP 类问题的定义,之后被学术界接受。现在已经有很多问题被证明了是 NP 问题,但是一直没有人能够确切证明 NP 问题就是 P 问题,或者 NP 问题不可能是 P 问题。其实,推翻一个证明的最好方法,就是找到一个反例。 世界各国的数学家和计算机专家都没有停止过寻找 NP 类问题是 P 类问题的例子。我是一个主张 NP=P 的人,因为我找到了 SAT 这个基本的 NP 类的多项式时间计算方法——子句消去法。 2.1SAT 问题的概念 什么是 SAT 问题?“若干个逻辑变量和变量非形式组成的多项式,求它们与运算结果为真的解问题”就是 SAT 。这种逻辑运算式叫合取范式(用 CNF 记),每个因子多项式叫子句,单一变量的逻辑项被称为文字。例如 合取范式 CNF=( 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 3 + x 4 ’)( x 1 ’+ x 3 + x ’)( x 3 ’+ x 4 ’+ x 6 ) ( x 3 + x 5 ’+ x 6 ’)( x 3 ’+ x 5 ’+ x 6 + x 10 )( x 3 + x 5 + x ’+ x 10 )( x 6 + x 7 + x 8 ’)( x 6 + x 7 ’+ x 8 )( x 6 ’+ x 7 + x 8 ’)( x 8 ’+ x 9 ) ( x 8 + x 9 )( x 10 ’) 。 求使这个逻辑表达式 CNF=1 时的 10 个逻辑变量值,这就是 SAT 问题。 合取范式 CNF 可以用数码“ 0 ”和“ 1 ”来表示。上面这 16 子句用 0 和1 表达出来,就如 表 1 所示, 1 代表变量本身, 0 表示变量的非形式。 表 1CNF 的 0 和 1 表示 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0               0 1 0               1 0 1               1 1 0               0   1 0             0   1 1                 0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0                   0 1                 1 1                     0 表 1 的表头是逻辑变量,每一行是一个子句。每列的 0 和 1 叫表头逻辑变量的表现值(文字)。求 CNF=1 的解写在表头的上面。 表 1 中相同变量组成的子句叫子句块。具有共同变量,但变量不完全相同的子句块间称为关联子句块。通过关联子句块连接在一起的全部子句块叫关联段。关联段和关联段之间没有共同的变量。 表 1 的全部子句块组成了一个关联段。 2.2 限位数理论 长时间人们对 SAT 问题没有有效地求解方法,这是因为没有找到 CNF 特有的内在结构特点。虽然许多人也将 SAT 问题用二进制数码表示,但没有新的理论支撑,也未曾找到解决的办法。 限位数是用一定位数的数码排列得到的数,它与普通数不同是无效 0 不能省略。限位数理论是机器算术运算设计的基础理论,又是解决纯离散数学计算的基础。 k 位二进制限位数共有 2 k 个,其值由 0 直排到 2 k -1 。如果 k 位二进制数超过了 2 k 个,那么就一定出现了重复的数。 表 2 列出的是 3 位二进制限位数,共有 2 3 个。 从 表 2 容易理解,全部的 k 位二进制限位数纵向排列,每一列 0 和 1 的数量都是 2 k-1 个。如果将一列的 0 或 1 的行都去掉,不考虑消去的那一列,那么剩下的那些行,就一定是 k-1 位的所有二进制数。这一特点就成为了子句消去法判断变量唯一解和 CNF=1 无解的依据。 两个数码相加结果是最大数码,称它们是互为反码。一个 k 位二进数的每个数码用其反码替换,得到的数叫原来数的反码数。每个表示子句的数都有唯一一个反码数。由表 2 不难理解这个结论。 表 2 三位二进制限位数 x 1 x 2 x 3 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 2.3 子句消去法 CNF 的子句中如果有一个文字的值是“真”,那么这个子句的值就是“真”。要求整个 CNF 的结果是“真”,必须全部子句的值都是“真”。根据这一原理,只要子句中有一个文字 x ,我们就设 x 为“真”,那么子句的值就是“真”,子句中有一个文字为 x’ ,就可以设 x 为“假”,同样会让这个子句的值是“真”。在求 CNF 结果是“真”的时侯,用这种方法将子句设定为“真”之后一一去掉,只要变量不重复设值,最后全部子句都去掉了,那么设定的那些值就是使 CNF 为“真”的解,不然就不是使 CNF 为“真”的解。 上面的这种做法并不能保证每次设定的全部变量值是 CNF=1 的解。能不能有确定的方法让每次设定的变量值都是 CNF=1 的那些值?姜咏江发明的子句消去法解决了这个问题。 由表 2 所示子句的 0 和 1 表示方法可以知道,如果一个子句块的所有子句都存在,那么不论我们如何设定变量的值,都不可能将全部子句消去。这种情况只要看一个变量的 0 和 1 的数量就可以判断。如果 k 个变量的子句块有一个变量有 2 k-1 个 0 ,同时还有 2 k-1 个 1 ,那么肯定这个变量不论设定 0 还是 1 ,都不可能使这个子句块的全部子句值为 1 。由于子句之间是与运算的关系,所以 CNF 中至少有一个子句的值是 0 ,那么合取范式 CNF 的值一定是 0 ,也就是 CNF=1 无解。 我们把 k 个变量的子句全存在的子句块叫完全子句块。进一步分析可知,完全子句块用设定变量值的方法,不可能将它的全部子句消去,因而 CNF 的值必定是 0 。如果我们在设定变量值的时候能够避开出现完全子句块,你就会找到满足 CNF=1 的解。 在设定变量值的时候,能不能避开完全子句块呢?这一点我们现在可以做到了。根据前面的限位数理论,如果一个 k 个变量的子句块中,有一个变量有 2 k-1 个相同的 0 (或 1 ),而不同时有 2 k-1 个相同的 1 (或 0 ),那么设定这个值,消去子句,就不会有 k-1 个变量的剩下完全子句块,即设定这个变量值就不会使 CNF=1 无解。这种情况下的变量称为有唯一解。 规则 1 :子句块变量有唯一解必须首先设定。 表 1 中的子句块 x 10 和子句块 x 8 x 9 就属于规则 1 的情况。设定 x 10 =0 , x 9 =1 ,然后消去值为 1 的子句,得到表 3 。 表 3 设定唯一解消去子句 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0               0 1 0               1 0 1               1 1 0               0   1 0             0   1 1                 0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0     表 3 中剩下的子句块中没有唯一解的变量了。剩下的子句块形成了一个关联段。由于每个逻辑变量都只能取值 0 或 1 ,我们不妨设定 0 或 1 ,看看会不会使 CNF=1 无解。如果无解,这个值肯定不能选,但不能就完全确定 CNF=1 无解,还要看看另外一个变量的值。这就有了变量可选解的概念。 什么是变量可选解呢? 在无变量唯一解的 CNF 中设定变量的一个值,并消去使值为 1 的子句后,剩下子句块按照变量唯一解继续消去子句,如果剩下的子句块中没有变量唯一解,且子句块都不是完全子句块,则称设定的那个变量值是变量可选解。 根据可选解的定义,如果剩下的子句块有完全子句块,那么这次最初设定的变量值就不是它的可选解。由于逻辑变量可以取 0 和 1 两个值,于是还可以查看另一个值是不是可选解。如果只有一个值是可选解,那么这个值就一定是变量在关联段中的唯一解,如果 0 和 1 都不是变量的可选解,那么 CNF=1 是不会有解的。如此,求 CNF=1 的解在无法确定变量唯一解的情况下,必须象除法运算一样,先要“试值”,然后才能确定变量的取值。 对于表 3 的剩余 CNF ,我们先测试 x 1 =0 ,消去子句,发现剩余子句块没出现变量唯一解和完全子句块,这说明 0 是 x 1 的可选解(见表 4 )。 我们再测试 x 1 =1 ,消去子句,发现 x 1 =1 剩余子句块 x 2 x 3 和 x 3 x 4 出现了唯一解矛盾,即 x 3 无法取值。这说明 1 不是 x 1 的可选解(见表 5 )。 由此我们得出了 0 是 x 1 在关联段中的唯一解。按照表 4 的过程来设定 x 1 =0 ,消去子句,得到表 6 。 表 4 x 1 =0 是可选解 0 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0               0 1 0               1 0 1               1 1 0               0   1 0             0   1 1                 0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0     表 5 x 1 =1 不是可选解 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0               0 1 0               1 0 1               1 1 0               0   1 0             0   1 1                 0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0     表 6 剩下的子句块 0 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 1 0 1               1 1 0                   0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0     对于无变量唯一解的子句块组成的关联段,有定理可以证明“非关联变量一定有 2 个可选解。”因而测试变量可选解只要对关联变量进行就可以。对于表 6 的关联段,只要测试 x 3 和 x 6 的可选解数量即可。 象测定 x 1 的可选解一样,测出 x 3 和 x 6 都有 2 个可选解。于是知,表 6 剩余的 CNF 的每个变量都有 2 个可选解。根据变量可选解的定义,随便设定一个变量的 0 或 1 值,都不会在消去子句后出现完全子句块,也即不会出现无解。因此可以有 定理:由全是 2 个可选解变量构成的 CNF ,任意从一个变量设定值,用变量唯一解消去子句,最后总可以得到 CNF=1 满足解(这个定理的证明请见附件)。 对于表 6 ,我们设定 x 6 =1 ,再设定 x 3 =1 ,消去相关子句,得到表 7 。 表 7 设定 x 6 =1 ,再设定 x 3 =1 0 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 1 1 0                         0 1 0     表 7 的 x 2 有唯一解 1 。而 x 7 , x 8 只要设定 x 7 =1 ,或 x 8 =0 ,就可以将全部子句消去,从而知 011**11*10 获 011**1*010 都是表 1 的 CNF=1 的满足解。 2.4 验证子句消去法的满足解 子句消去法计算得到的全体变量值是不是 CNF=1 的解?这是可以验证的。一种办法是将每个变量求出的值( * 可以任意取值 0 或 1 ),带入 CNF 的逻辑表达式,看看最终结果是不是 1 。 这里介绍一个简单的方法,就是将结果放到表 1 的上面,看看每一行是否有与上面变量值相同的子句,有则将子句消去,最终没有子句剩下,就说明是解,不然就说明计算的过程出现了错误(见表 8 )。 表 8 满足解验证 0 1 1 1 1 1 0 x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 0 0 0               0 1 0               1 0 1               1 1 0               0   1 0             0   1 1                 0 0   1             1   0 0             0   0 1       1     1   1 1       1           1 1 0               1 0 1               0 1 0                   0 1                 1 1                     0 如果 x 7 不选,让 x 8 =0 ,也可以将全部子句消去,从而完成解的验证。 2.5 总结 完成用子句消去法求 SAT 问题满足解要运用两个规则。 规则 1 :子句块变量有唯一解必须首先设定。 规则 2 :子句块无变量唯一解,先设定变量唯一可选解。 SAT 问题长期没能解决的原因是没有得到其特殊的结构规律造成的。 我相信,只要能够找到 NP 问题的具体规律都会通过计算推导的方法获得解决。 关于理论上的子句消去法深层次证明请看: http://blog.sciencenet.cn/blog-340399-1009188.html http://blog.sciencenet.cn/blog-340399-1011907.html 2016-11-19
个人分类: P/NP问题|3024 次阅读|0 个评论
我为相关计算数学打开一扇门
accsys 2016-11-16 09:49
我为相关计算数学打开一扇门 姜咏江 事物之间有关还是无关,这种关系称为相关。引起事物相关最基本的东西称为因素。因素是构成事物的基本要素。例如,人是事物。构成人最基本的是基因,基因组合构成细胞,细胞组合构成器官,器官组合才构成人。用集合论的观点来看,事物就是带有包含层次的集合。基因构成子集,子集构成细胞、器官和人。 因素也是事物,事物都有两种对立的状态,用数码表示就是 0 和 1 。 1 和 0 的意义很多,例如“生,死”“有,无”“是,非”, ... 。如此一来,因素就可以用逻辑变量 x 来表示。 我们把具有共同因素的事物称为相关事物, 简称相关 。研究事物全体因素独立变化对事物状态影响的计算就称为 相关计算 。 数学多数情况下是在研究少数变量之间的变化关系,例如,函数(映射)、关系等,这主要基于实数的连续性。那种变量之间毫无瓜葛的纯离散型因素,除了逻辑代数,基本上很少研究。相关计算就是研究全体纯离散型的因素变化,如何对整体产生影响,其主要目标是研究独立的因素全体对整体的状态产生怎样的作用。 例如,基因对生物的影响,运动员对球队的影响,工程的各种基础设施对整个工程的影响,企业组织机构对企业的影响,系统输入对系统性能的影响,网络设施对网络的影响,基础教育对个人成才的影响,食物因素对生命进程的影响等。 相关计算用逻辑代数表达出来就是 SAT 问题。求 SAT 问题满足解就是相关计算的基本形式。子句就好比细胞,子句块就好比器官,任何一部分无解, SAT 都会无解。当然这些细胞或器官组织的不合逻辑相关,那么 SAT 也会无解。子句消去法可以准确地一次性求出 SAT 的满足解。因此,子句消去法是相关计算的基本方法。 一切带有概率方法的数学计算,都具有 NP 类问题的特征,只有子句消去法完全避开了 SAT 这个 NP 类问题的概率方法,直接一次性确定出 SAT 的满足解。这是从全局的角度研究因素,进行相关计算的基本方法。 子句消去法虽然是一个多项式时间复杂度的算法,但随着具体的 SAT 构成类型变化,有许多独特的快速的算法。例如, n 元逻辑变量为子句的 SAT ,就可以用反子句的概念在 O( n ) 时间复杂度求出满足解。 客观世界的相关计算问题不胜枚举,这种各自独立的因素全体的演化,是从整体的层次进行事物研究的必要方法。当事物因素十分庞大的时侯,穷举法是不能够在有限时间内完成任务的,只有子句消去法能够让我们快速地得到结果。 一种全面研究独立因素对事物影响的计算方法就此打开。我相信,相关计算会为数学计算开辟出一块全新的天地。让我们将这扇大门推得更开吧。 2016-11-16
个人分类: 相关计算|2417 次阅读|0 个评论
子句消去法是可以让你挣大钱,不信吗?
accsys 2016-11-15 07:43
姜咏江 我确信子句消去法是快速求出 SAT 问题满足解的唯一方法。子句消去法是一个多项式时间的算法,我已经在科学网上介绍了它完整的证明,我有十足的把握,没有人能够推翻它。 由于 SAT 问题直接能够运用到超大规模集成电路化简、生物基因计算、博弈决策、密码破译、人工智能、计算机系统设计等诸多方面,其应用的价值远超过理论的探讨。 由于科学网上现在无人愿意肯定我的理论与方法,有人劝我将论文写成英文,投到国外刊物上发表。我一向主张创新发明先国内后国外。我相信正确的理论和方法不经过国外的权威说话,也一定会证明其正确性。我就不相信中国的科学界人士,会永远将科技创新的话语权交给国外。 我已经是七十多岁的老人了,精力确实已经不如从前。十年前,我很快就会将这个算法的软件程序编写出来,但现在确实难以胜任了。我现在真希望中国能有年轻人能够认识到这项发明的实际意义,能够快速地将子句消去法从理论转化到企业行为。如果哪位青年人有这种眼光与魄力,又具备计算机编程能力,我一定会助他一臂之力。 子句消去法用 Python 来设计并不难。如果有人愿意从事这项开创性的工作,愿意成为企业的开创者,请与我联系,我会全力协助。我不希望有人偷偷地使用我的发明。 请参考: http://blog.sciencenet.cn/blog-340399-1013911.html accsys@126.com 2016-11-15
个人分类: 科技畅想|2192 次阅读|0 个评论
看看英文的反码是如何定义的
accsys 2016-11-13 13:46
看看英文的反码是如何定义的 姜咏江 要把我的文章翻译成英文,遇到反码这个词。在维基百科也未找到。找了半天好像找了一个最全的: · baseminusone'scomplement · base-minus-one'scomplement · base-minus-onescomplement · blscomplement · complementonn-l · complementonone · ninescomplementrepresentation · ones-complementcode · radixminusonecomplement · radix-minus-onecomplement · signednumberrepresentations 反 :reverseside 码 :asignorobjectindicating... 正反码 :positiveandinversecode 二进制反码 :complementofone's;complem... 反码字典 :reverse-codedictionary 基数反码 :diminishedradixcomplement;... 进制反码 :complementonn-n;n-n 十进制反码 :complementonnine;compleme... 二进制的反码 :one’scomplement 基数减1 补码, 基数反码 :diminishedradixcomplement 实在是词不达意。我在十年前就给出了反码的定义: 两个数码之和为最大数码,一个叫另一个的反码。将一个数的数码用反码表示,得到的数叫原数的反码数 。 这个定义我已经在计算机 CPU 设计课程中用好多年了,竟然在英文的资料中找不到!可见我真正说清楚搞明白的东西,外国人不见得真明白了。 我决定就这样翻译: Addtwodigitisbiggestdigit,theonedigitisfanmaoftheother. 例如,十进制的( 0 , 9 )( 1 , 8 )( 2 , 7 )( 3 , 6 )( 4 , 5 )它们是互为反码。二进制的( 0 , 1 )是互为反码。 3 进制的( 0 , 2 )( 1 , 1 )是互为反码。今后我在英文中就用“fanma”了。 2016-11-13
个人分类: 子句消去法|5489 次阅读|0 个评论
深入研究子句消去法
accsys 2016-11-12 09:47
深入研究子句消去法 姜咏江 多项式 C n k +C n k-1 +...+C n 1 +C n 0 与 2 n 相差多少?其实,只要 k=n ,那么前者就是后者。只有当 k 为常数的时侯,多项式与指数时间复杂度才有明显的时间效益。 k 为常整数,求由比 k 少的逻辑变量取值形成子句间与运算表达式结果为真值,就是 SAT 问题。如今 SAT 问题有了多项式时间复杂度的算法——子句消去法。但从多项式与 2 n 之间的关系来看,当 k 很大的时侯,算法执行的复杂程度(或则说任务量)也会很大,这就需要我们去寻找子句消去法能更快执行的方法。这里先介绍一个减少判断变量可选解的方法。 子句消去法最坏的情况是从头到尾判断的每个变量都出现两个可选解。如果能够有方法减少判断变量的数量,自然可以加快计算。 选判定理 :子句块无唯一解变量,其非关联变量都有 2 个可选解。 证明 :依据二进制限位数性质, k 阶子句块如果没有任何一个变量有 2 k-1 个表现值,那么至少有一对可以进入这个子句块的互反子句不在其中。由附件文中的定理 2 、 3 、 4 立即就可以得出此定理成立。 实际问题中的 SAT 问题,逻辑变量可能很多,而形成子句块共有的变量可能不多。在施行子句消去法求 SAT 解的过程中,先将各子句块中唯一解变量值确定,消去相关子句之后,剩下的都是无唯一解变量的子句块。此时只要去判断那些关联变量有几个可选解,就可以迅速地得出无解,或者求出 SAT 的满足解。 2016-11-12 附件: 子句消去法求k-SAT满足解(同行讨论稿).pdf
个人分类: SAT问题|2358 次阅读|0 个评论
SAT问题满足解详解求解例题
accsys 2016-11-10 13:40
SAT问题满足解详解求解例题 姜咏江 从一开始接触 SAT 问题求解,我就说过:“科学网是我科研的地方。”两年,我在科学网上经历了与别人不一样的研究历程,当然,也收获了与别人不一样的成果。我以 3-SAT 问题求解的实例,来详细告诉感兴趣的人们,如何在多项式时间内求出这类 SAT 问题满足解。这是对以往阅读过我那些不成熟博文人们的辛苦的回报。 消去块中唯一解, 不然找一可选解, 解多暂时一边放, 全多选解可得解。 这四句是我总结出求 SAT 满足解的口诀,在下面的实例中我会一一地解释。 例题: 3-CNF=( x 1 + x 2 ’+ x 20 ’)( x 1 ’+ x 2 + x 20 ’)( x 1 + x 4 ’+ x 6 ’)( x 1 ’+ x 4 ’+ x 6 )( x 1 + x 4 ’+ x 6 )( x 1 + x 4 + x 6 ’)( x 1 + x 2 + x 4 ')( x 1 ’+ x 2 + x 4 )( x 2 ’+ x 9 + x 15 ’)( x 2 + x 9 ’+ x 15 ’)( x 2 ’+ x 9 + x 15 ’)( x 2 ’+ x 4 + x 6 )( x 2 + x 4 ’+ x 6 )( x 2 + x 4 + x 6 )( x 2 ’+ x 4 ’+ x 6 )( x 2 ’+ x 4 ’+ x 6 ’)( x 3 ’+ x 4 ’+ x 5 ’)( x 3 + x 4 + x 5 ’)( x 3 ’+ x 4 ’+ x 5 )( x 4 + x 12 + x 14 )( x 4 ’+ x 12 ’+ x 14 ’)( x 4 + x 5 ’+ x 6 ’)( x 4 + x 5 + x 6 ’)( x 5 ’+ x 6 ’+ x 8 ’)( x 5 + x 6 + x 8 ’)( x 5 + x 6 ’+ x 8 )( x 5 + x 6 ’+ x 10 )( x 5 + x 6 + x 10 )( x 5 ’+ x 6 + x 10 )( x 5 + x 6 ’+ x 10 ’)( x 5 ’+ x 6 ’+ x 9 ’)( x 5 + x 6 ’+ x 9 ’)( x 5 + x 6 + x 9 ’)( x 5 ’+ x 6 + x 9 )( x 5 + x 6 ’+ x 9 )( x 6 + x 8 ’+ x 11 )( x 6 ’+ x 8 + x 11 )( x 7 + x 14 + x 18 )( x 7 + x 14 ’+ x 18 ’)( x 7 + x 8 ’+ x 11 ’)( x 7 + x 8 + x 11 )( x 1 ’+ x 9 ’+ x 12 )( x 1 ’+ x 9 + x 12 ’)( x 1 + x 9 + x 12 ’)( x 1 + x 9 ’+ x 12 )( x 11 ’+ x 12 ’+ x 14 )( x 11 + x 12 ’+ x 14 ’)( x 11 + x 12 + x 14 )( x 13 ’+ x 15 ’+ x 17 ’)( x 13 ’+ x 15 + x 17 )( x 13 + x 15 ’+ x 17 )( x 13 + x 15 + x 17 ’)( x 16 ’+ x 17 ’+ x 18 ’)( x 16 + x 17 + x 18 )( x 17 ’+ x 18 ’+ x 19 ’)( x 17 + x 18 ’+ x 19 ’)( x 18 ’+ x 19 ’+ x 20 ’)( x 18 + x 19 + x 20 ) 这 61 个子句用表的形式表示出来如 表 1 所示, 1 代表变量本身, 0 表示变量的非形式。 表 13-SAT x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 1 0                                   0 0 1                               0 1     0 0                             0   0   1                             1     0   1                             1     1   0                             1 1   0                                 0 1   1                                   0             1           0             1             0           0             1             0           1             0   1   1                               1   0   1                               1   1   1                               0   0   1                               0   0   0                                 0 0 0                                 1 1 0                                   0 0 1                                     1               1   1                   0               0   0                   1 0 0                                   1 1 0                                     0 0 0                                 1 1   0                                 1 0   1                                 1 0       1                             1 1       1                             0 1       1                             1 0       0                             0 0     0                               1 0     0                               1 1     0                               0 1     1                               1 0     1                                 1   0     1                             0   1     1                               1             1       1                 1             0       0                 1 0     0                               1 1     1                   0               0     1                 0               1     0                 1               1     0                 1               0     1                                     0 0   1                                 1 0   0                                 1 1   1                                     0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     0 0 0                                   1 1 1 1. 消去块中唯一解 判断变量有唯一解的条件是k阶子句块的变量 x 有2 k-1 个“0”或“1”,如果同时有2 k-1 个“0”和“1”,则SAT无满足解。 子句块 x 2 x 4 x 6 有唯一解 x 6 =1 ,消去 x 6 =1 的所有子句。发现剩余2阶子句块的变量有唯一解(见 表 2 中黄色底纹所示)。 表 2 消去 x 6 =1 的所有子句的剩余           1                             x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 1 0                                   0 0 1                               0 1     0 0                             1     1   0                             1 1   0                                 0 1   1                                   0             1           0             1             0           0             1             0           1             0   0   0                                 0 0 0                                 1 1 0                                   0 0 1                                     1               1   1                   0               0   0                   1 0 0                                   1 1 0                                     0 0 0                                 1 0   1                                 1 0       1                             1 0       0                             0 0     0                               1 0     0                               1 0     1                                 0   1     1                               1             1       1                 1             0       0                 1 0     0                               1 1     1                   0               0     1                 0               1     0                 1               1     0                 1               0     1                                     0 0   1                                 1 0   0                                 1 1   1                                     0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     0 0 0                                   1 1 1 表 3 出现一阶剩余子句块 1     1 1 1                             x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 0 1                               0   0             1           0             1             0           0             1             0           1             0   0   0                                 0 0 0                                   0               0   0                     0 0 0                                 0 0     0                                 0   1     1                               1             1       1                 1             0       0                 1 0     0                               1 1     1                   0               0     1                 0               1     0                                     0 0   1                                 1 0   0                                 1 1   1                                     0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     0 0 0                                   1 1 1 表 4 又出现一阶剩余子句块 1 0 0 1 1 1   0 0                       x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 0 1                               0       0               0   0                       0   1     1                               1             1       1                 1             0       0                 1 1     1                   0               1     0                                     0 0   1                                 1 0   0                                 1 1   1                                     0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     0 0 0                                   1 1 1 表 5 变量 x 7 =1 可以消去子句 1 0 0 1 1 1   0 0   1 0               0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20             1             1       1                 1             0       0                             0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     1 1 1 表 6 可以取任意值的变量和多解子句块 1 0 0 1 1 1 1 0 0 *   1 0   *             0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20                         0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     1 1 1 2. 不然找一可选解 子句块全多解的情况,可以证明非关联变量一定有 2 个可选解。所以只需要对关联变量分别设定 0 和 1 值,然后施行子句消去法,碰到剩余子句块无解时,说明所设定的值不是这个变量的可选解。如果 0 和 1 都不是这个变量的可选解,那么 SAT 无解。如果判定只有一个 0 或 1 是可选解,那么就设定该变量的这个值,消去子句,然后从剩余的子句块中继续求解。 经过 表 7 的判断操作,不巧其中无有唯一可选解的变量,知道此题剩余的这些变量都有 2 个可选解。 表 7 判断变量可选解(纵向看)       0               0 1           1 0 x13 x15 x16 x17 x18 x19   x13 x15 x16 x17 x18 x19   x13 x15 x16 x17 x18 x19 0 0   0       0 0   0       0 0   0     0 1   1       0 1   1       0 1   1     1 0   1       1 0   1       1 0   1     1 1   0       1 1   0       1 1   0         0 0 0         0 0 0         0 0 0       1 1 1         1 1 1         1 1 1         0 0 0         0 0 0         0 0 0       1 0 0         1 0 0         1 0 0         1 1           1 1           1 1                                               1               1 0           0 1 x13 x15 x16 x17 x18 x19   x13 x15 x16 x17 x18 x19   x13 x15 x16 x17 x18 x19 0 0   0       0 0   0       0 0   0     0 1   1       0 1   1       0 1   1     1 0   1       1 0   1       1 0   1     1 1   0       1 1   0       1 1   0         0 0 0         0 0 0         0 0 0       1 1 1         1 1 1         1 1 1         0 0 0         0 0 0         0 0 0       1 0 0         1 0 0         1 0 0         1 1           1 1           1 1 3. 解多暂时一边放 如果测定变量有多个可选解,就标记它,到全部剩余变量都是多可选解时定值。 4. 全多选解可得解 如果变量都有 2 个可选解的时侯,只要任意选定一个变量的值施行子句消去法,那么一定能够得到满足解(这是有定理保证的)。 这里先后选 x 13 = 0 , x 15 = 0 , x 17 = 0 , x 18 = 1 , x 19 = 0 ,就可以将剩余子句全部消去了(表 8 中设定 x 18 = 1 , x 19 = 0 后没有消去子句)。 表 8 全多可选解 1 0 0 1 1 1 1 0 0 *   1 0 0 *   0 *   0 1 0   0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20                               1 1 1                                     1 0 0                                     1 1 1 5. 验证满足解 一般验证满足解是把解的值带入上面的逻辑表达式,看看结果是否是 1 。用 0 和 1 表格式表示的 SAT ,验证更方便。方法如 表 9 所示,从上到下看看每个子句中有没有顶端变量的解值,有就可以认定这个子句的值是 1 ,全部通过就说明所求出的 n 位二进制数是 SAT 的满足解。 表 9 验证满足解 1 0 0 1 1 1 1 0 0   1 0 0   0   0 1 0 0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 1 0                                   0 0 1                               0 1     0 0                             0   0   1                             1     0   1                             1     1   0                             1 1   0                                 0 1   1                                   0             1           0             1             0           0             1             0           1             0   1   1                               1   0   1                               1   1   1                               0   0   1                               0   0   0                                 0 0 0                                 1 1 0                                   0 0 1                                     1               1   1                   0               0   0                   1 0 0                                   1 1 0                                     0 0 0                                 1 1   0                                 1 0   1                                 1 0       1                             1 1       1                             0 1       1                             1 0       0                             0 0     0                               1 0     0                               1 1     0                               0 1     1                               1 0     1                                 1   0     1                             0   1     1                               1             1       1                 1             0       0                 1 0     0                               1 1     1                   0               0     1                 0               1     0                 1               1     0                 1               0     1                                     0 0   1                                 1 0   0                                 1 1   1                                     0   0   0                               0   1   1                               1   0   1                               1   1   0                                     0 0 0                                   1 1 1                                     0 0 0                                   1 0 0                                     0 0 0                                   1 1 1 为了方便练习,附上 excel 文档,有兴趣可以在上面直接操作。 3sat求解实例.xls 2016-11-10
个人分类: 3SAT解法|2759 次阅读|3 个评论
SAT问题去重复子句的时间复杂度是怎样算出来的?
accsys 2016-11-9 09:36
姜咏江 SAT 的定义中是不允许出现重复子句的,但在子句消去的过程中,会出现降阶的子句块中有重复的子句。 t 阶子句块变量唯一解是因为它有 2 t-1 个相同的表现值( 1 ≤ t ≤ k )。在消去子句的过程中很难事前知道那些子句会重复,这样证明消去重复子句这一步算法时间复杂度为多项式时间就很困难。不过我们可以从总体上来探讨。 假如 SAT 子句的最高阶是 k ,那么子句块的总数不会超过 C n k +C n k-1 +...+C n 1 个。如此有 m 个变量表现值相同的子句块( 1 ≤ m ≤ k-1 )最多有 C n -m k-m +C n -m k-m-1 +...+C n -m 1 +1 个,那么有 m 个变量表现值相同的子句块的子句总数不会超过 C=2 k-m +2 k-m-1 +...+1 个。 C 是一个有限常数。因此,任何一个剩余的子句块的子句数数,都不会超过这个数。在小于常数 C 个数中,消去重复数的算法时间复杂度无疑是 O(1) 。而剩余子句块最多还是 C n k +C n k-1 +...+C n 1 个,所以 SAT 总体去掉子句块中重复子句的算法时间复杂度是 O( n k ) 。 2016-11-9
个人分类: SAT问题|2391 次阅读|0 个评论
公开搞学术研究要经得起冷嘲热讽
accsys 2016-11-5 07:17
姜咏江 学术研究并不都需要秘密地进行,特别是那些所谓的世界难题一类,公开在科学网上研究论证,不怕讥笑和嘲讽,借助于批评者,能够获得快意和驱动力,激奋你快速前进。这是我两年多钻研子句消去法求解 SAT 问题满足解的特有体会。 两年中,我从无知 SAT 问题到有所收获,除了我自身的数学和计算机的功底之外,探索科学的强烈兴趣是我研究重要的动力。我将所有的不同见解作为参考,也作为鼓励自己前进动力的一部分,提醒自己,要善待或感谢那些嘲讽与讥笑,最后收获的将一定是由衷的快乐。 证明子句消去法是多项式时间算法确实很艰难。虽然我构造了子句块、关联段、变量可选解、降阶子句块等概念,并运用限位数理论解决了变量无解和唯一解形式的判断,以至于证明了每个变量都有 2 个可选解的 SAT ,都可以用子句消去法求出满足解,但证明子句消去法是多项式时间复杂度的算法仍然是艰难的。这种艰难源自于消去子句过程中,要删除子句块中的重复子句,或者要涉及到数排序。 大家知道, k-SAT 中 n 个变量的 k 个变量子句最多有 2 k C n k 个,去重复的过程中,子句数不会超过这个数,要用通常的去掉重复子句的方法,最坏大概要进行 2 k C n k 的阶乘次比较。显然,这不是一个多项式时间可以完成的问题。解决这个问题需要懂得计算机硬件设计方面的知识。设计一个带有存储单元空满标志的存储器,并实行数据标记单元存储法,这个问题就转化成多项式时间算法了!核心思想就是将二进制表示的子句,放到这个数为地址的存储单元(专家排序法 http://blog.sciencenet.cn/blog-340399-995138.html )去掉重复,然后通过标志来选择操作这些数据。 SAT 问题不仅是一个数学和计算机软件程序设计的问题,它是一个用数学理论、计算机设计制作理论与方法的综合性问题。 限位数理论是我早年的研究, SAT 问题的解决中逼出来了专家排序法。不管今后这些方法会起到怎样的作用,作为一个凭借兴趣探讨学问的人都会有幸福感。公开搞学术的好处是可以借助别人的批评快速进步,最大的体会就是要经得起冷嘲热讽。 2016-11-5
个人分类: SAT问题|2487 次阅读|0 个评论
论子句消去算法的多项式时间复杂度
accsys 2016-10-31 10:41
论 子句消去算法的 多项式时间复杂度 姜咏江 (对外经济贸易大学 北京 中国 100013 ) 2016-10-30 摘要 本文重点论证 SAT 问题算法时间复杂度问题。文中给出了运用子句消去法求 SAT 满足解的基本方法,并对该算法的每一步骤都进行了时间复杂度深入分析,进而论证出用子句消去法去求解 SAT 问题,最坏的情况下,算法时间复杂度也不会超过 O( n k ) 。作者定义了子句块和关联段的概念,并用限位数理论和方法找到了求 SAT 满足解的一般方法。这是本文作者所特有的研究成果。 关键词 SAT 多项式时间 子句消去法 变量关联段 限位数 反子句 中图法分类号 TP301.6 O158 1. 引言 2016 年 10 月 10 日 在唐山召开了中国计算机应用大会。依据会议要求我投去了《子句消去法求 k-SAT 满足解》论文。经过大会组织审稿,决定推荐到国内一流计算机期刊发表,虽经向不同期刊推荐,但期刊不敢发表,皆是无理由退稿 。既然国内期刊不能发表,我不如自己在科学网上发表 ,文责自负,有何不可? 论文贴到我的博客之后,有人对变量 2 可选解的情况提出疑问,认为这仍然是概率解的方法,对算法多项式时间复杂度不理解。本文在那篇论文的基础上,专门论述子句消去法的算法多项式时间复杂度问题,以便打消关心子句消去法读者的心头疑虑。 2. 子句消去法算法 子句消去法求 SAT 满足解或 k-CNF=1 解的算法如下: ( 1 )化简:将变量有唯一表现值设定为解,将相关子句消去; ( 2 )去掉子句块中重复子句; ( 3 ) 判断变量可选解,无可选解转( 10 ); ( 4 )变量有 2 个可选解,记录可选解数量,选择另一变量,转( 3 ); ( 5 )变量有唯一可选解,确定该变量唯一解,消去相关子句; ( 6 )对剩余子句重复( 1 )至( 5 ),若全部变量设置完成(无剩余子句)转( 9 ); ( 7 )对剩余全有 2 个可选解变量,从任意一变量设定解出发,依据变量唯一解消去子句; ( 8 )有剩余子句且有变量值未设定转( 7 ); ( 9 )得满足解结束。 ( 10 )无解结束。 3. 重要概念与定理 为了很好论证,需要重点重复几个概念和定理。 定义7 . 运用子句消去法,不使剩余关联子句块无解的变量值,叫变量可选解。 理解这个概念举例说明最好。 表 1 是求变量 x15 可选解的操作过程:( 1 )设 x15=1 ,消去该列表现值为 1 的子句;( 2 )由子句块 x2x15 知 x2 必取值 0 ,消去这个子句;( 3 )又知 x20 必取值 0 ,消去此列表现值为 0 子句。得到剩余的子句块全是多解。 表 1 求x15=1可选解 可选解数: 变量取值:  0   1         0 行号 x2 x13 x15 x16 x17 x18 x19 x20 1 1             0 2 0   0           3   0 0   0       4   0 1   1       5   1 0   1       6   1 1   0       7   1   0         8   0   1         9       0 0 0     10       1 1 1     11         0 0 0   12         1 0 0   13           0 0 0 14           1 1 1 定理3 .SAT 有解,其子集有解。 这个定理的重要性在于能够检查前面设定的变量值能否是关联段解的一部分。同时能够对全 2 可选解变量组成的关联段找到段解。 4. 变量关联段与子集 在求变量可选解的过程中,涉及消去子句的那些子句块显然也是一个 SAT ,我们不妨称之为 变量关联段 。显然,当变量有可选解的时侯,变量关联段就有解。 如果我们原来的 SAT 施行子句消去法,那么变量关联段中的子句就可能被消去,这样就会得到原来变量关联段的子集。 例如, 表2 中已知每个变量都有 2 个可选解,所示的是变量 x15 取值 1 时的变量关联段。其中 x2 、 x15 、 x20 的值 0 、 1 、 0 叫这个变量关联段的解。 表 2 变量x15=1关联段 可选解数:  2 2 2 2 2 2 2 2 变量解:  0   1         0 行号 x2 x13 x15 x16 x17 x18 x19 x20 1 1             0 2 0   0           3   0 0   0       4   0 1   1       5   1 0   1       6   1 1   0       7   1   0         8   0   1         9       0 0 0     10       1 1 1     11         0 0 0   12         1 0 0   13           0 0 0 14           1 1 1 如果先取值 x17=1 ,消去相关子句。对变量 x15=1 关联段来说,就有 4 、 5 两行的子句被消去了,剩下的 1 、 2 、 3 、 6 、 13 、 14 行子句就构成了子集。 由定理 3 ,我们极容易得到下面的 2 个推论。 推论1 :变量关联段子集也是原变量值的关联段。 推论2 :两个可选解变量不消去,总有两个可选解。 由这个推论,下面定理 7 的证明就太容易了。 定理7 .k-SAT 或 SAT 的每个变量都有 2 个可选解,那么从任意一变量确定值出发,消去子句块变量唯一解相关子句,如此继续,可得到它们的满足解。 表 3 剩余的变量关联段 可选解数:  2 2 2 2 2 2 2 2 变量解:  0   1   1       0 行号 x2 x13 x15 x16 x17 x18 x19 x20 1 1             0 2 0   0           3   0 0   0       4   0 1   1       5   1 0   1       6   1 1   0       7   1   0         8   0   1         9       0 0 0     10       1 1 1     11         0 0 0   12         1 0 0   13           0 0 0 14           1 1 1 证明 :由推论 2 知,设定一个变量值,按照变量关联段解进行设定相关变量值,得到其余剩余子句都是某变量关联段的子集组成部分,每个变量仍然有两个可选解。如此继续,最多不超过全部 n 个变量次操作,就可以得到原来 k-SAT 或 SAT 的满足解。 5. 子句消去算法多项式时间复杂度 定理8 :子句消去法是多项式时间复杂度算法。 证明 :算法第( 1 )步的时间复杂度为 O( n ) 。 第( 2 )步的 k 阶子句块中因 k 是常数,即子句块中变量的数量不变,那么子句块中子句最多不超过 2 k 个,所以这步操作的时间复杂度不会超过一个常数,即是 O(1) , C n k 个子句块计算的时间复杂度为 O( n k ) 。 第( 3 )步剩余变量最多有 n 个,判断一个变量可选解的子句块数量最多不超过2 k C n k + 2 k-1 C n k-1 +...+2C n 1 个,要对这些子句块进行无解、唯一解和多解的判断,这是一个不超过 O( n k ) 时间复杂度的过程。对每个变量最坏要设置 0 和 1 进行检验的情况,最多要进行时间复杂度为 2 n 倍的 O( n k ) ,即要进行时间复杂度不超过 O( n k+1 ) 的操作。 第( 4 )步是转移判断。 第( 5 )步是对第( 3 )步有可选解操作的重复。 第( 6 )步是转移判断。 第( 7 )步根据定理 7 不难说明每消去一个变量的时间复杂度不超过 O( n k ) ,那么即使有 n 个变量有 2 个可选解,运用子句消去法,算法时间复杂度也不超过 n O( n k ) ,即不超过 O( n k+1 ) 。 第( 8 )( 9 )( 10 )步是常数时间复杂度。 整个子句消去法是有限步骤完成的过程。依据算法多项式时间复杂度的性质知道,子句消去法算法的时间复杂度最坏为 O( n k+1 ) 。 定理 8 证毕。 请参阅: http://blog.sciencenet.cn/blog-340399-1009188.html 2016-10-31
个人分类: k-SAT求解|2820 次阅读|0 个评论
这样的难题大家都可以看懂,需要送到国外认可吗?
热度 1 accsys 2016-10-31 09:17
姜咏江 用 n 个逻辑变量和其变量非形式中的不超过 k ( k 是一个常数)个,写出若干个或运算多项式(子句),问能不能设定这 n 个变量的一组值(是一个 n 位二进制数),使每一个多项式的逻辑值都是 1 (真)?这个问题就是被国外认定的世界难题 SAT 。 举个例子,有逻辑变量 x 1 , x 2 , … , x 5 ,它们的非形式是 x 1 ’, x 2 ’ , x 3 ’, x 4 ’, x 5 ’ ,随便写出的多项式有: x 1 ’+ x 2 ’+ x 3 ’+ x 4 ’+ x 5 ’ , x 1 ’+ x 2 ’+ x 3 + x 4 + x 5 ’ , x 1 + x 2 ’+ x 3 + x 4 ’+ x 5 ’ , x 1 + x 2 + x 3 ’+ x 4 ’+ x 5 ’ , 问是否能够将这几个多项式值都为 1 的那些二进制数找出来? 这些多项式中都有变量的非项,可以马上找出 00000 可以满足要求。 如果上面的由 5 个变量及其非形式组成的多项式可能“残缺不全”,并且有很多个,你还能够一下子找出满足条件的二进制数吗?这个问题用穷举法可以办到,这需要将二进制数从 00000 一直到 11111 这 32 个数一一带入每个多项式验证。 n 个变量的这种验证次数总是 2 n 。 显然,当 n 较小的时侯,验证的工作量不大,但若 n 变大,而 k 不变的时侯,工作量就会以惊人的速度增大,以至于有上百个变量,而多项式并不太多的时侯,用计算机来验证也难以短时间内完成。 有 n 个变量的 SAT 如果有解,一定是在二进制数 0 ~ 2 n -1 之中。能不能根据多项式将这 2 n 个数中不是解或是解的单独找出来?这样在 n 位二进制数已知的情况下,速度会加快。 为了简单,我们用 1 表示多项式中的变量 x ,用 0 表示 x ’。那么每个多项式就可以写成二进制数的形式。如此我们就引进了子句块的概念,并且能够证明互反子句(二进制数表示的子句互为反码)都不在子句块中,都是 SAT 解的组成部分,有一个在子句块中,它的反子句就不是 SAT 解的组成部分。所谓子句块是相同变量组成的子句全体。子句是不是 SAT 解的组成部分,是由数码的位置来确定的。例如, 1 1 0 是 11100 、 10100 、 ... 、 11110 的组成部分,但不是 01100 的组成部分,虽然 110 在 01100 当中,这是因为 1 1 0 在 01100 对应位置数码不同。 我们能不能用带位置二进制数码表示的子句,找出 SAT 的全部解?这就是本文要谈的中心内容。 计算机中的数都是二进制数码表示的,同一数码在不同位置是它们的根本区别。 如果一组数码和一个子句块变量位置相对应,且能够使子句块中每一个子句的值为1,那么这组数码一定是 n 个变量SAT解的组成部分;如果这组数码虽然与子句块的变量的位置对应,但不能使这个子句块的所有子句值为1,那么这组数码对应所在的 n 位二进制数,一定不是 n 个变量SAT的解。 我们把二进制表示的子句所在n位二进制数叫子句的标志。根据子句消去法,SAT的解一定在子句标志当中。如果我们将SAT子句的所有标志,通过子句将其它们从 n 位二进制数中消去,那么剩下的 n 位二进制数就一定是由SAT中子句的反子句或不在SAT中的互反子句构成的。 在子句消去法中有一个很重要的定理: 反子句不在和互反子句都不在子句块中的子句是该子句块的解 。 根据这一定理,将剩下的 n 位二进制数取反,得到的数一定都是SAT的解。 如果你对 SAT 有所了解,或者看过我的子句消去法,我想理解上面的叙述不会有问题。问题会在这一过程中的算法,是不是多项式时间复杂度? 假如 SAT 中最高阶子句有 k 个变量,那么 SAT 最多有2 k C n k +2 k-1 C n k-1 +...+2C n 1 这 k 次多项式计算结果个子句。我们可以先从低阶子句开始消去子句标志,那么最多也就是要进行 2 k C n k +2 k-1 C n k-1 +...+2C n 1 次(实际上,由于高阶子句包含低阶子句,这种操作要少得多)就可以完成子句标志消去的工作,剩下的 n 位数的反码就都是 SAT 的解!可见整个 子句标志消去法 的算法时间复杂度为 O( n k ) 。 需要说明,在计算机中 0 ~ 2 n -1 个二进制数是放在文件中,或地址编码本身,计算机中只有二进制数,因而寻找子句的标志可以用一个指令实现。由此可见,由子句消去其标志就是一个 O(1) 时间复杂度。 以上我谈的问题是计算机理论和方法中的问题,搞计算机理论的人都可以鉴定对与错,没有必要非要请“洋专家”评判。 请参阅: http://blog.sciencenet.cn/blog-340399-1009188.html http://blog.sciencenet.cn/blog-340399-1009397.html http://blog.sciencenet.cn/blog-340399-987007.html 2016-10-31
个人分类: SAT问题|2740 次阅读|1 个评论
SAT无满足解的充分必要条件
accsys 2016-3-27 13:21
SAT 无满足解的充分必要条件 姜咏江 本人发明的子句消去法,是快速求出 SAT 满足解的方法。该方法无疑在电子电路设计的化简和优化中会起到十分重要的作用。关于子句消去法的原理和方法,请参阅: http://blog.sciencenet.cn/blog-340399-961507.html 。 SAT 的满足解是由 n 元逻辑变量的一组值构成的,这组由数码 0 和 1 构成的数组带入 SAT 表达式,会使 SAT 表达式的值为 1 。在子句消去法中, SAT 满足解体现为所有的子句都能在值为 1 的情况下消去,最终没有剩余子句。 不论 SAT 还是 k-SAT 一般情况下常有多解,因而研究它们的无解情况甚至比有解都要重要。本文主要给出 SAT 无满足解的充分必要条件。 基本定理 : SAT 无满足解的充分必要条件是子句块或动态块无解。 子句块由共同变量的子句构成,而动态块是由设定一些变量值后的具有共同变量的剩余子句构成。因而容易理解子句块或动态块无解,肯定 SAT 无满足解。 证明 :【充分性】依据子句消去法,当有子句块或动态子句块无解时,就会有子句不能消去。可见充分性成立。 【必要性】若 SAT 任意子句块或动态子句块都有解,则知所有的变量都有确定的值可一起构成 SAT 满足解。必要性成立。 2016-3-27
个人分类: SAT问题|3176 次阅读|0 个评论
两个哈密顿图回路的一些解
热度 1 accsys 2016-3-6 22:07
两个哈密顿图回路的一些解 姜咏江 上次给出的两个图是哈密顿图。下面是分别求出的 2 个不同回路。 2016-3-6
个人分类: P/NP问题|4268 次阅读|2 个评论
NP是可计算的吗?- SAT问题
热度 3 liuyu2205 2015-7-17 16:14
目前为止,我们直接针对NP的流行定义:“NP是多项式时间可验证的问题”,解读其认知错误。我们指出,此认知错误来自于混淆了“nondeterministic Turing machine”二个不同的内涵:NTM(非图灵机)和NDTM(不确定性图灵机),从而得出NP二个定义等价,致NP的“不确定性”消失。 另外,还存在着一个更加令人困惑的流行观点:NP是可计算的,理由是,NP存在指数时间复杂度算法。 我们在博文“什么是‘判定问题’?(1)-可计算性理论与计算复杂性理论”( http://blog.sciencenet.cn/home.php?mod=spaceuid=2322490do=blogid=895834 )中,简单回顾了算法理论的历史,指出:此观念直接导致计算复杂性理论(Computational complexity theory)与可计算性理论(Computability theory)相分离的现状,使作为计算复杂性理论基础的NP完备理论(NP-completeness theory),成了无源之水,无本之木! 这里,我们希望解读“NP存在指数时间算法”的意义,由此出发逐步解读“NP是可计算的”,为此,我们借用具有代表性的“SAT问题”来帮助解读。 SAT问题,是“布尔逻辑可满足性问题(boolean SATisfiability problem)”的简称,指给定一个合取范式的布尔公式,判断其是否可满足。SAT问题是逻辑学的一个基本问题,也是算法理论的核心问题,因为任何一个欲通过算法求解的问题(P和NP)都可表达为SAT问题:2-SAT是P问题(确定性问题)的代表;3-SAT是NP问题(不确定性问题)的代表。 然而SAT问题与P和NP的关系,学术界一般用所谓的“归约(reduction)”来阐释,即将SAT问题与P和NP相互表达,但是于认知问题的角度,此“归约”只是停留在问题的表面,并未深入问题的本质,就好比问“老王在哪里”,却被告知“老王在老张的隔壁”,而老张比老王更难找,因为还不认识老张。 所以,我们希望通过对SAT问题本身作些必要的解读,来帮助认知P和NP。我们先阐释“问题”、“实例”与“解”的层次表达,并用哈密顿路径问题表达为SAT问题的案例说明之: 一,“问题”、“实例”与“解”的层次表达 “问题(problem)”、“实例(instance)”和“解(solution)”是算法理论中最基本的概念,只是对这些概念的解释一般未作层次的分辨(见附录)。 从日常语言的角度,“问题”指:对事物,问是否具有某种“性质”。 从算法语言的角度,“问题”指:对任何一个问题实例,问是否存在具有某种性质的“解”;“性质”指约束条件,“解”指满足约束条件的结构。“问题”与“实例”相对而言,“问题”是“实例”的抽象形式。 从逻辑语言的角度,一个约束条件可表达为“子句”,子句Ci(1≤i≤m)是文字的析取式:l1∨l2∨…∨lk,文字li(1≤i≤k)为某一布尔变量或该布尔变量的非;若干约束条件可表达为诸子句的合取式F:C1∧C2∧…∧Cm,即合取范式。合取范式F表达“解”的结构,SAT问题(也称合取范式的可满足问题)指:问是否存在一组布尔变量的赋值(解),使得整个合取范式F取值为真? 于是,一个欲通过算法求解的问题表达成了SAT问题,正是在此意义上,SAT问题在算法理论和问题求解中都占有重要地位。 二,案例:哈密顿路径问题表达为SAT问题 我们以哈密顿路径问题为例(见博文“参详P与NP的二个实例“- http://blog.sciencenet.cn/blog-2322490-878672.html ): 问题:任给一个有向图G及二个结点s和t,问在G中是否存在一条从s到t且遍历G的所有结点的路径(哈密顿路径)? 实例:如图1,来自Sipser的书。 通过表达哈密顿路径所须满足的约束条件,把哈密顿路径问题表达为SAT问题,其步骤如下(并用实例图1说明之): 1,定义布尔变量 xij = 1,哈密顿路径中第i位子是结点j xij = 0,哈密顿路径中第i位子不是结点j 哈密顿路径中有n个位置,故每个结点有n个布尔变量,共有n*n布尔变量: 2,定义字句 (1)每个结点j只能在哈密顿路径中出现一次 x1j ∨x2j ∨···∨xnj ¬xij ∨ ¬xkj , i ̸= k 比如,结点1只能在哈密顿路径中出现一次: x11 v x21 v x31 v x41 v x51 v x61 v x71v x81 ¬xi1 v ¬xk1 , i ̸= k (2)哈密顿路径中的每个位置i只能有一个结点 xi1 ∨xi2 ∨···∨xin ¬xij ∨ ¬xik, j ̸= k 比如,位置1只能有一个结点: x11 v x12 v x13 v x14 v x15 v x16 v x17 v x18 ¬x1j v ¬x1k , j ̸= k (3)不是相邻的二个结点不能在哈密顿路径中相邻出现 ¬xki ∨¬x(k+1)j, (i,j) ̸∈G,k=1,2,...,n−1 比如,结点1,4不能在哈密顿路径中出现: ¬xk1 ∨¬x(k+1)4, (1,4) ̸∈G,k=1,2,...,n−1 3,定义合取范式公式 F由上述子句的合取式构成。 4,定义SAT问题 任给一个合取范式F,问是否存在一组布尔变量的赋值,使得F取值为真? 于此实例,F是可满足的,比如,x11=true, x23=true, x35=true, x44=true,x52=true,x66=true,x77=true,x88=true,令其余布尔变量为false,此组变量赋值使F=true,代表哈密顿路径:1-3-5-4-2-6-7-8。 ****** 附录: 1,在Garey,Johnson的书(Computers and Intractability - A guide to the Theory of NP-Completeness)中第一章的第二节(p.4): 1.2 Problems, Algorithms, and Complexity Let us begin with the notion of a problem. For our purposes, a problem will be a general question to be answered, usually possessing several parameters, or free variables, whose values are left unspecified. A problem is described by giving : (1) a general description of all its parameters, and (2) a statement of what properties the answer, or solution, is required to satisfy. An instance of a problem is obtained by specifying particular values for all the problem parameters. As an example, consider the classical traveling salesman problem. The parameters of this problem consists of a finite set C = {c1, c2, …, cm} of cities and, for each pair of cities ci,cj in C, the distance d(ci,cj) between them. A solution is a tour of minimum length. One instance of the traveling salesman problem, illustrated in Figure 1.1, is given by C={c1,c2,c3,c4}, d(c1,c2)=10, d(c1,c3)=5, d(c1,c4)=9, d(c2,c3)=6, d(c2,c4)=9, and d(c3,c4)=3. The ordering c1,c2,c4,c3 is a solution for this instance, as the corresponding tour has the minimum possible tour length of 27. 2,维基网(https://en.wikipedia.org/wiki/Computational_complexity_theory): Problem instances A computational problem can be viewed as an infinite collection of instances together with a solution for every instance. The input string for a computational problem is referred to as a problem instance, and should not be confused with the problem itself. In computational complexity theory, a problem refers to the abstract question to be solved. In contrast, an instance of this problem is a rather concrete utterance, which can serve as the input for a decision problem. For example, consider the problem of primality testing. The instance is a number (e.g. 15) and the solution is yes if the number is prime and no otherwise (in this case no). Stated another way, the instance is a particular input to the problem, and the solution is the output corresponding to the given input. To further highlight the difference between a problem and an instance, consider the following instance of the decision version of the traveling salesman problem: Is there a route of at most 2000 kilometers passing through all of Germany's 15 largest cities? The quantitative answer to this particular problem instance is of little use for solving other instances of the problem, such as asking for a round trip through all sites in Milan whose total length is at most 10 km. For this reason, complexity theory addresses computational problems and not particular problem instances.
个人分类: 不确定性问题和算法讨论|6221 次阅读|10 个评论

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

GMT+8, 2024-5-21 04:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部