计算复杂性综述

计算复杂性

目录

文章目录

  • 计算复杂性
    • 前言
    • 正文
      • 一、计算复杂性理论基本问题
        • (一)时间复杂度
        • (二)Cook-Karp论题
        • (三)Church论题
      • 二、判定问题类
        • (一)P问题(Polynomial Problem)
        • (二)NP问题(Non-deterministic Polynomial Problem)
        • (三)P对NP问题(P versus NP problem)
        • (四)约化(Reduction)
        • (五)NPC问题(NP-completeness)
        • (六)NPH问题(NP-hard)
      • 三、布尔可满足性问题(Boolean Satisfiability Problem)
    • 总结
    • 参考文献

前言

  计算,实际上是解决问题的过程。人们希望用计算机能找到解决一切问题的方法,在计算领域建立了算法理论和算法模型,并根据各种问题提出具体算法。即使很多问题理论上可以计算,但是实际情况中考虑到计算复杂性,即问题的时空需求太过复杂,是实际不可行的计算问题。

  符号主义机器学习是人工智能知识工程学派的一个分支,旨在寻找一个终极、通用的强人工智能。20世纪70年代,基于知识的系统取得卓越成绩,而到了80年代,它们迅速传播,后来却消失了。它们消失的主要原因是知识习得瓶颈:文法的不断扩张使设计达到无限、逻辑推理非常困难、找不到通用判断文法,被证明为NP难问题。

  连接主义机器学习的支持者像是经验主义者,认为所有的推理都是不可靠的,知识必须来源于观察及实验。他们构建的人工神经网络达到了极高的深度,所消耗的代价也相当高,谷歌的AlphaGo与李世石下棋的过程,有大量机器在参与运算,仅一场比赛就耗电3000美元。

  由此可见,人工智能未来的发展仍然曲折坎坷,为了评估未来将要出现的算法和模型,有必要弄清问题是否实际可计算以及计算复杂性问题。

正文

一、计算复杂性理论基本问题

(一)时间复杂度

  时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行的效率。

  不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度。
数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。

(二)Cook-Karp论题

  背景:1971年,Cook和Karp提供了实际可行的计算的标准,即多项式时间算法标准。区分了可计算问题中实际可计算的问题和实际不可计算的问题。实际可计算问题称为多项式时间可计算,实际不可计算的问题称为指数时间可计算。

  内容:一个算法实际可行当且仅当它是多项式时间可计算的。

  时间复杂度: 解决问题需要的时间与问题的规模之间的多项式关系。

  多项式时间复杂度:多项式关系形如O(n^k),k为某个常数,n是问题的输入规模。例如,时间复杂度为O(nlog(n))O(n^3)都是多项式时间复杂度。

  指数时间复杂度:时间复杂度为O(n^log(n))O(2^n)是指数时间复杂度,O(n!)是阶乘时间复杂度。像O(a^n)O(n!)型的时间复杂度,它是非多项式级的,其复杂度计算机往往不能承受。

  因此,将实际可计算问题定义成多项式时间可计算,将实际不可计算问题定义成指数时间可计算,在目前的计算机体系结构下,无法支持这样大量的运算。

(三)Church论题

  概述:邱奇论题是一个关于可计算性理论的假设。该假设论述了关于函数特性的,可有效计算的函数值(用更现代的表述来说–在算法上可计算的)。简单来说,邱奇-图灵论题认为“任何在算法上可计算的问题同样可由图灵机计算”。[1]

  前提:声称一个函数是“可有效计算的”究竟意味着什么–在某种意义上是不甚明确的直觉结果。所以,该论题依然是一个假想。

  有效性:Rosser于1939年对“可有效计算性”进行了如下的解读:“很明显CC和RC(邱奇和Rosser的论据)的成立依赖于对‘有效性’的严格定义。‘有效的方法’主要是指该方法的每一步都可被事先确定,而且该方法可在有限的步数之内生成结果”。[2]“有效方法”这个想法在直觉上是清楚的,但却没有在形式上加以定义,因为什么是“一个简单而精确的指令”和什么是“执行这些指令所需的智力”这两个问题并没有明确的答案。

  意义:现在普遍认为邱奇-图灵论题是正确的。但是,该论题不具有数学定理一般的地位,也无法被证明;说是定理不如说是个将可计算性等同于图灵机的提议。如果能有一个方法能被普遍接受为一个有效的算法但却无法在图灵机上允许,则该论题也是可以被驳斥的。[3]

  海狸很忙函数:是一个著名不可计算函数,接受输入n,返回具有n个状态的图灵机在停机之前所能打印的最大符号数量。找到海狸很忙函数的上限等于解决停机问题,该问题已被确定图灵不可解。邱奇-图灵论题断言该函数不能使用任何方法进行有效计算。[4]

二、判定问题类

(详见CSDN博客《P问题、NP问题、NPC问题(NP完全问题)、NPH问题和多项式时间复杂度》)
计算复杂性综述_第1张图片

  根据问题的复杂度将问题归类为P问题、NP问题、NPC问题、NPH问题、Non-NP问题,各问题的关系猜测上如图所示,正确性有待验证。

