计算理论 第7章 复杂性理论 I 度量复杂性和 P 类问题

计算理论导引 第7章 复杂性理论 I 的相关笔记,包括:度量复杂性、大O小o表示法、P类问题等……

第7章笔记 (I)

7.1 度量复杂性

Def 7.1 M M M 是完全、确定的图灵机, M M M运行时间时间复杂度是个函数 f : N → N f:N{\rightarrow}N f:NN f ( n ) f(n) f(n) M M M 在所有长度为 n n n 的输入上运行时所经过的最大步数

大O和小o记法

大O表示法

Def 7.2:(大O表示法的数学描述)设 f f f g g g 是两个 N → R + N{\rightarrow}R^+ NR+ 的函数。称 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) ,若存在正整数 c c c n 0 n_0 n0,使得对所有的 n ≥ n 0 n{\ge}n_0 nn0 有:
f ( n ) ≤ c g ( n ) f(n){\le}cg(n) f(n)cg(n)
此时称 g ( n ) g(n) g(n) f ( n ) f(n) f(n) 的**(渐进)上界**

(大O表示法只考虑最高次数项的影响、忽略常数因子)

多项式界 n c n^c nc ,其中 c c c 是大于 0 0 0 的常数

指数界 2 n δ 2^{n^\delta} 2nδ ,其中 δ {\delta} δ 是大于 0 0 0 的实数

(大O表示法要避免overpower的表示,如本身是多项式时间量级的求解时间代价,虽然可用指数级来表示上界,但指数或阶乘级别量级的问题往往归结于难解问题;因此对于多项式级问题,尽量不要用指数级的上界表示)

小o表示法

Def 7.5:(小o表示法的数学描述)设 f f f g g g 是两个 N → R + N{\rightarrow}R^+ NR+ 的函数。称 f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n)) ,有:
lim ⁡ n → ∞ f ( n ) g ( n ) = 0 {\lim_{n\to {\infty}}}{\frac{f(n)}{g(n)}}=0 nlimg(n)f(n)=0
(大O与小o记法的界都是可以任意取的,只要满足相当于 ≤ {\leq} < {\lt} < 的条件)

分析算法

Def 7.7:令 t : N → R + t:N{\to}R^+ t:NR+ 是一个函数。定义 时间复杂性类 T I M E ( t ( n ) ) TIME(t(n)) TIME(t(n)) 为由 O ( t ( n ) ) O(t(n)) O(t(n)) 时间的图灵机判定的所有语言的集合

P.S. 复杂性理论和可计算性理论的重大区别:丘奇—图灵论题断言,所有合理的计算模型都是等价的。但在复杂性理论中,模型的选择影响语言的时间复杂度。

