计算理论初步:P vs NP 问题

1.问题概述

P = NP?

这个问题,作为理论计算机科学的核心问题,其声名早已经超越了这个领域。它是Clay研究所的七个百万美元大奖问题之一,在2006国际数学家大会上,它是某个1小时讲座的主题。

要说起P和NP是什么东西,得先从算法的多项式时间复杂度谈起,注意,这里面的两个P都是指Polynomial。

一个问题的规模指的是输入的总位数,比如一个n个数的排序问题,输入规模就是n。注意,在某些时候,输入规模是要值得注意的,比如判定一个数n是否是一个质数这个问题,它的输入规模并不是n,而是log(n),因为一个数n用大约log(n)位就能表示出来了,这也是为何枚举因子判定素数的算法并不是多项式时间算法的原因。

如果一个算法,它能在以输入规模为参变量的某个多项式的时间内给出答案,则称它为多项式时间算法。注意:这里的多项式时间是指算法运行的步数。一个算法是否是多项式算法,与计算模型的具体的物理实现没有关系,虽然大多数假想的计算模型不可能有任何物理的实现。

P指确定型图灵机上的具有多项式算法的问题集合,NP指非确定型图灵机上具有多项式算法的问题集合,这里N是Non-Deterministic的意思(图灵机的概念见理论计算机初步:算法和计算模型)。

脱离图灵机的概念,就在普通的计算机上看,P问题是指能够在多项式时间求解的判定问题(判定问题指只需要回答是和不是的问题),而NP问题则是指那些其肯定解能够在给定正确信息下在多项式时间内验证的判定问题。比如,要判定一个数是合数,如果给我一个约数,我们就很快判定它就是合数。所以判定一个数是合数的问题属于NP。 下面是一些NP问题的例子:

零子集和问题

给n个整数,判断是否可以从中找到若干个数,其和为0。

旅行商问题

有n个城市,一个推销员要从其中某一个城市出发,不重复地走遍所有的城市,再回到他出发的城市。问这个推销员的最短路程(是否小于指定的K)。

从上面的定义知道,NP包含P。P vs NP问题指P是否完全等于NP,即确定型图灵机和非确定图灵机的性能是否一样。

人们为何要提出NP问题?因为,大多数遇到的自然的难解问题,最后都发现它们是NP问题。如果我们能证明NP跟P的关系,则解决了无数问题的算法复杂度问题。

NP里面有无数个不同的问题,我们是否要一个一个地判定它们是否属于P呢?P vs NP问题的美妙和简洁之处便在于在NP中,有一个子类,NP完全(NP Complete,简记为NPC)问题,指的是那些NP中最难的那些问题:所有其它的NP问题都可以归约到这些NP完全问题。也就是说,只要这些NP完全问题的某一个得到解决,无论是证明其存在多项式算法,还是不存在,都意味着P vs NP

问题的解决。

而几乎所有NP里面无法确定是否属于P的问题最后都被证明为NP完全。正因为如此,多数理论计算机学家都猜测P≠NP。目前已知的NP完全问题数以千计,上面引用中的例子都是完全问题,更多NP完全问题见NP完全问题的不完全列表。

一个很自然的想法是如果NP≠P,则NP-P里面的问题都是完全问题。至少有两个自然的问题,一个是大数分解(给出一个数的质因数分解式),另一个是图同构问题(给出两个图,它们是否同构),它们既没有被证明是P的,也没有被证明是NP-完全。但是更惊人的是还有这个定理:

如果NP≠P,那么NP-P中存在非NP完全问题。

当然,这种问题具体是什么样子,是无法用直观的语言表示出来,它纯粹是一个数学上的构造性证明。

参阅:

Complexity classes P and NP - Wikipedia, the free encyclopedia, P/NP问题- Wikipedia

Turing machine - Wikipedia, the free encyclopedia, 图灵机- Wikipedia

NP-hard - Wikipedia, the free encyclopedia,

2. P vs NP - 历史,现状和未来

