首先引入P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。而NP复杂度问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是:可以在多项式时间里验证一个解的问题。
之所以要定义NP问题是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行地问题存在一个解决它地多项式级的算法。
显然所有的P问题都是NP问题。也就是说,能多项式解决的问题必然能多项式地证明一个问题地解。但是NP问题≠P问题。这是因为人们在研究NP问题地过程中找到了一种特殊的NP问题叫NP-完全问题,也就是NPC问题。
说到NPC问题,这里首先引入一个概念——约化。如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。很显然,约化具有传递性。
从约化的定义中我们看到,一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。这一类问题就是传说中的NPC 问题。NPC问题的定义非常简单。
同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。现在被证明是NPC问题的有很多,任何一个找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P问题≠NP问题。