‘壹’ p=NP是什么意思
P对NP问题是克雷数学研究所高额悬赏的七个千禧年难题之一,同时也是计算机科学领域的最大难题,关系到计算机完成一项任务的速度到底有多快。
1、简介
P对NP问题是Steve Cook于1971年首次提出。"P/NP问题",这里的P指在多项式时间(Polynomial)里,一个复杂问题如果能在多项式时间内解决,那么它便被称为P问题,这意味着计算机可以在有限时间内完成计算;NP指非确定性多项式时间(nondeterministic polynomial),一个复杂问题不能确定在多项式时间内解决,假如NP问题能找到算法使其在多项式时间内解决,也就是证得了P=NP。比NP问题更难的则是NP完全和NP-hard,如围棋便是一个NP-hard问题。2010年8月7日,来自惠普实验室的科学家Vinay Deolalikar声称已经解决了"P/NP问题" ,并公开了证明文件。
2、排序问题
如果我们只能通过元素间的相互比较来确定元素间的相互位置,而没有其他的附加可用信息,则排序问题的复杂性是O(nlgn),但是排序算法有很多,冒泡法是O(n^2),快速排序平均情况下是O(nlgn)等等,排序问题的复杂性是指在所有的解决该问题的算法中最好算法的复杂性。问题的复杂性不可能通过枚举各种可能算法来得到,一般都是预先估计一个值,然后从理论上证明。
3、定义
为了研究问题的复杂性,我们必须将问题抽象,为了简化问题,我们只考虑一类简单的问题,判定性问题,即提出一个问题,只需要回答yes或者 no的问题。任何一般的最优化问题都可以转化为一系列判定性问题,比如求从A到B的最短路径,可以转化成:从A到B是否有长度为1的路径?从A到B是否有长度为2的路径?。。。从A到B是否有长度为k的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图的哈米尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。比如说对于哈米尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈米尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。这种可以在多项式时间内验证一个解是否正确的问题称为NP问题。显然,所有的P类问题都是属于NP问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。这就是P对NP问题。
4、P≠NP论证
如果P=NP,那么每个答案很容易得到验证的问题也同样可以轻松求解。这将对计算机安全构成巨大威胁,目前加密系统的破解就相当于要将一个整数分解为几个因数的乘积,正是其求解过程的繁琐,才能杜绝黑客的入侵。
而现在,美国惠普实验室的数学家维奈·迪奥拉里卡围绕一个众所周知的NP问题进行论证,给出了P≠NP的答案。这就是布尔可满足性问题(Boolean Satisfiability Problem),即询问一组逻辑陈述是否能同时成立或者互相矛盾。迪奥拉里卡声称,他已经证明,任何程序都无法迅速解答这个问题,因此,它不是一个P问题。
如果迪奥拉里卡的答案成立,说明P问题和NP问题是不同的两类问题,这也意味着计算机处理问题的能力有限,很多任务的复杂性从根本上来说也许是无法简化的。
对于有些NP问题,包括因数分解,P≠NP的结果并没有明确表示它们是不能被快速解答的;但对于其子集NP完全问题,却注定了其无法很快得到解决。其中一个着名的例子就是旅行商问题(Travelling Salesman Problem),即寻找从一个城市到另一个城市的最短路线,答案非常容易验证,不过,如果P≠NP,就没有计算机程序可以迅速给出这个答案。
迪奥拉里卡的论文草稿已经得到了复杂性理论家的认可,但随后公布的论文终稿还将接受严格的审查。