上篇已经提到,P vs NP是理论计算机科学的核心问题。从数学的角度来说,它和其他历史上有名的数学问题一样,给与人们一个智力上重大的挑战。而更为重要的是,在无数与计算有关的的学术领域中,NP-完全问题以各种不同形式层出不穷。因此,这并不是一个纯粹的与世独立的智力游戏,而是对计算机科学有全面影响力的问题。

历史上的进展

从上个世界70年代初这个问题被Cook提出以来,人们发展了各种工具来试图解决它,下面引自堵丁柱&葛可一的《计算复杂性导论》前言:

人们在七十年代开始对NP-完全问题的研究主要是横向发展,也就是以许多不同的计算模型来分析难解问题的本质。这些新的计算模型包括了平行计算模型、概率计算模型、布尔线路、判断树、平均复杂性、交互证明系统以及程式长度复杂性等等。对这些新的计算模型的研究一方面使我们对难解问题有了更深一层的认识,一方面也产生了一些预想不到的应用。最显著的一个例子就是计算密码学的革命性突破:基于NP问题的公钥密码体系。另一个有名的例子是线性规划的多项式时间解的发现。

到了八十年代中,对NP-完全问题的研究有了纵向的突破,在许多表面看来并不相关的计算模型之间发现了深刻的刻划关系。这些刻划关系不但解决了几个令人困扰多年的未解问题,同时也刺激了其它相关领域的发展。其中之一是对线路复杂性的研究发现了一些问题在某种有限制的线路模型中必有指数下界。这些结果使用了组合数学与概率方法等新的数学工具,并且解决了一个有名的有关多项式分层的未解问题。另一个更重大的结果是以概率可验证明对NP类的刻划。由此得出了许多组合优化问题近似解的NP-完全性,从而刺激了算法界对近似算法研究的新热潮。这个结果来自于对交互证明系统这个概念的扩展,并且使用了线性代数与编码理论等数学证明技巧。

但是,明显的,目前还没有一个看上去有希望的方向。相反的,1993年Razborov和Rudich证明的一个结果表明,给定一个特定的可信的假设,在某种意义下“自然”的证明不能解决P vs NP问题。这表明一些现在似乎最有希望的方法不太可能成功。随着更多这类的定理得到证明,该定理的可能证明有越来越多的陷阱要规避。

数学里最伟大的定理之一——费马大定理,用了数学家300多年时光。P vs NP问题,作为理论计算机领域最困难的问题,40年时间似乎太短了。

不过我还是相信,这个问题被拖这么长时间,是因为没有足够伟大的数学家来做这个问题。

大牛们怎么看?

对于NP是否等于P,大家看法不一。在2002年对于100个研究者的调查中,61人相信答案是否定的,9个相信答案是肯定的,22个不确定,而8个相信该问题可能和现在所接受的公理独立,所以不可能证明或证否。同时,在被询问到这个问题可能在何时被解决时,79个人给出了确切的数字,统计结果如下:

1. P=NP will be resolved between 2002-2009: 5

2. P=NP will be resolved between 2010-2019: 12

3. P=NP will be resolved between 2020-2029: 13

4. P=NP will be resolved between 2030-2039: 10

5. P=NP will be resolved between 2040-2049: 5

6. P=NP will be resolved between 2050-2059: 12

7. P=NP will be resolved between 2060-2069: 4

8. P=NP will be resolved between 2070-2079: 0

9. P=NP will be resolved between 2080-2089: 1

10. P=NP will be resolved between 2090-2099: 0

11. P=NP will be resolved between 2100-2110: 7

12. P=NP will be resolved between 2100-2199: 0

13. P=NP will be resolved between 2200-3000: 5

14. P=NP will never be resolved : 5.

在这份调查报告中,还有国际上著名的计算机学家对这个问题的看法,比如:

Avi Wigderson: (Institute of Advanced Study) I think this project is a bit premature. I think we know too little of what is relevant to even guess answers to your questions, certainly if "we" s replaced by "I"

The only thing I can definitely say, is that it is one of the most important and interesting questions ever asked by humans, and more people and resources should participate in filling up the holes that would allow better guesses of answers to your questions.

