组合优化问题(一)@TOC
p问题,NP问题,NP完全问题,NP难问题
时间复杂度并不是表示一个程序解决问题需要画多少时间,而是当程序所处理的问题规模扩大后,程序需要的时间对应增长的有多快。
时间复杂度
时间复杂度可以分为多项式复杂度和非多项式级复杂度
多项式复杂度
O(1), O(ln n), O(n^a)等
非多项式级复杂度
O(a^n), O(n!)等为非多项式级复杂度,其计算复杂度计算机往往不能承受。
P问题(Polynomial-time problem)(能解决)
P类:能在多项式时间(Polynomial time)内用算法求解的问题
P问题:有多项式时间算法的问题
比如:N个元素排序,时间复杂度为O(N^2)。
N^2是一个多项式。
NP问题(Nondeterministic polynomial-time problem)(能解决)
能够在多项式时间内使用非确定算法被解决的问题
不确定性问题:无法直接计算结果,但可以通过间接的猜测来得到结果。即:可以告诉你,某个可能的结果是正确的还是错误的。
NP是一类可以通过非确定图灵机在多项式时间内解决的决策问题的集合。
显然P是NP的子集,即任何可以被图灵机在多项式时间内解决的问题都可以被非确定性的图灵机解决。
NP类:指不确定是否存在多项式时间的求解算法,但可以在多项式时间内验证一个猜测解的正确定的问题。
NP-complete problem(Non-deterministic Polynomial complete problem)(无法解决,可以给出近似解)
只能通过非确定算法,在多项式时间内解决的问题,叫做NP完全问题。
如果一个决策问题S是一个NPC问题,那么S具有以下两个性质:
- S是一个NP类(即,给定一个解决NPC的方案,可以很快验证是否可行,但不存在已知高效的方案);
- NP里的任何问题都可以在多项式时间内转化为S。
NPC类:是NP的一个子集,且其中每一个问题都能由NP中的任何问题在多项式时间内转化。
如果所有NP问题可以在多项式时间内归约成某个NP问题(归约:解决后者也就相应的解决了前者),则该NP问题成为NPC问题。也就是说NPC包含了NP中最难的问题。
NP-Hard problem(Non-deterministic Polynomial hard problem)(无法解决,可以给出近似解)
如果说NPC还是在多项式解决一个问题的范畴,NP-hard 问题会涉及到非多项式的问题。
NP-hard:如果所有NP问题可在多项式时间内归约呈某个问题,则这个问题成为NP难问题。
注:NP-hard只需要具备NPC的第二个性质,所以NPC是NP-hard的子集.。
四者的关系如图(假设P!=NP)
参考:https://shijianfeng.blog.youkuaiyun.com/article/details/114755051?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.no_search_link