1.如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。
2.NP问题是指可以在多项式的时间里验证一个解的问题。NP问题的另一个定义是:可以在多项式的时间里猜出一个解的问题。
很显然,所有的P类问题都是NP问题。也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。
3.NPC问题:为了说明NPC问题,我们先说一下约化(归约)。一个问题A可以约化为问题B的含义即是,可以用问题B的解决方法来解决问题A。问题A可以“变成”问题B。B的时间复杂度高于或等于问题A的时间复杂度。
NPC问题的定义:
首先,它得是一个NP问题。然后,所有的NP问题都可以约化到它。
同时满足这两个条件的问题就是NPC问题。
NPC问题的证明:(证明A问题是NPC问题的方法)
(1)证明A是NP问题
(2)选择一个已知的NPC问题A'
(3)构建转换过程f使得A'转换为A
(4)证明f是多项式的
NPC问题:
团问题,顶点覆盖问题,哈密顿回路问题,旅行商问题,子集和问题
4.NP-Hard问题:首先,所有的NPC问题都是属于NP-Hard的。其次,如果一个问题不知道其是否属于NP,但是我们知道有某个NPC问题可以被多项式转化为该问题,则该问题属于NP-Hard。
NP-Hard证明:(证明A是NP-Hard问题)
(1)选择一个已知的NPC问题A'
(2)构建转换过程f使得A'转换为A
(3)证明f是多项式的转换
5.它们之间的关系: