Skip to content

计算复杂性 ​

时间复杂性 ​

度量复杂性 ​

时间复杂度 ​

令 M 是一个在所有输入上都停机的确定型图灵机。M 的运行时间或者时间复杂度是一个函数 f:N→N。
其中 N 是非负整数集合,f(n) 是 M 在所有长度为 n 的输入上运行时所经过的最大步数。
若 f(n) 是 M 的运行时间,则称 M 在时间 f(n) 内运行,M 是 f(n) 时间图灵机。 通常使用 n 表示输入的长度。

大 O 和小 o 记法 ​

因为算法精确运行时间通常是一个复杂的表达式,所以一般只估计它的趋势和级别。
通过 渐近分析 , 只考虑算法的时间的表达式的最高次项,忽略低次项和常数系数,可以试图了解算法在长输入上的运行时间。

  1. 大 O 记法:
    令 f(n) 和 g(n) 是定义在非负整数集合上的函数。
    f(n)=O(g(n)) 当且仅当存在一个常数 c>0 和一个整数 n0≥0,使得对于所有的 n≥n0,有 f(n)≤cg(n)。
  2. 小 o 记法:
    f(n)=o(g(n)) 当且仅当对于所有的常数 c>0,存在一个整数 n0≥0,使得对于所有的 n≥n0,有 f(n)<cg(n)。
    或 limn→∞f(n)g(n)=0。f(n)≠o(f(n))

时间复杂性类 ​

TIME(f(n))={L |  存在确定性 O(f(n)) 时间图灵机判定 L }

P 类 ​

P 类是单带确定 TM 在所有可以在多项式时间内判定的问题的集合。

P=⋃k∈NTIME(nk)

重要性 ​

  1. 对于 所有 与单带确定 TM 等价的 模型,P 类是相同的。
    • 无论你使用的是单带图灵机、多带图灵机,还是其他等价的计算模型,只要一个问题在某个模型上可以在多项式时间内判定(属于 P 类问题),那么在其他模型上也可以在多项式时间内判定。
  2. P 类大致对应于计算机上 实际可解 的问题。

NP 类 ​

NP 类是单带非确定 TM 在所有可以在多项式时间内判定的问题的集合。

NP=⋃k∈NNTIME(nk)

其中 NTIME(f(n)) 是非确定性图灵机在时间 f(n) 内可以接受的语言的集合。

NTIME(f(n))={L |  存在非确定性 O(f(n)) 时间图灵机判定 L }

非确定性图灵机中猜测的步骤不算做时间复杂度。 例如选取一个子集 / 一个路径 / 一个排列等。

NP 类中的问题是可以在多项式时间内验证的问题。

P⊆NP

P=NP? 是一个重要的未解问题。

验证机 ​

A={w | 存在一个证明字符串 c 使得 M 在输入 ⟨w,c⟩ 上接受}

称 M 是 A 的验证机。

判断一个问题是否属于 NP 类,可以通过构造 NTM 或者验证机来判断。

CLIQUE∈NP ​

CLIQUE1CLIQUE2

HP∈NP ​

HP

​

coNP 类 ​

coNP={L | L―∈NP}

NP=?coNP 是一个重要的未解问题。

P⊆NP∩coNP

NP 完全问题 ​

NP 中某些问题的复杂性与整个 NP 类的复杂性相关联,即:
若这些问题中的任一个找到 P 时间算法,则 P=NP。
这些问题称为 NP 完全问题。

SAT 问题 ​

SAT={ϕ | ϕ 是一个可满足的布尔公式}

理论意义 ​

  1. 研究 P 和 NP 之间的关系可以只关注于一个问题的算法。
  2. 由此可以说明一个问题目前还没有找到 P 时间算法。

多项式时间归约 ​

类似于问题的规约,多项式时间规约定义了问题求解的有效性传递。

若存在多项式时间图灵机 M 使得在任意输入 w 上, M 停机时,带子上显示的字符串为 f(w) ,则称函数 f:Σ∗→Σ∗ 为多项式时间可计算函数。

称 A 可多项式时间映射规约到 B,记作 A≤pB,若

∃f:Σ∗→Σ∗ 使得 ∀w∈Σ∗,w∈A⇔f(w)∈B

函数 f 称为 A 到 B 的多项式时间归约。

即 f 将 A 的实例编码在多项式时间内转换为 B 的实例编码。

P 类问题的多项式时间归约 ​

若 A≤pB 且 B∈P,则 A∈P。 若 A≤pB 且 B∈NPC,则 A∈NPC。

数据结构与算法设计复习笔记