P类问题:所有在多项式时间内可解的问题
另外一类问题,是判定问题,而且在多项式时间内可验证。首先,什么是判定问题?判定问题即是yes or no 问题。给定实例集 DDD, 以及其中一个子集 YYY,该子集内的实例解为yes,其余为no。例如在无向图上判断是否有哈密顿回路。实例集即为全体无向图,yes子集即为全体哈密顿图。
NP类问题:所有多项式时间可验证的判定问题。 即给定一个问题实例,给定任意猜想t,可以在多项式时间内判断t是否能证明该实例属于支持集。
NP难:所有的NP问题都可以多项式时间变换到该问题上,则该问题是NP难的。
什么是多项式时间变换?两个问题 <D1,Y1>,<D2,Y2><D_1, Y_1>, <D_2, Y_2><D1,Y1>,<D2,Y2>,如果问题1的一个实例 I1I_1I1 是有解的,那么存在一个多项式可计算的变换 fff, I2=f(I1)I_2 = f(I_1)I2=f(I1) 是问题2的一个有解的实例。
具体来说,为了研究第二个问题的复杂性,如果已知第一个问题的下界;那么由于第一个问题可以归约到第二个问题上,那就可以利用第二个问题的算法解决第一个问题,所以第二个问题复杂性不低于第一个问题。
NP完全:如果一个问题既是NP问题,又是NP难问题,则称为是NP完全问题。
所有的P问题都是NP问题,而P是否等于NP是没有解决的问题。如果存在NP难的问题是P问题,那么P=NP
问题可以转化成P问题,那么本身也是P问题。难解问题(P问题之外的问题)也只能转化成难解问题。
问题可以由一个NP难的问题转化过去,那么也是NP难问题。
问题是NP问题,可以由一个NP完全问题转化过去,那么也是NP完全问题。
一些简单例子
- 哈密顿回路(HC,NP问题):给定无向图,是否存在哈密顿回路?
- 旅行商问题(TSP,NP问题):给定n个城市及两两之间的有向距离 d(i,j)d(i, j)d(i,j)。寻找恰好经过每个城市一次且总距离最小的路径。这种组合优化问题,等价于给问题多一个参数,即是否存在不超过总和 VVV 的路径。
- 0-1背包问题:也是NP问题
TSP问题可以由HC问题多项式时间转换过去。对于一个哈密顿图,让他所含的边对应的距离为1,补图的边对应的距离为2。所得到的TSP问题实例参数即为回路中的边数。
- 最小生成树:是否有权不超过 BBB 的生成树。最大生成树:是否有权不小于 DDD 的生成树。
最小生成树可以由最大生成树转化得到:MMM 为全局边权的最大值。使 B=(n−1)M−DB = (n - 1)M - DB=(n−1)M−D,再将所有边权 eee 改为 M−eM - eM−e。那么原先的生成树就支持新的对应的问题实例有解。
尽管还没有证明P与NP的具体关系,但一般相信P与NP不相同。其中NP完全问题最有可能不是P问题。
NP-Complete
- Cook-Levin定理:SAT问题(合取范式的成真问题)
- 最大可满足性(Max-SAT):变元赋值使得给定的 mmm 个析取式中至少有 KKK 个为真。
- 三元可满足性(3SAT):给定一个3元合取范式F,F的可满足性。
- 顶点覆盖(VC):给定无向图以及 KKK,是否有顶点数不超过 KKK 的顶点覆盖
- 团:给定无向图以及 JJJ,是否有顶点数不小于 JJJ 的团。
- 独立性:给定无向图以及 JJJ,是否有顶点数不小于 JJJ 的独立集。
- 有向HC问题,HC问题,TSP问题
- 恰好覆盖:给定有穷集 AAA 以及子集的集合,是否存在若干子集恰好覆盖原集合
- 子集和:给定正整数集与 TTT,是否存在子集和为 TTT。
- 装箱:给定n件物品的重量,能否用 KKK 个容量为 BBB 的箱子容纳
- 双机调度:给定n项作业的时间,在两台相同机器上,能否在时间 DDD 内完成。
- 整数线性规划: Ax≥b,x≥0Ax\geq b, x\geq 0Ax≥b,x≥0 是否有解?
文章介绍了P类问题,即能在多项式时间内解决的问题,以及NP类问题,这类问题的解可在多项式时间内验证。接着讨论了NP难问题和NP完全问题的概念,以及P与NP的关系。文中还提到了一些典型的NP完全问题,如哈密顿回路、旅行商问题,并通过例子解释了问题之间的转换关系,最后指出尽管未证明P与NP是否相等,但通常认为它们不相等。
1519





