1、确定的算法
算法运算的结果都是唯一确定的, 这样的算法叫做确定的算法(deterministic algorithm) 。如加减乘除
2、不确定的算法
允许算法每种运算的结果不是唯一确定的, 而是受限于某个特定的可能性集合。执行这些运算的机器可以根据终止条件选择可能性集合中的一个作为结果。这就引出了所谓不确定的算法
( nondeterministic algorithm)。如求下一个大质数
3、不确定机
式执行不确定算法的机器称为不确定机(nondeterministic machine ) 。然而, 这里所定义的不确定机实际上是不存在的, 因此通过直觉可以感到这类问题不可能用“快速的”确定算法求解。
4、P问题 (Polynomial多项式问题)
P 是所有可在多项式时间内用确定算法求解的判定问题的集合。
5、NP问题(Non-Deterministic Polynomial, 非确定多项式)
NP是所有可在多项式时间内用不确定算法求解的判定问题的集合。
有些问题很难找到多项式时间的算法(或许根本不存在),例如“找出无向图中哈密顿回路”问题。但如果给了该问题的一个答案,可以在多项式时间内判断这个答案是否正确。例如说对于哈密顿回路问题,给一个任意的回路,很容易判断它是否是哈密顿回路(只要看是不是所有的顶点都在回路中就可以了)。这里给出NP问题的另一个定义,这种可以在多项式时间内验证一个解是否正确的问题称为NP问题,亦称为验证问题类(布尔判断问题)。
6、约化
令 L1 和L2 是两个问题, 如果有一确定的多项式时间算法求解L1 , 而这个算法使用了一个在多项式时间内求解L2 的确定算法, 则称L1 约化为L2 ( 也可以写作L1 ∝L2 )。
7、NP-完全问题
如果可满足性约化为一个问题L,则称此问题L是NP-难度的。如果L是NP难度的且L∈NP, 则称问题L是NP-完全的。
一切NP-完全的问题都是NP-难度的问题, 但一切NP-难度的问题并不都是NP-完全的。
所有的NP问题都可以用多项式时间划归到他们中的一个.所以显然NP完全的问题具有如下性质:它可以在多项式时间内求解,当且仅当所有的其他的NP-完全问题也可以在多项式时间内求解。这样一来,只要我们找到一个NPC问题的多项式解,所有的NP问题都可以多项式时间内划归成这个NPC问题,再用多项式时间解决,这样NP就等于P了. 假如有朝一日某个NP-难度的问题可以被一个多项式时间的算法求解, 那么所有的NP-完全问题就都可以在多项式时间内求解。
8、证明一个问题L2具有NP-难度的策略
用来证明一个问题L2 具有NP-难度的策略如下:
(1 ) 挑选一个已知其具有NP-难度的问题L1 。
(2 ) 证明如何从L1 的任一实例I (在多项式确定时间内) 获得L2 的一个实例I′, 使得从I′的解能( 在多项式确定时间内) 确定L1 实例I 的解。
(3 ) 从( 2) 得出结论L1 ∝L2 。
(4 ) 由( 1) , ( 3) 及∝的传递性得出结论L2 是NP-难度的。
9、千禧难题之首
计算机科学还没解决的一个著名问题是不知是否有P = NP 或者P≠NP。
是说P问题是否等于NP问题,也即是否所有在非确定机上多项式可解的问题都能在确定机上用多项式时间求解.
10、COOK 定理
可满足性在P中当且仅当P=NP