Skip to content

计算复杂性

时间复杂性

度量复杂性

时间复杂度

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

O 和小 o 记法

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

  1. O 记法
    f(n)g(n) 是定义在非负整数集合上的函数。
    f(n)=O(g(n)) 当且仅当存在一个常数 c>0 和一个整数 n00,使得对于所有的 nn0,有 f(n)cg(n)
  2. o 记法
    f(n)=o(g(n)) 当且仅当对于所有的常数 c>0,存在一个整数 n00,使得对于所有的 nn0,有 f(n)<cg(n)
    limnf(n)g(n)=0f(n)o(f(n))

时间复杂性类

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

P 类

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

P=kNTIME(nk)

重要性

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

NP 类

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

NP=kNNTIME(nk)

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

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

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

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

PNP

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

验证机

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

MA验证机

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

CLIQUENP

CLIQUE1CLIQUE2

HPNP

HP

coNP 类

coNP={L | LNP}

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

PNPcoNP

NP 完全问题

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

SAT 问题

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

理论意义

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

多项式时间归约

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

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

A多项式时间映射规约B,记作 ApB,若

f:ΣΣ 使得 wΣ,wAf(w)B

函数 f 称为 AB多项式时间归约

fA 的实例编码在多项式时间内转换为 B 的实例编码。

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

ApBBP,则 AP。 若 ApBBNPC,则 ANPC

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