P问题和NP问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011510825/article/details/81180529

最近在读图解算法,看到P问题和NP问题,分享下书中的知识,加上自己的见解,帮助大家更好的理解P、NP及其他们之间的关系。

首先,我们需要了解概念。

什么是P问题?

P是英文单词多项式(Polynomial)的第一个字母。如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。例如,常见的排序算法时间复杂度,快速排序(O(log(n))),冒泡排序(O(n^2)))等。

什么是NP问题?

会不会所有的问题都可以找到复杂度为多项式级的算法呢?很遗憾,答案是否定的。有些问题甚至根本不可能找到一个正确的算法来,这称之为“不可解问题”(Undecidable Decision Problem)。

举出一个不大可能会有多项式级算法的问题来:Hamilton回路。问题是这样的:给你一个图,问你能否找到一条经过每个顶点一次且恰好一次(不遗漏也不重复)最后又走回来的路(满足这个条件的路径叫做Hamilton回路)。

NP问题不是非P类问题。NP问题是指可以在多项式的时间里验证一个解的问题。请注意,他只能验证一个解的问题,还是举例Hamilton回路,也就是说,你告诉他一条线路,他告诉能不能满足这个条件,告诉你YES和NO。对于这种问题,你要算出所有可能的话,只能使用穷举法。但是这种O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。

所以NP问题是时间复杂度一般是O(a^n)和O(n!)型。

P问题和NP问题的关系?

就目前还说,只有一个结论,NP问题是包含P问题的。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。很显然,所有的P类问题都是NP问题。

剩下的一些没有被解决的问题?

NP比P大吗?

NP看起来比P大,NP包含P。

有没可能NP=P?

不知道,尚未有人证实。

目前还没有人可以证明NP=P或者NP不等于P。

猜你喜欢

转载自blog.csdn.net/u011510825/article/details/81180529