怎么理解 P 问题和 NP 问题

供稿:hz-xin.com     日期:2024-04-28
怎么理解 P 问题和 NP 问题


P的含义是polynomial(多项式的)。
要了解什么是P问题NP问题,首先要引入算法和时间复杂度的概念。
算法一般指的是一套用于解决问题的流程。算法要保障结果的正确性和运行效率。
对于时间复杂度,一般指的是运算步骤次数和数据量之间的关系。比如说对于一个算法,如果数据量为n,那么如果它的运算步骤次数为2*N^2+2次,我们取最高影响的那一项为N^2。这项是整个算法增长速度最快一项。于是我们把算法复杂度计成O(N^2)。
一般的算法关系如此O(logn)<O(n)<O(n*logn)<O(n^2)等等
然后若K和C是任意常数,如果C<1,则O(C^n)<O(1)<O(n^k)。反之,若C>1,O(C^n)>O(n^k)。就好比2的n次方比n的任意阶多项式都增长得快。
P问题指的是一些能够被多项式时间复杂度的算法准确解出的问题。而NP问题是目前为止,尚未发现多项式时间复杂度内算法能够解决的问题。NP问题目前最快也是指数级别的算法时间复杂度。
在当前,我们有时会用近似算法快速解决NP问题。对于近似算法(有时用贪心法,有时用放宽条件的线性规划),我们会得到接近最优解的可行解。比如求一个最大值,我如果用的是0.9倍近似算法,意味着我的算法产生的结果最小也是最优解的0.9倍。这样可以保障得到的结果足够好。
如果P=NP被证明了,也就是说NP问题都能被多项式时间复杂度解决了,那这将是人类历史的巨大变革。
在目前准确解决NP问题的技巧中,你可以使用决策树算法,算法核心以及动态规划结合图的树分解等技巧。然而,这些算法技巧还不足以把NP问题放在多项式时间复杂度下面解决。