算法复杂程度
算法复杂度是衡量算法在执行过程中所需资源(如时间和空间)的指标,主要包括时间复杂度和空间复杂度。
P问题
所谓的 P 问题就是能够在多项式的时间复杂度内解决的问题,这里的 P 指的是多项式时间(polynomial time):
一个规模为n的问题,如果能在n的多项式时间内解决,就是p问题
我们在前面学到的算法大多数都可以写成这样的形式,比如排序问题,二分查找,图的遍历,最小生成树等
NP问题
NP问题(Non-deterministic Polynomial Problem,非确定性多项式问题)就是可以在多项式的时间里验证一个问题的解
NP问题与P问题关系
所有的 P 问题都是 NP 问题。因为如果一个问题可以在多项式时间内解决,那么它的解答也可以在多项式时间内验证。
是否每个 NP 问题都可以在多项式时间内解决(即 P = NP)还是一个未解决的问题。
NPC问题(NP完全问题)
NPC问题
(NPC问题(NP完全问题))是NP类问题中最难的问题,包含两个条件:
•是一个NP问题(是可以在多项式时间里去验证一个解的问题)
•所有的NP问题都可以转换成此问题
P问题是比较简单的问题,比较难的问题叫NPC问题
(大多数人观点,未得到验证)
P问题一定是一个NP问题,NPC问题也一定是一个NP问题;P问题和NPC问题是没有交集的
归约
基本概念
如果问题 Q1可以归约为问题 Q2,则记为 Q1≤p Q2,表示Q1大于 Q2的难度不会超过一个多项式时间因子(但通常我们可以根据小于等于号来通俗的认为 Q1的难度要小于等于 Q2)。Q1≤pQ2,可以推出:
•如果Q1是 NPC 问题,则 Q2必然是 NPC 问题(因Q2不比Q1容易);
•如果Q2是P问题,则Q1必然是P问题(因为Q1不比Q2难)
多项式归约
多项式规约指的是问题 A 的所有实例都能够在多项式的时间复杂度内转化为问题 B 的所有实例。
如果问题X和问题Y满足以下两条性质,那么问题X可以在多项式时间归约到问题Y:
记为X ≤pY (X可以多项式规约到Y)若存在X≤pY 三点性质:
NP-Hard问题
NP-Hard问题
NP-Hard 问题是指那些至少和所有NP问题一样难的问题。更正式地说,一个问题 H 被称为NP-Hard,意味着满足以下条件:
归约条件:对于所有的NP问题 P,存在一个多项式时间归约,将 P 转化为 H。也就是说,如果能在多项式时间内解决 H,那么也能在多项式时间内解决所有的NP问题。
NP-Hard问题与NPC问题
NPC问题是NP-Hard问题的一个子集,且这些问题本身也属于NP类。NPC问题不仅在NP类中至少和所有问题一样难,还在NP类中也可以在多项式时间内验证其解的正确性。
旅行商问题(TSP)与NP问题
旅行商问题(TSP)是一个经典的组合优化问题
问题描述:给定一组城市和城市之间的距离(或成本),目标是找到一条最短的回路,访问每个城市恰好一次,并返回到起点城市。
关系
决策版本
TSP的决策版本是NP问题。具体来说,给定一组城市和一个目标距离 d,是否存在一条路径总距离不超过 d?这个决策问题属于NP类,因为可以在多项式时间内验证一个给定的路径是否满足总距离不超过 d的条件。
优化版本
TSP的优化版本,即找到最短的回路,是NP-Hard问题。这个问题没有已知的多项式时间算法可以解决,因此它比NP类中的任何问题都更难。