姚期智: (Princeton) It‘s hard to say when the question will be resolved. I don‘t have even an educated guess. Probably the resolution is that P is not equal to NP. I think the mathematical techniques used will be beautiful.

可能的极为诡异的结果

从实际应用来说,人们都希望NP=P,因为这意味着很多问题都能有有效的算法,但有些极为诡异的结果也是可能的,人们从这个结果中什么都得不到。

比如某一天人们最终使用某种数学上的技巧证明了NP问题的多项式时间算法的存在性,但并不知道如何找到它——这在数学上是极为可能的,那最终会怎么样呢?

这种情况不会发生,事实上,在NP=P的假设下,人们已经找到了NP完全问题的多项法解法,但这并没有好太多,因为这个算法是这样的:

// 接受NP完全语言的一个算法。

//

// 这是一个多项式时间算法当且仅当P=NP。

//

// “多项式时间”表示它在多项式时间内返回“是”,若

// 结果是“是”,否则永远运行。

//

// 输入:S = 一个自然数的有限集

// 输出:是 如果某个S的子集加起来等于0。

// 否则,它永远运行没有输出。

// 注:上面这是一个NP完全问题

//

// 程序数P 是你将一个整数P写为二进制,然后

// 将位串考虑为一个程序。

// 每个可能的程序都可以这样产生,

// 虽然多数什么也不做因为有语法错误。

FOR N = 1…infinity

FOR P = 1…N

以S为输入运行程序数P N步

IF 程序输出一个完整的数学证明

AND 证明的每一步合法

AND 结论是S确实有(或者没有)一个和为0的子集

THEN

OUTPUT 是(或者不是)并停机

如果NP=P,上面这个算法便是一个NP完全问题的多项式时间算法。可是它一点价值都没有,更不用说来解决实际问题了。

另一种可能性:独立问题?

自从Godel的开创性结果以来,我们知道某些问题,比如连续统假设,是不可能从目前的条件(公理系统)推导出来的。有人怀疑P vs NP问题也是这样。这样的话,如果不存在NP完全问题的有效算法,我们不可能证明这一点。同样,如果存在一个有效的算法,我们也不可能找到它。

参考文献:

P verse NP problem

The history and status of P verse NP question

千禧年大奖难题(一)

堵丁柱, 葛可一, 计算复杂性导论 , 高等教育出版社, 2002

时间: 2024-10-07 18:14:40

计算理论初步:P vs NP 问题的相关文章

第一章《3D理论初步》

?? 小伙伴们,你们好! 经历了两年多的Cocos2d-x的学习与开发,我相信你们都已经成长为一名合格的Cocos2d-x程序员.但是,千万不要觉得这样就可以万事无忧了!3D时代已经来临,3D手游的产品越来越多,怎么办?使用Unity3D?嗯,是啊,Unity3D看起来不错的样子,不过,你是愿意放弃长期习惯的VC++的开发方式?你是否愿意放弃开源引擎自由掌控代码的感觉?你是否愿意从此站在引擎底层之外,只是做一个使用者? 如果你想快速的基于现有的Cocos2d-x经验或项目来增加3D部分功能,或者

Marr的视觉计算理论

? ? ????Marr的视觉计算理论立足于计算机科学,系统地概括了心理物理学.神经生理学.临床神经病理学等方面已取得的所有重要成果,是迄今为止最为系统的视觉理论.Marr 的视觉计算理论虽然在细节甚至在主导思想方面尚存在大量不完备的方面,许多方面还存有许多争议,但至今为止仍是广大计算视觉研究人员接受的基本框架.计算机视觉这门学科的形成,应该说与这一理论框架有密切的关系,下面我们从几个方面来描述这一理论框架. Marr 从信息处理系统的角度出发,认为视觉系统的研究应分为三个层次,即计算理论层次.

