NP-C问题),是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
基础概念:
P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。判定问题:判断是否有一种能够解决某一类问题的能行算法的研究课题。
NP类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。
NPC问题:NP中的某些问题的复杂性与整个类的复杂性相关联.这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的.这些问题被称为NP-完全问题(NPC问题)。
------------------------------------------前提介绍分割线---------------------------------------------------------------------
在一个周六的晚上,你参加了一个盛大的晚会。由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。
生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个例子。与此类似的是,如果某人告诉你,数13,717,421可以写成两个较小的数的乘积,你可能不知道是否应该相信他,但是如果他告诉你他可以因式分解为3607乘上3803,那么你就可以用一个袖珍计算器容易验证这是对的。人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想。 不管我们编写程序是否灵巧,判定一个答案是可以很快利用内部知识来验证,还是没有这样的提示而需要花费大量时间来求解,被看作逻辑和计算机科学中最突出的问题之一。它是斯蒂文·考克于1971年陈述的。
我们一直在解读,“P versus NP”之所以成为“世纪难题”,失足于NP定义:NP=Nondeterministic Polynomial time (不确定性多项式时间),遂有流行观念“NP是多项式时间可验证的”,与此相关,还有一个流行观念“NP是可计算的”。这些观念直接导致计算复杂性理论(Computational complexity theory) 与可计算性理论(Computability theory) 相分离, 作为计算复杂性理论基础的NP完备理论(NP-completeness theory). 就成了无源之水, 无本之木!
于可计算性理论,按人们一般的理解,顾名思义是研究“可计算性”,即研究哪些问题是可计算的,然而,若追本溯源,可以看到,此理论的目的是通过“可计算性”,研究与之相对的“不可计算性”。
“可计算性”概念源于古老的西方哲学问题:思维机械化,其中心议题是设想通过将思维表达成计算,来检验和消除认知错误, 正如莱布尼茨所说: -纠正我们推理的唯一方式是使它们同数学一样准确、明晰,这样我们能一眼看出我们的错误,并且在人们有争执的时候,可以简单的说,让我们计算(calculemus), 而无须进一步的忙乱,就能看出谁是正确的.(The only way to rectify our reasonings is to make them as tangible as those of the Mathematicians, so that we can find our error at a glance, and when there are disputes among persons, we can simply say: Let us calculate [calculemus], without further ado, to see who is right.)
于20世纪初,希尔伯特正式提出了利用计算机彻底系统解决所有数学问题的计划,其中的希尔伯特第10问题,又称“丢番图方程问题”,即探究求解任意的丢番图方程的算法的存在性。然而,哥德尔几乎在同时提出了“哥德尔不完备定理”,证明了不存在着这样的算法,它能正确回答有关初等数论的全部问题。
接着,图灵进一步提出普遍意义上的计算机模型-“图灵机”,严格证明了不存在这样的图灵机,一般性地表达为“判定问题(Decision Problem)”, 由此形成了可计算性理论的核心内容. 于20世纪40年代,发明了基于冯·诺伊曼结构的实际计算机,计算机应用广泛开展起来,于实际应用中出现了一些计算困难的问题,“计算复杂性理论”于此创生。
一般说来,计算复杂性理论研究“复杂性”,即研究那些计算困难问题的“复杂性”,库克(Cook)于1971年的那篇论文《The Complexity of Theorem Proving Procedures》,引入 Nondeterministic Turing Machine(NDTM),将那些计算困难的问题定义为NP(Nondeterministic Polynomial time) 由于NDTM的本质是图灵机(TM)遂有诸如 “NP是多项式时间可验证的”、“NP是可计算的”的流行观念,其相关理论称之“NP完备理论”。 由此可见,原本NP的提出是针对计算困难的问题. 与P相对,然而NP的流行观念混淆了NP与P的本质区别,导致NP的本质“不确定性”消失,是有计算复杂性理论与可计算性理论完全脱节,这是造成现有的NP完备理论严重困难的最根本性的原因。
希望通过结构化知识,提高学习效率,让你的工作时间更值钱,赚钱更高效!------------《 数据分析笔记》