可以在多项式时间内求解的问题称为易解的,而不能在多项式时间内求解的问题称为难解的。
P类问题:多项式类型,是一类能够用(确定性的)算法在多项式的时间内求解的判定问题。
只有判定问题才属于P
不可判定问题:某些判定问题是不能用任何算法求解的,则称这种判定问题为不可判定问题。否则就称作可判定问题。
例如:Halting problem(停机问题):给定一段计算机程序和他的一个输入,判断该程序对于该输入是会中止还是会无限的运行。
证明停机问题是不可判定问题:反证法,通过构造一个输出和解决停机问题的算法的输出相反的程序使得自己陷入矛盾。
不确定算法:对于判定问题,猜测一个解,并且可以判断这个解是否是正确的解的算法。
如果一个不确定算法在验证阶段的时间效率是多项式级的,我们说它是不确定多项式类型的。
NP类问题:可以用不确定多项式算法求解的判定问题。
大多数判定问题都是属于NP类的。
- 所有的P类问题都是NP问题
- 停机问题是不属于NP的判定问题
未解之谜:P类问题是NP问题的一个真子集还是P类问题其实就是NP问题
多项式化简:可以使用一个多项式算法将一个判定问题的真实例转化为另一个判定问题的真实例,假实例转化为假实例。
NP完全(complete)问题:
- 属于NP类型
- NP中的任何问题都能够在多项式时间内化简为该问题
例如:合取范式可满足性问题就是一个NP完全问题。
NP完全性的定义意味着:即使我们仅仅得到了一个NP完全问题的多项式确定算法,也说明所有的NP问题都能够用一个确定算法在多项式的时间内解出,即P=NP。
NP难(hard)问题:
- NP中的任何问题都能够在多项式时间内化简为该问题
- 不一定是NP问题,因此NPH比NPC的范围广