计算理论中的莱斯定理(Rice's Theorem)——证明与应用

我们给出一个在探讨不可判定性时非常有用的结论--莱斯定理(Rice's Theorem).首先,我们来看前面讨论过的几个不可判定的例子: 这些都是由图灵机识别之语言的性质.而莱斯定理告诉我们,任何由图灵机识别之语言的非平凡性质(nontrivial property)都是不可判定的. 最后通过几个例子来探讨一下莱斯定理的应用.来看看下面这个语言能否使用莱斯定理来确定其可判定性. {<M> | M是一个TM,且L(M)可由一些拥有偶数个状态的图灵机识别} 首先来确定这是否是一个语言属性,显然是的

计算机软考笔记之《计算理论》

1.引言 为了回答诸如此类问题:哪些问题可以通过计算机解决?语言之间是否存在优势?运行一个程序前,是否可以确定该程序将要停止(终止)还是永远运行?用一种特定的语言解决一个问题需要多长时间?我们求助于一门学科:计算理论. 2.简单语言 通过简单语言可以看到计算机解决任何问题所需要最少语句是三条.它们是递增语句,递减语句和循环语句. 我们可以证明这种简单的语言能模拟一些流行语言中的多个语句.我们把每个模拟称为一个宏,它可以在其他模拟中使用,而不需要重复编码. ①简单语言中的宏 ②输入和输出 3.图灵

逻辑学和计算理论相关概念

集合:参见集合与函数相关定义 映射:参见集合与函数相关定义 满射:参见集合与函数相关定义 单射:参见集合与函数相关定义 关系:参见集合与函数相关定义 自反关系:参见集合与函数相关定义 传递关系:参见集合与函数相关定义 对称关系:参见集合与函数相关定义 等价关系:某个关系满足自反.传递.对称,则称它为等价关系 自然数集N:我们通常所见的由0,1,2,3,4-构成的集合 实数集R:通常我们能看到的数就是这个 复数集C:代数方程的根的集合 代数数:一个数为代数数,当且仅当它是某个整系数多项式方程的根

计算理论的重大突破,无限深度递归

目前无论是Lisp还是Javascript(C++就更不用说了),递归深度都远远低于可用内存大小,而且栈一旦分配就无法挪动(有指针似乎无解),这个问题的根源在于call指令会把下一指令的地址入栈.我经过几年的思考终于发现,可以把C++的内存模型完全放在堆上,也就是说进行call之前先new出调用函数所需要的空间,而把返回地址作为参数传递进去.这样就从根源上解决了此问题,那什么尾递归就是个渣,完全没有通用性.还有个好处就是程序长时间运行可以合并大量零碎内存. 比较有意思的评论: call 需要调用

计算理论导引(计算理论导论)原书第三版

带有目录 推荐下载地址,进入下载地址,[点击普通下载] 备用下载地址,进入下载地址,[点击普通下载] 原文地址:https://www.cnblogs.com/Iamasdf/p/12558173.html

NP难问题求解综述

NP难问题求解综述 摘要:定义NP问题及P类问题,并介绍一些常见的NP问题,以及NP问题的一些求解方法,最后最NP问题求解的发展方向做一些展望.   关键词:NP难问题 P类问题 算法 最优化问题   正文: 一.NP难问题及P类问题 为了解释NP难问题及P类问题,先介绍确定性算法和非确定性算法这两个概念,设A是求解问题Π的一个算法,如果在算法的整个执行过程中,每一步只有一个确定的选择,则称算法A是确定性(Determinism)算法.设A是求解问题Π的一个算法,如果算法A以如下猜测并验证的方式

自动机理论、语言和计算导论 by John E. Hopcroft

计算理论是计算机应用的基础,理论和应用缺一而不可. ---- 目录 ---- C01 自动机 C02 有穷自动机 C03 正则表达式与正则语言 C04 正则语言的性质 C05 上下文无关文法及上下文无关语言 C06 下推自动机 C07 上下文无关语言的性质 C08 图灵机 C09 不可判定性 C10 难解问题 C11 其他问题类 ---- C01 自动机 ---- 有穷自动机(FA)的两个重要因素是状态和跳转,状态是数据/环境,跳转是函数/响应. 自动机的结构表示法有两种,一种是正则表达式,正则