(比如判定语言 L = 0 n 1 n L={0^n1^n} L=0n1n,单带图灵机时间的复杂度为 O ( n 2 ) O(n^2) O(n2) ,多带图灵机的时间复杂度为 O ( n ) O(n) O(n)

模型间的复杂性关系

多带图灵机 t ( n ) t(n) t(n) ↔ {\leftrightarrow} 单带图灵机 t 2 ( n ) t^2(n) t2(n)

Th 7.8:设 t ( n ) t(n) t(n) 是一个函数, t ( n ) ≥ n t(n){\ge}n t(n)n,则每一个 t ( n ) t(n) t(n) 时间的多带图灵机都和某一个 O ( t 2 ( n ) ) O(t^2(n)) O(t2(n)) 时间的单带图灵机等价

① 因为原来的多带图灵机 t ( n ) t(n) t(n) 步就可以执行完,所以每一条带上最长的长度为 t ( n ) t(n) t(n)

② 用单带来模拟多带的时候要用多道技术,读写头先走一遍捡起所有道上的读写头。

③ 接着,最差的情况是,单带对每一道都分别执行一遍,相当于对多带的每一带执行一遍

④ 若有 k k k 条带( k k k 是有限的固定的常数),则单带执行步数为 t ( n ) + k × t ( n ) → O ( t ( n ) ) t(n) + k{\times}t(n){\to}O(t(n)) t(n)+k×t(n)O(t(n))

⑤ 即对多带的每一步,单带需要最多相当的 t ( n ) t(n) t(n) 步,所以单带一共要 O ( t ( n ) ) × t ( n ) → O ( t 2 ( n ) ) O(t(n)){\times}t(n){\to}O(t^2(n)) O(t(n))×t(n)O(t2(n))

(假定 t ( n ) ≥ n t(n){\ge}n t(n)n 是合理的,因为至少要读一遍输入)

(时间复杂度在确定性的单带和多带图灵机上最多是 多项式 的差异)

非确定型单带图灵机 t ( n ) t(n) t(n) ↔ {\leftrightarrow} 单带图灵机 2 t ( n ) 2^{t(n)} 2t(n)

Th 7.10:设 t ( n ) t(n) t(n) 是一个函数, t ( n ) ≥ n t(n){\ge}n t(n)n,则每一个 t ( n ) t(n) t(n) 时间的非确定型单带图灵机都和某一个 O ( 2 t ( n ) ) O(2^{t(n)}) O(2t(n)) 时间的单带图灵机等价

① 用单带图灵机模拟非确定图灵机,是以每一个转移函数中下一状态可能性最多的为标准,设最多可能性为 b b b

② 非确定图灵机中最坏情况下,每一步都有 b b b 中可能,单带图灵机需要模拟所有可能,所以一共要 b t ( n ) ∼ O ( 2 t ( n ) ) b^{t(n)}{\sim}O(2^{t(n)}) bt(n)O(2t(n))

(时间复杂度在确定性的单带和非确定型单带上最多是 指数 的差异)

7.2 P 类

Th 7.11 P P P 是确定型单带图灵机在多项式时间内可判定的语言类,即:
P = ∪ k T I M E ( n k ) P=\mathop{\cup}_kTIME(n^k) P=kTIME(nk)

  • 对于所有与确定型单带图灵机多项式等价的计算模型来说, P P P 是不变的
  • P P P 大致对应于在计算机上实际可解的那一类问题

第一条表明, P P P 是一个稳健的类,不受具体计算模型的影响;第二条表明, P P P 中的问题都有办法在多项式时间内解决;

(数据结构课程中介绍的算法基本上都属于P类问题)

P类问题和NP类问题有精确定义:

P类问题NP类问题
确定型图灵机判别非确定型图灵机判别

以下三个问题均是 P P P 类问题:

有向图中路径存在问题

Th 7.12 P A T H   ∈   P PATH{\,}{\in}{\,}P PATHP

fct-7-2

D F S DFS DFS (拓扑排序)算法: M = M= M= “对输入 < G , s , t > {\lt}G,s,t{\gt} <G,s,t> , G G G 是包含节点 s s s t t t 的有向图”

① 准备一个队列,首先将 s s s 放入队列中,并将 s s s 标记为 v i s i t e d visited visited

② 每次从队列中取出一个节点,遍历该节点的所有 u n v i s i t e d unvisited unvisited 的下一节点,加入队列;

③ 当过程中遇到 t t t ,说明存在这样的路径;若队列清空,则不存在这样的路径;

分析:最多会遍历每一条边(因为要判断下一节点是否 v i s i t e d visited visited),所以复杂度为 O ( n 2 ) O(n^2) O(n2)

两个数互质判定问题

Def R E L P R I M E = { < x , y > ∣ G C D ( x , y ) = 1 } RELPRIME=\{ {\lt}x,y{\gt}|GCD(x,y)=1\} RELPRIME={<x,y>GCD(x,y)=1}

Th 7.13 R E L P R I M E   ∈   P RELPRIME{\,}{\in}{\,}P RELPRIMEP

欧几里得算法: E = E= E= “对输入 < x , y > {\lt}x,y{\gt} <x,y> x x x y y y 是二进制表示的自然数”

while (y) {
    x %= y;
    swap(x, y);
}
cout << "(x,y)=" << x;

分析:若起始状态 x > y x>y x>y, 设 x   m o d   y = r x{\,}mod{\,}y=r xmody=r 0 ≤ r < y 0{\le}r<y 0r<y r r r x x x 的新值) :

  • y > x 2 y>\frac{x}{2} y>2x ,则 y + r   ≤   x    ⟹    r < x 2 y+r{\,}{\le}{\,}x{\implies}r<\frac{x}{2} y+rxr<2x
  • y   ≤   x 2 y{\,}{\le}{\,}\frac{x}{2} y2x ,则 r < y ≤ x 2    ⟹    r < x 2 r<y{\le}\frac{x}{2}{\implies}r<\frac{x}{2} r<y2xr<2x

不论何种情况, x x x 在每次循环过程中大小至少会减半,而一次循环结束后 x x x 将获得 y y y 的值;也就是说,每进行两次循环体, x x x y y y 的值至少减少一半,执行最大次数是 2 l o g 2 x 2log_2x 2log2x 2 l o g 2 y 2log_2y 2log2y 中较小者,不大于 O ( n ) O(n) O(n)

上下文无关语言是P类问题

复习一下 C Y K CYK CYK 算法~(第6章 上下文无关语言的性质 6.3 P151)复杂度为 O ( n 3 ) O(n^3) O(n3)

(动态规划的思想,对于某个长度为 n n n 的串 w w w ,从长度为 0 0 0 的字串开始,判定每个子串是否可以由某个 C h o m s k y Chomsky Chomsky 范式的文法得到;)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Air浩瀚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值