发现我们经常谈到NP问题,NP完全问题,NP难问题,但是其实他们之间是有区别的。
2、NP问题是指可以在多项式的时间里验证一个解的问题(注意,NP问题不是非P问题!!!)。所以比如最短路问题、TSP旅行商问题,一个解出来了(一条路径出来了),那么我验证这个解(计算这条路径的长度)可以在O(n)的复杂度里解决,所以是NP问题。
3、NPC(NP Complete,NP完全)问题满足:首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。证明一个问题是NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性)。第一个NPC问题是逻辑电路问题,并且可以证明所有NP问题都能约化到它(证明过程复杂)。TSP问题是NPC问题。
4、NP Hard问题满足NPC问题定义的第二条但不一定要满足第一条(即所有NP问题都可以约化到它,但它不一定是NP问题),所以NP Hard问题包含了NPC问题。
所以P问题一定是NP问题,NPC问题也一定是NP问题,NPC问题也一定是NP Hard问题,但NP Hard问题不一定是NP问题。(关系如下图)
参考资料:
[1]、http://www.matrix67.com/blog/archives/105