(一)P问题(Polynomial Problem)

  定义:在多项式时间内可解的问题为P问题(多项式问题)。[5]

  例子:时间复杂度为O(nlog(n))的快速排序和堆排序,O(n^2)的冒泡排序和直接选择排序算法都是P问题,也就是多项式时间算法。而我们也只在乎一个问题是否存在多项式算法,因为一个时间复杂度比多项式算法还要复杂的算法研究起来是没有任何实际意义的。

(二)NP问题(Non-deterministic Polynomial Problem)

  定义: NP问题(非确定性多项式问题),指问题只能通过验证给定的猜测是否正确来求解。所谓多项式指的是验证猜测可在多项式时间内完成,所谓非确定性指的是问题只能通过验证猜测来解,而不能直接求解。

  例子:如Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点可在多项式时间内完成,但是找出一个Hamilton回路却要穷举所有可能性,不能直接求解。又如大合数的质因数分解,没有给定的公式可直接求出一个合数的两个质因数是什么,但是验证两个数是否是质因数却可在多项式时间完成,所以它也是非确定性多项式问题,即NP问题。

  意义:之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

  与P问题的区别:存在多项式时间的算法的一类问题,称之为P类问题;而像梵塔问题,推销员旅行问题等问题,至今没有找到多项式时间算法解的一类问题,称之为NP问题。同时,P类问题是NP问题的一个子集。也就是说,能多项式时间地解决一个问题,必然能多项式时间地验证一个问题的解。

(三)P对NP问题(P versus NP problem)

  背景:P对NP问题是Steve Cook于1971年首次提出。“P/NP问题”,假如NP问题能找到算法使其在多项式时间内解决,也就是证得了P=NP。比NP问题更难的则是NP完全和NP-hard,如围棋便是一个NP-hard问题。

  优化性问题向判断性的转换:为了研究问题的复杂性,我们必须将问题抽象简化,我们只考虑判定性问题,即提出一个问题,只需要回答yes或者 no的问题。任何一般的最优化问题都可以转化为一系列判定性问题,比如求图中从A到B的最短路径,可以转化成:从A到B是否有长度为1的路径?从A到B是否有长度为2的路径?……从A到B是否有长度为k的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。

  现状:人类还未解决的问题是:是否所有的NP问题都是P类问题,即P=NP?。这就是注明的世界七大数学难题之首。它的两面分别是:

  • (1)P=NP:我们最终能够找到一些计算方法,使得NDTM(不确定性图灵机)能够快速解决的问题,在DTM(确定性图灵机)上也能够快速解决。快速的意思是“使用不超过输入字符串的多项式时间”。
  • (2)P≠NP:NP只能用NDTM快速解决,而不能用DTM快速解决。

  但是,一个总的趋势、一个大方向是有的。人们普遍认为,P=NP不成立。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题(Non-deterministic Polynomial Complete Problem),也即所谓的 NPC问题。正是NPC问题的存在,使人们相信P≠NP。

(四)约化(Reduction)

  定义:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B,即可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。

  内涵:“可约化”指的是可“多项式时间”地约化(Polynomial-time Reducible),即变换输入的方法是能在多项式的时间里完成的。“约”的意思不是越来越简单,需要理解为向更复杂的情况归约,虽不严谨但更形象。

  性质:约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。

  例子:一元一次方程的求解,跟二元一次方程的求解,我们知道,只要能求解二元一次方程,那就可以用二元一次方程的解法来求解一元一次方程,只需要将一元一次方程加上y,并附加一个方程y=0就可以将一元一次方程变形为一个二元一次方程,然后用二元一次方程的解法来求解这个方程。注意,这里二元一次方程的解法会比一元一次的复杂。所以我们说,只需要找到解二元一次方程的规则性解法,那就能用这个规则性解法来求解一元一次方程。

  意义:一元一次方程的求解约化成二元一次方程的求解,看上去是将问题复杂化。但是问题的应用范围也增大了,不断约化下去,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法,我们会发现一个很惊人的特性,就是一定会存在一个最大的问题(“通吃”所有NP问题),而我们只需要解决了这个问题,那其下的所有问题也就解决啦!

  这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC 问题,也就是NP-完全问题。

(五)NPC问题(NP-completeness)

  定义:NPC问题是指满足下面两个条件的问题:

  • (1)它是一个NP问题;
  • (2)所有的NP问题都可以用多项式时间约化到它。

  性质:它可以在多项式时间内求解,当且仅当所有的其他的NP完全问题也可以在多项式时间内求解。只要我们找到一个NPC问题的多项式解,所有的NP问题都可以多项式时间内约化成这个NPC问题,再用多项式时间解决,这样NP就等于P了。

  现状:NPC问题还没有找到一个多项式时间算法,因此我们就此可直观地理解,NPC问题目前没有多项式时间复杂度的有效算法,只能用指数级甚至阶乘级复杂度的搜索。现在被证明是NPC问题的还有很多,任何一个NPC问题找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P=NP变得难以置信。

  例子1:密码学中的“素数分解”(大数分解和素性检测),就是一个NPC问题[6]。假如P=NP,密码学的工作者必须改造的工作,实在是太多了!如果P=NP,则现有的大量密文都是容易解密的。

  例子2:逻辑电路问题是第一个NPC问题。逻辑电路问题指的是这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(想想计算机内部也不过是一些0和1的运算)。

