一眼看懂什么是P问题、NP问题和NPC问题

话不多说直接开整!

我们先来看一下比较官方定义的这三个问题:

P问题

P问题是指可以在多项式时间内解决的问题。也就是说,存在一个算法可以在多项式时间(例如O(n^k),其中n表示输入规模,k为常数)内给出问题的正确答案。P问题被认为是效率良好的问题。

NP问题

NP问题是指在多项式时间内可以验证答案的问题。虽然我们不能保证在多项式时间内找到问题的解,但如果我们有一个候选解,我们可以在多项式时间内验证它是否是正确的。如果对于一个问题的解可以在多项式时间内验证,那么该问题属于NP问题。

NPC问题

NPC问题(NP完全问题)是NP问题的一种特殊情况。如果一个问题是NPC问题,那么它既是一个NP问题,而且所有的NP问题都可以在多项式时间内约化到该问题。简单来说,如果我们能够在多项式时间内解决一个NPC问题,那么我们可以在多项式时间内解决所有的NP问题。即P = NP。NPC问题之间可以通过多项式时间约化(reduction)相互转化。

(文章结尾会有对约化和多项式时间的解释)

关于P、NP和NPC问题的关系,有一个重要的问题未解决,即P与NP问题是否相等。目前尚未找到证据证明二者相等或不相等。如果P = NP,则意味着NP问题中的任何一个问题都可以在多项式时间内解决;如果P ≠ NP,则意味着存在一些问题无法在多项式时间内解决。

下面我会举几个例子来帮助大家更好的理解这三个问题:

首先我对多项式时间的理解就是一定时间内

P问题的例子:计算两个整数的乘积。给定两个整数a和b,我们可以直接执行乘法运算来得到结果c=a*b。这个问题可以在一定时间内(多项式时间内)解决,因为乘法运算的时间复杂度是0(1),所以它属于P问题。

NP问题的例子:给定一个问题比如1+1等于几(假设不知道1+1=2),在一定时间内(多项式时间)算不出1+1等于几,但是如果我们提前知道了这个问题的答案等于2我们就可以在一定的时间内(多项式时间)去验证这个答案也就是验证1+1是否等于2。

NPC问题的例子:NPC问题是一类特殊的NP问题,它具有以下两个性质:
            1.NPC问题是NP问题。给定一个候选解,我们可以在多项式时间内验证它是否正确。
            2.所有其他的NP问题都可以在多项式时间内约化为NPC问题。也就是说,如果我们能够在多项式时间内解决一个NPC问题,我们就能在多项式时间内解决所有的NP问题。

举个例子来说明,假设我们有一个NPC问题X,而另一个NP问题Y。现在我们希望解决问题Y,但我们不知道如何在一定时间内(多项式时间)直接解决它。但是,我们已经知道了一个算法可以在一定时间内(多项式时间)将问题Y约化为问题X
根据这个逻辑,我们可以采取以下步骤来解决问题Y:
              1.将问题Y约化为问题X:使用已知的一定时间内(多项式时间)的算法将问题Y转换为问题X的实例。
              2.解决问题X:由于问题X是NPC问题,我们知道可以在一定时间内(多项式时间)解决它。
              3.反向约化:根据问题X的解,通过反向约化将解转换回问题Y的解。

通过这个过程,我们能够间接地解决问题Y,尽管我们没有直接解决问题Y的方法,但我们利用了问题Y和问题X之间的关系,从而解决了问题Y。这证明了NPC问题的重要性,因为如果我们能够在多项式时间内解决一个NPC问题,我们就可以在多项式时间内解决所有的NP问题。

补充:

多项式时间:多项式时间是指在计算机科学中,算法的运行时间与问题输入规模之间的关系可以用一个多项式函数来描述。简单来说,算法的运行时间不会呈指数爆炸式增长。
举例来说,如果一个算法的运行时间为O(n^2),其中n表示问题的输入规模,那么当问题规模增加一倍时,算法的运行时间会增加四倍(2^2)。而如果一个算法的运行时间为O(n^3),那么当问题规模增加一倍时,算法的运行时间会增加八倍(2^3)。通常关注多项式时间的次数(或称为阶数),而不太关心前面的系数。

约化:在计算复杂性理论中,约化(reduction)是一种将一个问题转换为另一个问题的过程。
比如说,现在有两个问题:求解一个一元一次方程和求解一个一元二次方程。那么我们说,前者可以约化为后者,意即知道如何解一个一元二次方程那么一定能解出一元一次方程。我们可以写出两个程序分别对应两个问题,那么我们能找到一个“规则”,按照这个规则把解一元一次方程程序的输入数据变一下,用在解一元二次方程的程序上,两个程序总能得到一样的结果。这个规则即是:两个方程的对应项系数不变,一元二次方程的二次项系数为0。按照这个规则把前一个问题转换成后一个问题,两个问题就等价了。

以上例子只是为了解释特定方面,并不能涵盖所有问题。现实世界中的问题具有更大的复杂性和多样性。这个观点仅代表个人看法,欢迎多提宝贵意见和不同观点。
原文部分引用:http://www.matrix67.com/blog/archives/105

你可能感兴趣的:(人工智能,算法,机器学习)