NP,NPC,NPhard问题说明
P问题是初始问题,所有这类问题都可以用一个确定性算法在多项式时间内求出解。
NP问题,能够多项式时间求得解,或者多项式时间内判断是否是正确的,P包含于NP
NPC问题,全部NP问题在多项式时间内,可以约化到的问题,NPC包含于NP
NPH问题,NPC问题在多项式时间内,可以约化到的问题,NPC包含于NPH,但NPC与NP和P无必然联系
约化
如果能找到一个变化法则,对任意一个 A 程序的输入,都能按照这个法则变换成 B 程序的输入,使两程序的输出相同,那么问题 A 可以约化为问题 B 。约化具有传递性。
多项式时间
多项式时间指的是一个算法的复杂度,要算法的复杂度不是指数或者阶乘型,O(1)到O(n^m)(m为常数)任意组合都算是多项式级的复杂度,它们的规模n都出现在底数位置;而O(2ⁿ),O(n!)型 复杂度,就是非多项式级的。总有:指数时间 > 多项式时间 > 线性时间 > 常数时间。
常见多项式时间复杂度的关系为:O(1)<O()<O()<O()<O()<O()
常见非多项式时间复杂度关系为:O()<O()<O()
常用的时间复杂度按照耗费的时间从小到大依次是:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)
以下部分转载,来源:NP,NPC,NPH问题
NPC和NPH还有一些特征
根据NP完全问题和NP困难问题的定义可以发现,NP完全问题A的定义中,除了要求对于所有别的判定问题A’ ∈NP,都有A’ ∝A,还要求A∈NP,而NP困难问题不一定是NP问题,所以可以看出NP完全问题是NP困难问题的子集,所以NP完全问题一定都是NP困难问题。
NP困难问题中包含的一些问题是既不属于NP也不属于P类问题的,一个典型的例子就是第k个最重子集问题。