计算复杂性综述_第2张图片

  如图所示,在输入通过非门后,与源输入一起通过与门,则输出无论如何都不可能为True的逻辑电路。(“a AND NOT a”是不可满足的)

  其他例子:有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton回路成了NPC问题,TSP问题(旅行商问题)也成了NPC问题。

(六)NPH问题(NP-hard)

  定义:满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,但不一定是NP问题)。

  NP-Hard问题同样难以找到多项式时间复杂度的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

  四个类的关系如下图所示:

计算复杂性综述_第3张图片

三、布尔可满足性问题(Boolean Satisfiability Problem)

(详见百度百科《布尔可满足性问题》)
  背景:2010年8月7日,来自惠普实验室的科学家Vinay Deolalikar声称已经解决了“P/NP问题” ,并公开了证明文件。这就是布尔可满足性问题(Boolean Satisfiability Problem),简称SAT问题,本质上就是第一个NPC问题“逻辑电路”。

  内容:迪奥拉里卡声称已经证明,询问一组逻辑陈述是否能同时成立或者互相矛盾,其中:

  • 询问给定布尔公式的变量是否可以一致地用值TRUE或FALSE替换,公式计算结果为TRUE。如果是这种情况,公式称为可满足。
  • 另一方面,如果不存在这样的赋值,则对于所有可能的变量赋值,公式表示的函数为FALSE,并且公式不可满足。[7]

  任何程序都无法迅速解答这个问题,因此,它不是一个P问题。

  意义:如果迪奥拉里卡的答案成立,说明P问题和NP问题是不同的两类问题,这也意味着计算机处理问题的能力有限,很多任务的复杂性从根本上来说也许是无法简化的。
对于有些NP问题,包括因数分解,P≠NP的结果并没有明确表示它们是不能被快速解答的;但对于其子集NPC问题,却注定了其无法很快得到解决。其中一个著名的例子就是旅行商问题(Travelling Salesman Problem),即寻找从一个城市到另一个城市的最短路线,答案非常容易验证,不过,如果P≠NP,就没有计算机程序可以迅速给出这个答案。

总结

  从人类有了计算这样的概念,到图灵首次提出可计算性问题过去了上千年时间。由此拉开对于计算复杂性领域探讨的序幕:Cook-Karp、Church分别提出实际可计算,与图灵可计算;虽然是计算复杂性理论的基本问题,但仍然仅停留在猜想。对于时间复杂度的讨论,人们提出了P问题,扩展到NP问题,并规约到NPC问题,进而延伸到NPH问题,本身已经是知识的灰色地带了,而在灰色之外的Non-NP问题,人们更是一无所知。

  到如今又过去了上百年的时间。但这依然仅仅是开始,对于这一领域上,我们了解的实在是太少了。对于问题复杂性这样抽象而晦涩对象的探究实在很难一直保持清醒的思维。很多难以理解的抽象过程和概念。即使我们自以为了解了,却不一定真的能理解。似乎这些理念都像是漂浮在空中一样,没有具体的对应物,并且对于这些问题的探讨与现实中真正去实现的工程项目更是关联很远。在这样边缘的领域上,更多人仅仅是一知半解,很少有人真正涉足。

  未来,对于NP问题的研究还会继续深入。停留在形式化的逻辑推理实际上已经是举步维艰。很难,甚至是不可能做到那样“理想”和“理性”主义,实现一个NPC问题的解决方法,或是实现一个终极、通用的强人工智能。更多情况下,应该尝试理想与实践结合、理性与经验结合,就像机器学习中连接主义和符号主义竞争的那样,虽然总是一起一伏,但两者始终是势均力敌,并且在不断碰撞中演进。

参考文献

[1]Church, Alonzo. A set of Postulates for the Foundation of Logic. Annals of Mathematics. 1932, 33 (2): 346–366. JSTOR 1968337. doi:10.2307/1968337

[2]Gödel, Kurt. On Undecidable Propositions of Formal Mathematical Systems. (编) Davis, M. The Undecidable. Kleene and Rosser (lecture note-takers); Institute for Advanced Study (lecture sponsor). New York: Raven Press. 1965 [1934].

[3]Kleene, Stephen Cole. Lambda-Definability and Recursiveness. Duke Mathematical Journal. 1936, (2): 340–353.

[4]Pour-El, M.B.; Richards, J.I. Computability in Analysis and Physics. Springer Verlag. 1989.

[5]算法导论

[6]COOK.S.A, The complexity of theorem proving procedures[C].Proceedings of the 3rd Annual ACM Symposium on the Theory of Computing, New York, 1971:151_158

[7]王建新,管利娜,江国红. 可满足性问题的研究综述[J]. 计算技术与自动化,2009,28(4):138-143.doi:10.3969/j.issn.1003-6199.2009.04.036.

你可能感兴趣的:(计算复杂性综述)