1. 问题复杂性分类
计算的定义:1936年图灵在图灵机模型上提出计算形式化的定义。将符号串变成另一个符号串。
图灵机的结构:一台多带图灵机由一个有限状态控制器和k条读写带组成。
- 可计算与不可计算问题
- 停机问题:停机问题计算机不可解决,在程序静态编译时可进行检查。
- 实际可计算问题的定义:20世纪70年代
- Cook-Karp 论题:一个问题是实际可计算的,当且仅当它在图灵机经过多项式时间(步数)计算得到正确结果。
- 实际可计算
- 实际不可计算
- Cook-Karp 论题:一个问题是实际可计算的,当且仅当它在图灵机经过多项式时间(步数)计算得到正确结果。
- 易解问题与难解问题
- 易解问题:多项式时间内可解决
- 难解问题:指数时间内可解决
为什么多项式时间为易解问题和难解问题的分解?
- 多项式函数和指数函数的增长率有本质区别。
- 计算机性能的提高对多项式时间算法和指数时间算法影响不同。对多项式时间算法性能提升较大。
2. P 类与 NP 类问题
从是否被验证(判定问题)的角度,计算复杂理论将难解问题进一步划分为 NP 问题和非 NP 问题。所有多项式时间内验证的问题为 NP 问题。
- 汉密尔顿问题:
- 求解问题:给定一个图,求出它的汉密顿回路。
- 判定问题:给出任意一个序列,判断是不是汉密顿回路。
- TSP,NP 完全问题
- 求解问题:求最短路径
- 判定问题:给定一条路径,判断是不是最短路径。
确定性算法与 P 类问题
Polynomial
- 确定性算法:算法在执行过程中每一步只有一个确定的结果。对于同一输入实例,所得的结果严格一致。
- P 类问题:具有多项式时间的确定性算法来求解的判定问题。
非确定性算法与 NP 类问题
Non-deterministic Polynomial
- 非确定性算法:采用如下的猜测并验证的方式工作。
- 猜测阶段:对问题的输入实例产生一个任意字符 y,每运行 y 值可能不同。
- 验证阶段:用确定性算法验证。
- NP 类问题:具有多项式时间的非确定性算法来求解的判定问题。
3. NP 完全问题
# 输入,问题,输出
I1 -> 问题1 -> O1
I2 -> 问题2 -> O2
则问题1到问题2的变换有3个步骤:
- 输入转换:
I1 -> I2 - 问题求解:
I2 -> 问题2 -> O2 - 输出转换:
O2-> O1
如在 O(t(n)) 时间内完成上述转换,则称问题 1 以t(n) 时间变换到问题 2。
-
定义
令问题1为判定问题,如果问题1属于NP问题,且对于NP 类问题中的每个命题,都可以由问题1变换而来,则称问题 1 为一个 NP 完全问题,记为 NPC。
- 第一个 NPC 问题:SAT,布尔可满足问题。