Lec 19 复杂度
总览
决策问题
P, NP, EXP, R问题
非确定性多项式时间
规约
决策问题
决策问题是将输入分为YES (1) 或 NO (0)的任务。例如,“s-t 最短路径问题”是一个典型的决策问题,它询问给定图G中是否存在从节点s到节点t的权重不超过某个值d的路径。
更多例子:
- s-t 最短路径问题: 是否存在一条从s到t的路径,其权重小于等于d?
- 负权重环问题: 图G中是否存在一个负权重环?
- 最长简单路径问题: 图G中是否存在一条简单路径,其权重大于等于d?
- 子集和问题: 给定整数集合A,是否存在一个子集使得它们的和等于S?
- 俄罗斯方块问题: 给定的方块序列和棋盘,是否可以存活下来?
- 国际象棋问题: 给定的棋盘状态下,玩家是否可以强制赢得比赛?
- 停机问题: 给定一个计算机程序和输入,程序是否会终止?
算法/程序的定义: 解决问题的程序是有限长度的代码,能在字长为Ω(log n)的计算机模型上运行,并对每一个输入给出正确的输出。
可判定(decidable)问题: 如果存在一个程序能在有限时间内解决某个问题,则称这个问题是可判定的。
判定与不可判定性
决策问题的定义:一个函数,将输入
程序是一个有限长度的比特串,虽然程序的数量是可数的(对应自然数集N)。这意味着没有足够的程序来解决所有问题, 所以大多数问题是不可判定的。
例子: 停机问题(Halting Problem)是不可判定(
P, NP, EXP, R问题
P = { 能够在多项式时间解决(或者叫多项式时间可判定)的问题 }
- 时间复杂度
, n 是问题输入规模
- 时间复杂度
NP = { 通过“幸运“算法,能够在多项式时间解决的决策问题 }
- 正式的说是, 非确定性多项式时间
- 非正式说,算法可以做出决策,并且决策总是幸运的命中最佳的一个
EXP = { 在指数时间可解决的问题 }
- 时间复杂度
- 大部分问题在这个层面
- 时间复杂度
R = { 能够在有限时间完成的问题 }
- R 来自 recursive languages

非确定性多项式时间(NP)
P 是这样一类决策问题的集合:对于每一个大小为 n 的输入 I,存在一个算法 A,使得 A 在输入 I 上的运行时间是多项式级别的 poly(n) ,并且能够正确解决问题 I。
NP 是这样一类决策问题的集合:存在一个验证(verification)算法 V,这个算法接受两个输入,输入问题的实例 I ,和证书(certificate) c ,该算法满足以下条件:
V 对于输入大小 I 的问题,总是以多项式时间运行;
- 不会随着输入大小急剧增加
如果 I 是一个 "YES" 输入(这个问题有解),那么存在某个证书 c,使得当验证算法 V 接受输入
时,会输出“YES”。 如果 I 是一个 "NO" 输入(即这个问题无解),那么无论选择什么证书 c,使得当验证算法 V 接受输入
时,总是输出 "NO"。
你可以将这个证书看作是证明 I 是 "YES" 输入的证明。 如果 I 实际上是一个 "NO" 输入,那么任何证明都不应该起作用。
P ⊆ NP: 对于P类问题,验证算法 V 可以直接忽略证书并解决问题实例。
NP ⊆ EXP: 尝试所有可能的证书!最多有
悬而未决的问题:P = NP 吗?NP = EXP 吗?
大多数人认为
我们为什么关心这个问题? 如果能证明某个问题是NP中最难的问题,那么如果
我们如何比较问题的难度? 通过“归约”(reductions)!
规约
假设你想解决问题A, 一种解决方法是将问题A转化为你知道如何解决的另一个问题B, 使用解决问题B的算法,然后用它来计算问题A的解,这叫做从问题A到问题B的归约(A → B),因为可以用B来解决A,所以B至少和A一样难(A ≤ B)
通常的算法策略是:将问题归约为你知道如何解决的问题。
问题A是NP难(NP-hard)的,如果每个NP问题都能多项式时间归约到问题A, 即,A至少和NP中的每个问题一样难(对任意
NP完全(NP-complete) = NP∩NP-hardNP \cap NP\text{-}hardNP∩NP-hard
所有NP完全问题都是等价的,即可以互相归约
第一个NP完全问题?每个决策问题都可以归约到满足逻辑电路的问题,这个问题叫做“电路可满足性问题(Circuit SAT)”。
最长简单路径和俄罗斯方块是NP完全问题,所以如果NP中的某个问题不属于P,那么这些问题也是。
国际象棋是EXP完全(EXP-complete):属于EXP,并且可以从EXP中的每个问题归约过来(所以它不属于P)。