可计算性与计算复杂性计算原理答案.doc

可计算性与计算复杂性计算原理答案.doc
可计算性与计算复杂性计算原理答案.doc

1.6 画出识别下述语言的DFA 的状态图。

a){w | w 从1开始以0结束}

b){w | w 至少有3个1}

c) {w | w 含有子串0101}

d) {w | w 的长度不小于3,且第三个符号为0}

e) {w | w 从0开始且为奇长度,或从1开始且为偶长度}

f) {w | w 不含子串110}

g) {w | w 的长度不超过5}

i){w | w 的奇位置均为1}

j) {w | w 至少含有2个0,且至多含有1个1}

k) {ε,0}

0,1

1

l) {w | w 含有偶数个0,或恰好两个1}

m) 空集 n) 除空串外的所有字符串

1.29利用泵引理证明下述语言不是正则的。 a. A 1={0n 1n 2n

| n ≥0}。

证明:假设A 1是正则的。设p 是泵引理给出的关于A 1的泵长度。

令S=0p 1p 2p

,

∵S 是A 1的一个成员且S 的长度大于p ,所以泵引理保证S 可被分成3段S=xyz 且满足泵引理的3个条件。根据条件3,y 中只含0,xyyz 中,0比1、2多,xyyz 不是A 1的成员。违反泵引理的条件1,矛盾。 ∴A 1不是正则的。

b. A 2={www | w ∈{a,b}*}.

证明:假设A 2是正则的。设p 是泵引理给出的关于A 2的泵长度。

令S=a p

ba p

ba p

b,

∵S 是A 2的一个成员且S 的长度大于p ,所以泵引理保证S 可被分成3段S=xyz 且满足泵引理的3个条件。根据条件3,y 中只含a ,所以xyyz 中第一个a 的个数将比后两个a 的个数多,故xyyz 不是A 2的成员。违反泵引理的条件1,矛盾。 ∴A 2不是正则的。

c. A

3

={a2n | n≥0}.(在这里,a2n表示一串2n个a .)

证明:假设A

3是正则的。设p是泵引理给出的关于A

3

的泵长度。

令S= a2p,

∵S是A

2

的一个成员且S的长度大于p,所以泵引理保证S可被分成3段

S=xyz且满足泵引理的3个条件。即对任意的i≥0,xy i z都应在A

3

中,且xy i z与xy i+1z的长度都应是2的幂. 而且xy i+1z的长度应是xy i z的长度的2n倍(n≥1)。于是可以选择足够大的i,使得|xy i z|=2n>p. 但是|xy i+1z|-|xy i z|=|y|≤p. 即|xy i+1z|<2n+1, 矛盾。

∴A

3

不是正则的。

1.46 证明:

a)假设{0n1m0n|m,n≥0}是正则的,p是由泵引理给出的泵长度。取s=0p1q0p,q>0。

由泵引理条件3知,|xy|≤p,故y一定由0组成,从而字符串xyyz中1前后0的数目不同,即xyyz不属于该语言,这与泵引理矛盾。所以该语言不是正则的。

b) 假设{0n1n|n≥0}的补集是正则的,则根据正则语言在补运算下封闭可得{0n1n|n≥0}是正则的,这与已知矛盾,故假设不成立。所以该语言不是正则的。

c) 记c={0m1n|m≠n},┐c为c的补集,┐c∩0*1*={0n1n|n≥0},已知{0n1n|n ≥0}不是正则的。若┐c是正则的,由于0*1*是正则的,那么┐c∩0*1*也应为正则的。这与已知矛盾,所以┐c不是正则的。由正则语言在补运算下的封闭性可知c也不是正则的。

d) {w | w∈{0,1}*不是一个回文}的补集是{w | w∈{0,1}*是一个回文},设其是正则的,令p是由泵引理给出的泵长度。取字符串s=0p1q0p,显然s是一个回文且长度大于p。由泵引理条件3知|xy|≤p,故y只能由0组成。而xyyz不再是一个回文,这与泵引理矛盾。所以{w | w∈{0,1}*是一个回文}不是正则的。由正则语言在补运算下的封闭性可知{w | w∈{0,1}*不是一个回文}也不是正则的。

2.4和2.5 给出产生下述语言的上下文无关文法和PDA ,其中字母表∑={0,1}。

a. {w | w 至少含有3个1}

S →A1A1A1A A →0A|1A|ε

b. {w | w 以相同的符号开始和结束}

S →0A0|1A1 A →0A|1A|ε

c. {w | w 的长度为奇数}

S →0A|1A A →0B|1B|ε B →0A|1A

d. {w | w 的长度为奇数且正中间的符号为0}

S →0S0|1S1|0S1|1S0|0

e. {w | w 中1比0多}

S →A1A

A →

0, ε→ε 0,ε→ε 0,ε→ε 1,ε→ε

0,ε→ε 0,ε→0 0,0→ε 0,ε→0 1,0→ε 0,1→ε

f. {w | w=w R }

S →0S0|1S1|1|0 g. 空集

S →S

2.15 用定理2.6中给出的过程,把下述CFG 转换成等价的乔姆斯基范式文法。

A →BAB|B|ε

B →00|ε

解:添加新起始变元S 0,

去掉B →ε S 0→A

S 0→A

A →BAB|B|ε A →BAB|AB|BA|B|ε

B →00|ε

B →00

去掉A →ε, 去掉A →B S 0→A

S 0→A

A →BAB|AB|BA|B|B

B A →BAB|AB|BA|00|BB B →00

B →00

去掉S 0→A,

添加新变元 S 0→BAB|AB|BA|00|BB S 0→VB|AB|BA|UU|BB A →BAB|AB|BA|00|BB A →VB|AB|BA|UU|BB B →00 B →UU V →BA

U →0

0,ε→0

0,0→ε

3.15证明可判定语言类在下列运算下封闭。

a. 并。

证明:设M

1,M

2

为识别可判定语言A

1

,A

2

的判定器。构造图灵机M:

M=“输入w,

1)分别在w上运行M

1和M

2

,每运行一步M

1

就运行一步M

2

2)若M

1和M

2

中有一个接受,则接受。

若都拒绝,则拒绝。”

M为识别A

1?A

2

的判定器。所以可判定语言类对并运算封闭。

b. 连接。

证明:设M

1,M

2

为识别可判定语言A

1

,A

2

的判定器。构造图灵机M:

M=“输入w,

1)列出所有将w分成两段的方式(|w|+1种).

2)对于每一种分段方式,在第一段上运行M

1,在第二段上运行M

2

若都接受,则接受。

3)若没有一种分段方式被接受则拒绝。”

M为识别A

1οA

2

的判定器。所以可判定语言类对连接运算封闭。

c. 星号。

证明:设M

1

为识别可判定语言A的判定器。

M=“输入w,

1)列出w的所有分段的方式(2|w|-1种)。

2)对于每一种分段方式,重复下列步骤:

3)分别在每一段上运行M

1,若每一段都能被M

1

接受,则接受。

4)若没有一种分段方式被接受则拒绝。”

M为识别A*的判定器。所以可判定语言类对星号运算封闭。

d. 补。

证明:设M

1=(Q,∑,Γ,δ,q

, q

1

, q

2

)为识别可判定语言A的判定器,其中q

1

接受状态,q

2为拒绝状态。令M=(Q,∑,Γ,δ,q

, q

2

, q

1

),其中q

2

为接受状态,

q

1

为拒绝状态。则M为识别A的判定器。所以可判定语言类对补运算是封闭的。

e. 交。

证明:设M

1,M

2

为识别可判定语言A

1

,A

2

的判定器。构造图灵机M:

M=“输入w,

1)分别在w上运行M

1和M

2

,每运行一步M

1

就运行一步M

2

2)若M

1和M

2

中都接受,则接受。

若M

1和M

2

中有一个拒绝,则拒绝。”

M为识别A

1?A

2

的判定器。所以可判定语言类对交运算是封闭的。

3.16证明图灵可识别语言类在下列运算下封闭:

a.并 b.连接 c.星号 d.交

证明:要证这四种运算下图灵可识别语言类封闭,只需设计出图灵机来识别此种

语言。设A和B是图灵可识别语言,A=L(M

1),B=L(M

2

),M

1

和M

2

是两个图灵机。

a.并

M=“对于输入w:

1) 在输入w上并行运行M

1和M

2

2) M

1和M

2

中有一个停机且接受,则接受;若都停机且拒绝,则拒绝。”

M识别A

1?A

2

。所以图灵可识别语言类对并运算是封闭的。

b. 连接

M=“输入w,

1)出所有将w分成两段的方式(|w|+1种).

2)对于i=1,2,?重复以下步骤:

3)对于每一种分段方式,在第一段上运行M

1i步,在第二段上运行M

2

i

步,或者直到停机。若都接受,则接受。”

M识别A

1οA

2

。所以图灵可识别语言类对连接运算是封闭的。

c.星号

M=“输入w,

1)列出w的所有分段的方式(2|w|-1种).

2)对于i=1,2,?重复以下步骤:

3)对于每一种分段方式,分别在每一段上运行M

1

i步,或者直到停机。

若M

1

接受所有段,则接受。”

M识别A*。所以图灵可识别语言类对星号运算是封闭的。d.交

M= “对于输入w:

1)在输入w上运行M

1。若M

1

接受,则转(2);若M

1

拒绝,则拒绝。

2)在w上运行M

2。若M

2

接受,则接受;若M

2

拒绝,则拒绝。”

M识别A?B。所以图灵可识别语言类对并运算封闭。

3.21

1) 由c

max ≥|c

1

|知,当|x|≤1,则欲判定不等式明显成立。

2) 当|x|>1时,由

c 1x n + c

2

x n-1 + …+ c

n

x + c

n+1

= 0

?c1x =-(c2 + …+ c n x2-n + c n+1x1-n)

?|c1| |x| = |c2 + …+ c n x2-n + c n+1x1-n|

< |c

2| +…+ |c

n

||x|2-n + |c

n+1

| |x|1-n

≤ |c2| +…….|c n| + |c n+1||x0|

≤ n c max

< (n + 1) c

max

?|x| < (n + 1) c max / |c1|.

4.11 设A={|M是DFA,它不接受任何包含奇数个1的字符串}。证明A是可判定的。

证明:构造DFA N,使L(N)={含奇数个1的字符串}。构造图灵机F=“对于输入,其中M是DFA,

1)构造DFA D,使L(D)=L(M)∩L(N)。

2)检测L(D)是否为空。(E

DFA

可判定检测)。

3)若L(D)=?,则接受;否则拒绝。”

4.13 “检查一个CFG是否派生1*中某个串问题”

解: LX={|G是{0,1}*上的CFG,且1*∩L(G)≠?}

证明:构造TM T

T=“对于输入,A为CFG

1)将终结符“1”和“ε”做标记。

2)重复下列步骤,直至无可做标记的变元。

3)如G有规则A→U

1U

2

…U

n

,且U

1

U

2

…U

n

中每个符号都已做过标记,则将

A做标记,其中U

i

为终结符或非终结符。

4)如果起始变元没有被标记则拒绝,否则接受。”

T判定LX。

5.7证明:如果A是图灵可识别的,且A≤

m A

,则A是可判定的。

证:∵A≤

m A?A≤m A

且A为图灵可识别的

∴A也为图灵可识别的

∴由A和A都是图灵可识别的可知A是可判定的.

5.1 证明EQ

CFG

是不可判定的。

解:只须证明ALL

CFG ≤

m

EQ

CFG

即可。

构造CFG G

1,使L(G

1

)=∑*。设计从ALL

CFG

到EQ

CFG

的归约函数如下:

F=“对于输入<G>,其中G是CFG:1)输出<G,G

1

>。”

若<G>∈ALL

CFG ,则

1

>∈EQ

CFG

若<G>?ALL

CFG ,则

1

>?EQ

CFG

F将ALL

CFG 归约到EQ

CFG

即ALL

CFG

m

EQ

CFG

∵ALL

CFG

是不可判定的,

∴EQ

CFG

是不可判定的。

5.2证明EQ

CFG

是补图灵可识别的。

证明:注意到A

CFG

={|G是能派生串w的CFG}是可判定的。构造如下TM:F=“输入,其中G,H是CFG,

1) 对于字符串S 1, S 2,?,重复如下步骤。 2) 检测S i 是否可以由G 和H 派生。

3)

若G 和H 中有一个能派生w ,而另一个不能,则接受。”

F 识别EQ CF

G 的补。

5.4 如果A ≤m B 且B 是正则语言,这是否蕴涵着A 也是正则语言?为什么? 解:否。例如:

对非正则语言A={0n 1n |n ≥0}和正则语言B={0},可以构造一个可计算函数f 使得:

f(w)=???≠=n

n n

n 1

0w 1,10w 0, 于是w ∈A ?f(w)∈B,故A ≤m B 。

5.24证明:对任意字符串x ,令f 1(x)=0x 。则有x ∈A TM ?f 1(x)=0x ∈J 。即有A TM ≤m J 。进一步有TM A ≤m J 。由TM A 图灵不可识别知J 图灵不可识别。

对任意字符串x ,令f 2(x)=1x 。则有x ?A TM ?f 2(x)=1x ∈J 。即有TM A ≤m J 。由TM A 图灵不可识别知J 图灵不可识别

计算复杂性-第一次作业

计算复杂性第一次作业 周雄(1152220101) March21,2018 题目1: ①对于00010,我们有如下瞬间描述迁移序列: q000010B?0q00010B?00q010B?000q010B?0000q10B?00000q1B?000000q2(接受) ②对于001000,我们有如下瞬间描述序列: q0001000B?0q001000B?00q01000B?000q1000B?0000q100B?00000q10B? 000000q1B?0000000q2(接受) ③对于0010001,我们有如下瞬间描述序列: q00010001B?0q0010001B?00q010001B?000q10001B?0000q1001B?00000q101B? 000000q11B(停机) 题目2: start 题目3: ①对于0011,我们有如下瞬间描述迁移序列: q00011B?Xq1011B?X0q111B?Xq20Y1B?q2X0Y1B?Xq00Y1B?XXq1Y1B? XXY q11B?XXq2Y Y B?Xq2XY Y B?XXq0Y Y B?XXY q3Y B?XXY Y q3B? XXY Y Bq4(接受) ②对于0101,我们有如下瞬间描述序列: q00101B?Xq1101B?q2XY01B?Xq0Y01B?XY q301B(停机) ③对于00111,我们有如下瞬间描述序列: q000111B?Xq10111B?X0q1111B?Xq20Y11B?q2X0Y11B?Xq00Y11B?XXq1Y11B?XXY q111B?XXq2Y Y1B?Xq2XY Y1B?XXq0Y Y1B?XXY q3Y1B?XXY Y q31B(停机)题目4: (1)

浅谈计算复杂性理论

浅谈计算复杂性理论 任忠 乌鲁木齐石化公司计控中心 摘要:本文阐述了计算复杂性理论的产生、定义、研究内容和发展。 关键词:算法分析;计算复杂性;起源;发展 1.计算法复杂性理论的起源 在几千年的数学发展中,人们研究了各式各样的计算,创立了许多算法。但是,以计算或算法本身的性质为研究对象的数学理论,却是在20世纪30年代才发展起来的。 1936年,为了讨论对于每个问题是否都有求解算法,数理逻辑学家提出了几种不同的计算模型的定义。K.Godel和S.C.Kleene等人创立了递归函数论,将数论函数的算法、可计算性刻画为递归可枚举性。A.M.Turing和E.L.Post提出了理想计算机的概念,将问题算法可解性刻画为在具有严格定义的理想计算机上的可解性。40年代以后,随着计算机科学技术的发展,研究的焦点从理论可计算法转移到现实可计算性上。人们不仅需要研究理论上的、原则上的可计算性,还要研究现实的可计算性,即研究计算一个问题类需要多少时间,多少存储空间,研究哪些问题是现实可计算的,哪些问题虽然原则上可计算,但由于计算的量太大而实际上无法计算等。因而一般算法设计方法研究和对一类问题算法解的难度分析便成为计算机科学的热点。此后,计算复杂性的研究等不断有所发展。由此产生了算法学和计算复杂性理论等新兴研究领域。 计算复杂性大的进展始于50年代末、60年代初,当时在美国有两个并行的中心,一个是通用电气公司设立于纽约州Schenectady的研究实验室,核心人物是J.Hartmanis和R.Stearns。1964年11月,他们在普林斯顿举行的第五届开关电路理论和逻辑设计学术年会上发表了论文"Computational Complexity of recursivese quences",论文中首次使用了"计算复杂性"这一术语,由此开辟了计算机科学中的一个新领域,并为之奠定了理论基础。他们两人是1993年度图灵奖获得者。另一个中心是麻省理工学院MIT,在那里,加州大学伯克利分校著名的计算机科学家Manuel Blum与前述两人互相独立地进行着相关问题的研究,并完成了他的博士论文:"Amachine independent theory of the complexity of recur- sive functions",Blum是受以色列学者M.O.Rabin的启发而开始这方面的研究的。Rabin 是希伯莱大学的教授,是研究计算复杂性问题的先驱,并在1976年荣获图灵奖。Blum的论文不但提出了有关计算复杂性的一些公理,而且在对复杂性类的归纳上也比其他学者有更高的抽象度。因此布、哈、斯三人被学术界公认为计算复杂性理论的主要奠基人。

可计算性与计算复杂性计算原理答案.doc

1.6 画出识别下述语言的DFA 的状态图。 a){w | w 从1开始以0结束} b){w | w 至少有3个1} c) {w | w 含有子串0101} d) {w | w 的长度不小于3,且第三个符号为0} e) {w | w 从0开始且为奇长度,或从1开始且为偶长度} 或

f) {w | w 不含子串110} g) {w | w 的长度不超过5} i){w | w 的奇位置均为1} j) {w | w 至少含有2个0,且至多含有1个1} k) {ε,0} 0,1 1

l) {w | w 含有偶数个0,或恰好两个1} m) 空集 n) 除空串外的所有字符串 1.29利用泵引理证明下述语言不是正则的。 a. A 1={0n 1n 2n | n ≥0}。 证明:假设A 1是正则的。设p 是泵引理给出的关于A 1的泵长度。 令S=0p 1p 2p , ∵S 是A 1的一个成员且S 的长度大于p ,所以泵引理保证S 可被分成3段S=xyz 且满足泵引理的3个条件。根据条件3,y 中只含0,xyyz 中,0比1、2多,xyyz 不是A 1的成员。违反泵引理的条件1,矛盾。 ∴A 1不是正则的。 b. A 2={www | w ∈{a,b}*}. 证明:假设A 2是正则的。设p 是泵引理给出的关于A 2的泵长度。 令S=a p ba p ba p b, ∵S 是A 2的一个成员且S 的长度大于p ,所以泵引理保证S 可被分成3段S=xyz 且满足泵引理的3个条件。根据条件3,y 中只含a ,所以xyyz 中第一个a 的个数将比后两个a 的个数多,故xyyz 不是A 2的成员。违反泵引理的条件1,矛盾。 ∴A 2不是正则的。

数学运算的计算复杂性

数学运算的计算复杂性 算术函数(Arithmetic functions) Schnorr and Stumpf conjectured that no fastest algorithm for multiplication exists.

乘法没有最快的算法。 代数函数 特殊功能 基本功能 The elementary functions are constructed by composing arithmetic operations, the exponential function (exp), the natural logarithm (log), trigonometric functions (sin, cos), and their inverses.(初等函数是由指数函数;自然对数;三角函数,以及他们的反函数)The complexity of an elementary function is equivalent to that of its inverse,(初等函数的复杂度与其反函数是一样的)since all elementary functions are analytic and hence invertible(可逆的)by means of Newton's method. In particular, if either exp or log can be computed with some complexity, then that complexity is attainable for all other elementary functions. Below, the size n refers to the number of digits of precision at which the function is to be evaluated. (n涉及到对函数进行评估的精度)

不可计算理论

不可计算理论 计算机有着强大的计算能力,那是不是当计算机的计算能力达到极高水平时就可以解决所有问题呢? 要回答这个问题,首先我们得明确计算机所能做的事——计算。 什么是计算呢?直观地看,计算一般是指运用事先规定的规则,将一组数值变换为另一(所需的)数值的过程。对某一类问题,如果能找到一组确定的规则,按这组规则,当给出这类问题中的任一具体问题后,就可以完全机械地在有限步内求出结果,则说这类问题是可计算的。这种规则就是算法,这类可计算问题也可称之为存在算法的问题。这就是直观上的能行可计算或算法可计算的概念。在20世纪以前,人们普遍认为,所有的问题类都是有算法的,人们的计算研究就是找出算法来。但是20世纪初,人们发现有许多问题已经过长期研究,却仍然找不到算法。于是人们开始怀疑,是否对这些问题来说,根本就不存在算法,即它们是不可计算的。这种不存在性当然需要证明,这时人们才发现,无论对算法还是对可计算性,都没有精确的定义!按前述对直观的可计算性的陈述,根本无法作出不存在算法的证明,因为“完全机械地”指什么?“确定的规则”又指什么?仍然是不明确的。 解决问题的需要促使人们不断作出探索。1934年,哥德尔提出了一般递归函数的概念,并指出:凡算法可计算函数都是一般递归函数,反之亦然。同年,丘奇证明了他提出的λ可定义函数与一般递归函数是等价的,并提出算法可计算函数等同于一般递归函数或λ可定义函数,这就是著名的“丘奇论点”。 用一般递归函数虽给出了可计算函数的严格数学定义,但在具体的计算过程中,就某一步运算而言,选用什么初始函数和基本运算仍有不确定性。为消除所有的不确定性,图灵在他的“论可计算数及其在判定问题中的应用”一文中从一个全新的角度定义了可计算函数。他全面分析了人的计算过程,把计算归结为最简单、最基本、最确定的操作动作,从而用一种简单的方法来描述那种直观上具有机械性的基本计算程序,使任何机械(能行)的程序都可以归约为这些动作。这种简单的方法是以一个抽象自动机概念为基础的,其结果是:算法可计算函数就是这种自动机能计算的函数。这不仅给计算下了一个完全确定的定义,而且第一次把计算和自动机联系起来,对后世产生了巨大的影响,这种“自动机”后来被人们称为“图灵机”。 图灵机有一条无限长的纸带,纸带被分成若干小方格方格内可以是一个符号,也可以是空白,除此之外还有一个有限状态控制器。纸带起着存储器的作用,控制器上的读写头可以在带上左右移动,而读写头可以根据当前状态和看到的方格内的符号,采取下列三种行动之一:左移一格,右移一格,或者静止不动,具体采取哪一种行动应根据该图灵机的控制规则。或者可以从另一个角度来理解,由于读写头每次只对应一个小方格且它本身具有一定的状态,比如接受,拒绝或进入循环。当其进入接受或者拒绝状态时,就会发生停机(停机问题),即读写头不再操作,不会再产生新的格局;如果其一直处于循环状态,将一直产生新的

3 计算复杂性理论

计算复杂性理论(Computational complexity theory)是计算理论的一部分,研究计算问题时所需的资源,比如时间和空间,以及如何尽可能的节省这些资源。 目录 [隐藏] ? 1 简介 ? 2 历史 ? 3 基本概念和工具 o 3.1 计算模型与计算资源 o 3.2 判定性问题和可计算性 o 3.3 算法分析 o 3.4 复杂性类 o 3.5 归约 ? 4 NP与P关系问题及相关理论 o 4.1 NP和P的定义 o 4.2 NP与P关系问题 o 4.3 NP完备理论 o 4.4 电路复杂性 o 4.5 其它NP与P关系问题相关的理论 ? 5 理论与实践 ? 6 参考 ?7 外部链接 [编辑]简介 计算复杂性理论所研究的资源中最常见的是时间(要通过多少步才能解决问题)和空间(在解决问题时需要多少内存)。其他资源亦可考虑,例如在并行计算中,需要多少并行处理器才能解决问题。 时间复杂度是指在计算机科学与工程领域完成一个算法所需要的时间,是衡量一个算法优劣的重要参数。时间复杂度越小,说明该算法效率越高,则该算法越有价值。 空间复杂度是指计算机科学领域完成一个算法所需要占用的存储空间,一般是输入参数的函数。它是算法优劣的重要度量指标,一般来说,空间复杂度越小,算法越好。我们假设有一个图灵机来解决某一类语言的某一问题,设有X个字(word)属于这个问题,把X放入这个图灵机的输入端,这个图灵机为解决此问题所需要的工作带格子数总和称为空间。

复杂度理论和可计算性理论不同,可计算性理论的重心在于问题能否解决,不管需要多少资源。而复杂性理论作为计算理论的分支,某种程度上被认为和算法理论是一种“矛”与“盾”的关系,即算法理论专注于设计有效的算法,而复杂性理论专注于理解为什么对于某类问题,不存在有效的算法。 [编辑]历史 在20世纪50年代,Trahtenbrot和Rabin的论文被认为是该领域最早的文献。而一般说来,被公认为奠定了计算复杂性领域基础的是Hartmanis和Stearns 的1960年代的论文On the computational complexity of algorithms。在这篇论文中,作者引入了时间复杂性类TIME(f(n))的概念,并利用对角线法证明了时间层级定理(Time Hierarchy Theorem)。 在此之后,许多研究者对复杂性理论作出了贡献。期间重要的发现包括:对随机算法的去随机化(derandomization)的研究,对近似算法的不可近似性(hardness of approximation)的研究,以及交互式证明系统(Interactive proof system)理论和零知识证明(Zero-knowledge proof)等。特别的复杂性理论对近代密码学的影响非常显著,而最近,复杂性理论的研究者又进入了博弈论领域,并创立了“算法博弈论”(algorithmic game theory)这一分支。 该领域重要的研究者有(不完全列表): ?史提芬·古克 ?姚期智(Andrew Chi-Chih Yao) ?Allan Borodin ?Manuel Blum ?Juris Hartmanis ?Richard Karp ?Leonid Levin ?Alexander Razborov ?Michel Sipser ?Avi Wigderson ?Walter Savitch ?Richard Stearns ?Lance Fortnow ?V. Arvind ?Lazlo Babai [编辑]基本概念和工具 [编辑]计算模型与计算资源

算法与计算复杂性课程(6)贪心

贪心法
(Greedy Approach)
基本思想 算法设计 设计要素 与动态规划法的比较 正确性证明 得不到最优解的处理办法 应用实例
1

基本思想
实例:最小生成树的 Kruskal 算法,活动选择问题 适用问题:组合优化问题,满足优化原则 设计方法:多步判断,解为判断序列 选择依据: 是否满足约束条件 局部优化测度 使用贪心法要解决的问题: 是否可以得到最优解? 不能得到最优解, 解与最优解的误差估计
2

例1
活动选择问题
S ={1, 2, … , n}为n 项活动的集合 si, fi分别为活动 i 的开始和结束时间 活动 i 与 j 相容 当且仅当 si≥fj 或 sj≥fi 求最大的两两相容的活动集 思路: 按结束时间递增顺序将活动排列为1,2,…,n, 使得 f1≤f2≤ … ≤fn 按照标号从小到大选择
3

贪心算法
算法 Greedy Select 1. n←length[S]; 2. A←{1}; 3. j←1; 4. for i←2 to n 5. do if si≥fj 6. then A ← A∪{i}; 7. j ← i; 8. return A. 最后完成时间为max {fk: k∈A}.
4


输入 i si fi 1 1 4 2 3 5 3 0 6 4 5 7 5 3 8

6 5 7 6 8 8 9 10 11 8 2 12
9 10 11 12 13 14
解为 A = {1, 4, 8, 11}
t=14
5

可计算性与计算复杂性计算原理答案

1.6画出识别下述语言的DFA的状态图 a){w | w从1开始以0结束} b){w | w 至少有3个1} c){w | w 含有子串0101} d){w | w 的长度不小于3,且第三个符号为0} e) {w | w 从0开始且为奇长度,或从1开始且为偶长度} 0,1 0,1

j) {w | w 至少含有2个0,且至多含有1个1} k) { & ,0} g) {w | w 的长度不超过5} 0,1 「:0,1 0 0 1

I) {w | w 含有偶数个0,或恰好两个1} 1.29利用泵引理证明下述语言不是正则的。 n n n a. A 1={0 1 2 | n 0}。 证明:假设A 是正则的。设p 是泵引理给出的关于 A 的泵长度。 - ppp 令 S=01 2 , ??? S 是A 1的一个成员且S 的长度大于P ,所以泵引理保证S 可被分成3段 S=xyz 且满足泵引理的3个条件。根据条件3, y 中只含0, xyyz 中,0 比1、2 多,xyyz 不是A 的成员。违反泵引理的条件1,矛盾。 ??? A 不是正则的。 * b. A 2={www | w {a,b} }. 证明:假设A 是正则的。设p 是泵引理给出的关于 A 的泵长度。 ppp 令 S=aba bab, ??? S 是A 的一个成员且S 的长度大于P ,所以泵引理保证S 可被分成3段 S=xyz 且满足泵引理的3个条件。根据条件3, y 中只含a ,所以xyyz 中 第一个 a 的个数将比后两个a 的个数多,故xyyz 不是A 的成员。违反泵 引理的条件 1,矛盾。 m)空集 n) 一 CP 。,1 1 1 除空串外的所有字符串

可计算性与计算复杂性

可计算性与计算复杂性Calculability & Complexity

第二章可计算函数 (1) 1、原语言 (1) 2、可计算函数 (1) 第三章递归函数 (3) 1、算子 (3) 2、原始递归函数 (3) 3、原始递归谓词 (3) 4、受囿取极小 (4) 5、递归与可计算性 (5) 习题 (5) 第四章POST-TURING程序和TURING机 (8) 1、P-T程序 (8) 2、Turing机 (9) 3、P-T程序编码 (10) 4、一些定理 (10) 习题 (11)

第五章半可计算性 (16) 习题 (17) 第六章半图厄系统 (18) 1、半图厄系统 (18) 2、半图厄系统与图灵机、半可计算集 (18) 3、不可判定问题 (18) 习题 (19) 第七章图灵机 (26) 习题 (26) 第八章计算复杂性理论 (27) 习题 (28) 历年真题 (29)

第二章可计算函数1、原语言 本书所有变元为非负整数 五条基本指令: ①X=X+1 ②X=X-1 (X=0,结果仍为0) ③TO A IF X≠0 ④TO A ⑤Y=X 宏指令: ·X 2、可计算函数 部分可计算函数:若有一程序P,使得 P (X1,X2,...,X n)=f(X1,X2,...,X n),则称f(X1,X2,...,X n)为部分可计算函数。 这里“=”表示:或者两边都无定义,或者两边都有定义并且值相同。 可计算函数:若f(X1,X2,...,X n)是部分可计算的而且是全函数,则称f(X1,X2,...,X n)为可计算函数。 两个常用函数 X1-X2,X1≥X2X1-X2,X1≥X2 X1X2 = X12 = 无定义,X1<X20 ,X1<X2 约定: ①输入变元:X0,X1,…… ②临时变元:Z0,Z1,…… ③输出变元:Y ④初始时,一切变元为0(输入变元除外) ⑤转向无定义标号或执行了最后一条指令时,停机

计算复杂性理论031104(2)

第三章计算复杂性理论主要内容 3.1 Turing机 3.2 计算复杂性理论 3.3 NP完全性理论的基本概念 3.4 NP完全性证明 3.5 用NP完全性理论分析问题 3.6 NP难度

3.1 Turing机 一、Turing机的定义 1. 基本模型 2. 基本Turing机的变种 单向带的Turing机 k条带的Turing机 非确定型的Turing机 二、Turing机模型的等价性 1. 单向带Turing机与基本Turing机等价 2. k条带的Turing机与基本Turing机等价 3. 非确定型Turing机与基本Turing机等价

一、Turing机的定义 1. 基本模型 双向无限带的Turing机M = , 其中Q 有穷状态集 Γ有穷带字符集 ∑输入字符集∑?Γ B 空白字符, B∈Γ-∑ q 0初始状态, q ∈Q F 终结状态集, F?Q,q Y ,q N ∈F δ: (Q-F)×Γ→Q×Γ×{L,R} 状态转移函数

(ID) α1qα 2 表示此刻Turing机的FSC处于状态q,读写头 指在串α 2 的第一个字符. 例如Turing机M的某时刻的状态转移函数是 δ(q,x i ) = (p,Y,L) 带上的字符串为x 1x 2 ...x i ...x n , 读写头指向字符x i , 则 它的瞬间描述是: x 1x 2 ...x i-1 qx i ...x n ┣x1x2...x i-2px i-1Yx i+1...x n ┣表示由左边的ID一步达到右边的ID ┣*表示由左边的ID经有限步达到右边的ID

计算理论复习

计算理论复习题 1、 什么是图灵机,图灵机的构造技术以及三种描述方式是什么? (1)图灵机:一个图灵机是一个7元组(Q ,∑,,Γ,δ,0q ,accept q ,reject q ),其中 ,,Q ∑Γ都是有穷集合,并且○ 1Q 是状态集;○2∑是输入字母表,不包括特殊空白符号︼;○3 Γ是字母表,其中:︼∈Γ∑?Γ,;○4:{,}Q Q L R δ?Γ→?Γ?;○50 q Q ∈是起始状态;○6accept q Q ∈是接受状态;○7reject q Q ∈是拒绝状态,且reject accept q q ≠。 (2)构造技术:○ 1有限控制器的存储构造TM ,检查第一个输入是不是出现在输入的其他地方;○2多道;○3查询符号(打标记);○4移动:如把一个字符串整体后移; ○5调用子程序。 (3)描述方式:○ 1形式描述,即详尽地写出图灵机的状态、转移函数等,这是最低、最详细程度的描述;○ 2实现描述,这种方法使用日常语言来描述图灵机的运行,如怎么移动读写头,怎么在带上存储数据等,没有给出 状态和转移函数的细节;○ 3高水平描述,它也是使用日常语言来描述算法,但忽略了实现的模型,不再需要提及机器是怎么管理它的带子或读写头。 2、什么是图灵机的格局,图灵可识别,图灵可判定? (1)图灵机计算过程中,当前状态、当前带内容和读写头当前位置组合在一起,称为图灵机的格局,也即是瞬间状态。 (2)如果一个语言能被某一图灵机识别,则称该语言是图灵可识别的。 (3) 如果一个语言能被某一图灵机判定,则称它是图灵可判定的。 3、什么是多带图灵机,非确定型图灵机,枚举器,递归可枚举语言? (1)多带图灵机很像普通图灵机,只是有多个带子,每个带子都有自己的读写头,用于读和写。开始时,输入出现在第一个带子上,其它的带子都是空白。转移函数改为允许同时进行读、写和移动读写头,其形式为:δ:Q ?Γ k →Q ?Γk ?},{R L k 此处k 是带子的个数。表达式δ( q i ,a 1, ,a k )=(q j ,b 1, ,b k ,L ,R , ,L )指的是:若机器处于状态 q i ,读写头1到k 所读的符号分别是a 1, ,a k ,则转移到状态q j ,写下符号b 1, 。,b k ,且按此式所指示的那样移动每个读写头。 推论1:每个多带图灵机都有一个与之等价的单带图灵机。 推论2:一个语言是图灵可识别的,当且仅当有多带图灵机识别它。 (2)非确定型图灵机:非确定型图灵机在计算的任何时刻,机器可以在多种可能性中选择一种继续进行。它的转移函数具有如下形式:δ:Q ?Г→P 3 (Q ?Г?{L ,R ,S}) 其计算是一棵树,不同分枝对应着机器不同的可能性。如果计算的某个分枝导致接受状态,

计算理论复习

计算理论复习题 1、一个图灵机是一个7元组(Q ,∑,,Γ,δ,0q ,accept q ,reject q ),其中,,Q ∑Γ都是有穷集合,并且1)Q 是状态集;2)∑是输入字母表,不包括特殊空白符号︼;3)Γ是字母表,其中:︼∈Γ∑?Γ,;4):{,}Q Q L R δ?Γ→?Γ?;5)0q Q ∈是起始状态;6)accept q Q ∈是接受状态;7)reject q Q ∈是拒绝状态,且reject accept q q ≠。 构造技术:(1)有限控制器的存储构造TM ,检查第一个输入是不是出现在输入的其他地方;(2)多道;(3)查询符号(打标记);(4)移动:如把一个字符串整体后移. 2、如果有图灵机识别一个语言,则称该语言是图灵可识别的。 称一个语言是图灵可判定的,或简单的讲,是可判定的,如果有图灵机判定它。 3、多带图灵机 多带图灵机很像普通图灵机,只是有多个带子,每个带子都有自己的读写头,用于读和写。开始时,输入出现在第一个带子上,其它的带子都是空白。转移函数改为允许同时进行读、写和移动读写头,其形式为: δ:Q ?Γk →Q ?Γk ?},{R L k 此处k 是带子的个数。表达式δ( q i ,a 1, ,a k )=(q j ,b 1, ,b k ,L ,R , ,L )指的是:若机器处于状态 q i ,读写头1到k 所读的符号分别是a 1, ,a k ,则转移到状态q j ,写下符号b 1, 。,b k ,且按此式所指示的那样移动每个读写头。 每个多带图灵机都有一个与之等价的单带图灵机。 一个语言是图灵可识别的,当且仅当有多带图灵机识别它。 非确定型图灵机: 非确定型图灵机在计算的任何时刻,机器可以在多种可能性中选择一种继续进行。它的转移函数具有如下形式: δ:Q ?Г→P 3 (Q ?Г?{L ,R ,S}) 其计算是一棵树,不同分枝对应着机器不同的可能性。如果计算的某个分枝导致接受状态,则接受该输入。 每个非确定型图灵机都有一个与之等价的确定型图灵机。 一个语言的是图灵可识别的,当且仅当有非确定型的图灵机识别它。 4、枚举器 它是图灵机的一种变形,是带有打印机的图灵机。每当图灵机想在打印序列中增加一个串时,就把串送到打印机。 一个语言是图灵可识别的,当且仅当有枚举器枚举它。 5、丘奇——图灵论题 算法的直觉概念=图灵机算法;算法的非形式概念和精确定义之间的等价联系。 6、图灵机算法有哪三种描述方式?

可计算理论教学大纲

《可计算理论》教学大纲 一、课程简介 课程中文名称:可计算理论 课程英文名称:Computability Theory 课程中文简介: 通过介绍图林机、递归函数、URM等计算模型及它们的等价性证明,引入可计算的概念,建立对Church-Turing命题的认同,初步掌握问题的不可判定性的证明方法,形成对问题的可计算性/不可判定性的直觉。 授课内容包括:计算模型(图林机、递归函数、URM)、Church-Turing命题、哥德尔编码、S-m-n定理、通用程序、可判定性与半可判定性、递归集与递归可枚举集、规约与类、递归定理。对软件工程专业的学生而言,可计算理论课程将帮助其建立起对整个学科的定性认识,课程的基本内容将对其未来的技术职业产生不可替代的影响。 课程英文简介: The purpose of the course is to have the students establish the instinct about computability. By discussing the well-known computation models and the proof of their equivalence, Church-Turing Thesis is introduced and reinforced by exercises. At the technical level, the students are exposed to the basic approaches of recursion, numbering and diagonalization. The topics covered by the course include computation models, Church-Turing Thesis, Godel index, S-m-n theorem, universal program, decidability and partial decidability, recursive set and recursive enumerable set, reduction and degree, recursion theorem.

《计算理论》复习题总结

《计算理论》复习题总结 1、自动机、可计算性、复杂性内涵及关系; 计算理论的三个传统的核心领域:自动机、可计算性和复杂性。通过“计算机的基本能力和局限性是什么?“这一问题将这三个领域联系在一起。可计算理论与复杂性理论是密切相关的,在复杂性理论中,目标是把问题分成容易计算的和难计算的;而在可计算理论中,是把问题分成可解的和不可解。自动机阐述了计算的数学模型的定义和性质,主要包含两种模型:有穷自动机模型;上下文无关文法模型。可计算性理论和复杂性理论需要对计算机给了一个准确的定义。自动机理论允许在介绍与计算机科学的其他非理论领域有关的概念时使用计算的形式化定义。 2、有穷自动机、正则语言、正则表达式、非确定有穷自 动机、非正则语言; 有穷自动机:描述能力和资源极其有限的计算机模型。是一个5元组(Q,∑,δ,q0,F),其中1)Q是一个有穷集合,称为状态集。2)∑是一个有穷集合,称为字母表。3)δ:Q×∑→Q是转移函数。4)q0∈Q是起始状态。5)F?Q是接受状态集。 正则语言:如果一个语言能被有穷自动机识别。 正则表达式:用正则运算符构造描述语言的表达式。称R是正则表达式,如果R是:1)a,a是字母表中的一个元素;2)ε;3)?;4)(R1?R2);5)(R1 R2);6)(R1*) 非确定有穷自动机:是一个5元组(Q,∑,δ,q0,F),其中1)Q是有穷状态集。2)∑是有穷字母表。3)δ:Q×∑ε→P(Q)是转移函数。4)q0∈Q是起始状态。5)F?Q是接受状态集。 3、上下文无关语言及上下文无关文法、歧义性、乔姆 斯基范式、下推自动机、等价性、非上下文无关语言; 上下文无关语言:用上下文无关文法生成的语言。 上下文无关文法:是一个4元组(V,∑,R,S)且1)V是一个有穷集合,称为变元集2)∑是一个与V不相交的有穷集合,称为终结符集3)R是一个有穷规则集,每条规则由一个变元和一个由变元及终结符组成的字符串构成,4)S∈V是起始变元 歧义性:如果字符串W在上下文无关文法G中有两个或者两上以上不同的最左派生,则称G歧义地产生的字符串W。如果文法G歧义的产生某个字符串则称G是歧义的。 乔姆斯基范式:一个上下文无关文法如果它的每一个规则具有如下形式A→BC A→a其中a为任意终结符,ABC为任意变元且BC不是起始变元,此外允许规则S→ε其中S是起始变元。 下推自动机:是6元组Q,∑,Γ,δ,q0,F),这里Q,∑,Γ,F都是有穷集合,并且1)Q是状态集 2)∑是字母表 3)Γ是栈字母表 4)δ: Q×∑ε×Γε→P(Q×Γε)是转移函数学 5)q0∈Q是起始状态。6)F?Q是接受状态集。 4、各种等价性; 每一台非确定型有穷自动机等价于一台确定的有穷自动机;一个语言是正则的当且仅当可以用正则表达式描述;一个语言是上下文无关的则存在一台下推自动机识别它。 5、计算科学;能性问题;Church-Turing论题;计算; 可计算; 计算科学:系统的研究信息描述和变换的算法,包括其理论、分析、设计、效率、实现和应用。用计算科学涵盖并称谓计算机科学和计算机工程。计算机科学所研究问题的核心是能行问题。能行问题:什么能被(有效的)自动化?什么不能被(有效)的自动化? Church-Turing论题:可计算性等价于Turing机可计算性。 计算:Truing机所进行的工作就是计算。 可计算:Turing机能够进行的工作就叫可计算。 6、几个计算模型;各种计算模型的特点;图灵机的特点; 计算模型:1、递归函数。G?del,Church,等人提出并完善了递归函数理论。从数学演算的思想出发,考虑从简单的、直观上可计算的函数出发构复杂的可计算函数。2、Turing机(理论模型):Turing研究的Turing机计算模型与现代计算机更接近,在Turing机的基础上引进了大量的自动机。 3、Church-λ演算:用来描述计算过程,基本思想主要用于函数式程序语言的研制。4、Post系统(符号变换系统):Post系统的基础上引进了大量的形式语言。 Turing机的特点:存储无穷,时间无限制。Turing机可计算只是理论上可计算,并不是现实可计算。现实可计算:研究计算复杂性。但如果Turing机不可计算则现实更不可计算。 7、原语言,指令系统,输入输出规定; 原语言:变元、标号(语句标号)、指令:X=X+1;X=X-1;To A IF X≠0;To A;Y=X输入变元用x表示 x,x1,x2,x3,……输出变元用y表示,函数只输出一个值。 对程序做如下两点规定:1、当程序开始执行时自动认为一切变元的值为0 (输入变元除外)2、当程序出现下列两种情形之一时,自动认为停机。a、转向无定义的标号b、执行程序的最后一条指令。 8、n元程序对应的n元函数的定义; 若程序P恰有n个输入变元X1,X2,……,Xn,而没有其它X变元,则称P为n元程序。

可计算性理论

1 引言 可计算理论建立于二十世纪三十年代。可计算理论的研究对象有三个 : (1) 判定问题 ; (2 ) 可计算函数 ; (3 ) 计算复杂性。判定问题主要是判定方程是否有解 ;可计算函数主要讨论一个函数是否可计算 , 建立了原始递归函数、图灵机等许多数学模型判定一个函数是否属于可计算函数 ;计算复杂性主要讨论的问题是P =?NP。可计算理论的计算模型主要包括 : (1) Turing机 ; (2 ) 递归函数; (3 ) λ演算 ; (4) POST系统 ; (5) 正则算法。可计算理论是理论计算机科学 , 属于计算机科学的基础研究领域 , 可计算理论是计算机软件工程、系统结构、并行运算、图像处理、人工智能、网络的数学理论基础和工具.可计算性理论是从三十年代初期开始哥德尔、丘吉、图林和波斯特等人为了解决数学基础方面的问题,(具体说.来是为了通过薮学方法来研究公理系统的性质),而发展起来的。(其中波斯特的工作则是在二十年代前期已经作出的,但到了四十年代才公开发表。)电子计算机产生后,可计算性理论的有些成果被应用于计算 技术。(近十年来发展起来的可行计算理论则是与计算技术直接有关并作为这一技术的数学理论而发展的。) 2 历史变迁 可计算理论是关于计算机械本身的数学理论. 二十世纪前, 计算机械总是“算计”别的对象, 很少“算计”自己。二十世纪 30年代, 为了要解决一个基础问题, 即是否存在不可判定问题, 数理逻辑学家提出了几种不同的 (后来证明是彼此等价的) 关于算法的定义, 从而建立了可计算性理论。 德国数学家希尔伯特 (Hilbert 1862-1943) 认为科学在每个时代都有它自己的问题, 而这些问题的解决对于科学发展具有深远意义。他指出:“只要一门科学分支能提出大量的问题, 它就充满着生命力, 而问题缺乏则预示着独立发展的衰亡和终结。” 在1900年国际数学家代表大会上, 希尔伯特发表了题为《数学问题》的著名讲演, 他根据十九世纪数学研究的成果和发展趋势, 提出了23个最重要的数学问题。在这些问题中, 有四个问题是某类问题是否可计算。它们分别是: (1) 只根据合同公理证明等底等高的两个四面体有相等之体积是不可能的, 即存在两个等高等底的四面体, 它们不可能分解为有限个小四面体, 使这两组四面体彼此全等。 (2) 能否通过有限步骤来判定不定方程是否存在有理整数解? 求出一个整数系数方程的整数根, 称为丢番图 (约210-290, 古希腊数 学家) 方程可解。1950年前后, 美国数学家戴维斯 (Davis) 、普特南 (Putnan) 、罗 宾逊 (Robinson) 等取得关键性突破。1970年, 巴克尔 (Baker) 、费罗斯 (Philos) 对含两个未知数的方程取得肯定结论。1970年。苏联数学家马蒂塞维奇最终证明:在一 般情况答案是否定的。 (3) 一般七次代数方程以二变量连续函数之组合求解的不可能性。七次方程x7+ax3+bx2+cx+1=0的根依赖于3个参数a、b、c;x=x (a, b, c) 。这一函数能否用两变量函数表示出来?此问题已接近解决。1957年, 苏联数学家阿诺尔德(Arnold) 证明了任一在[0, 1]上连续的实函数f (x1, x2, x3) 可写成形式∑hi (ξi (x1, x2) , x3) (i=1~9) , 这里hi和ξi为连续实函数。柯尔莫哥洛夫证明f (x1, x2, x3) 可写成形式∑hi (ξi1 (x1) +ξi2 (x2) +ξi3 (x3) ) (i=1~7) 这里hi和ξi为连续实函数, ξij的选取可与f完全无关。1964年, 维土斯金 (Vituskin) 推广到连续可微情形, 对解析函数情形则未解决。 (4) 实系数有理函数f (x1, …, xn) 对任意数组(x1, …, xn) 都恒大于或等于0, 确定f是否都能写成有理函数的平方和?特别是第二个问题, 尽管得出了否定的结果, 却产生了一系列有价值的副产品, 其中不少

计算方法讲义课件 二 算法与可计算性

第二章算法与可计算性理论 2.1 算法 算法是信息科学的基础理论。70年代Knuth出版了《The Art of Computer Programming》, 以各种算法研究为主线,确立了算法的重要性。1974年获得图灵奖。 如同建筑设计、产品设计,总需要一些工程图一样,在生成实际中常需要进行算法设计。解决计算问题过程:可计算否→算法设计→编程实现→软件系统。那么什么是算法?很难给出一个完整的、明确的关于算法的定义。 算法(algorithm)这个词最早出现于12世纪,指用数字实现计算的过程,现在是指用计算机解决问题的程序或步骤。计算方法与算法是密不可分的。算法一般没有明确的定义,下面几个问题是算法要重点考虑的: ●计算速度。 ●存储量。 ●数值稳定性。 先不给具体定义,只举例说明。平面区域的三角剖分问题,看其来简单,但实际算法比较复杂。Delaunay剖分:给定平面上一个点集,存在一种三角剖分,使三角形的最小角达到最大。

算法的定义:是满足下列条件的一系列计算步骤: 1.有限性:有限步内必须停止。 2.确定性:每一步都是严格定义和确定的动作。 3.可行性:每一个动作都能够被精确地机械执行。 4.输入:有一个满足给定约束条件的输入。 5.输出:满足给定约束条件的结果。 算法的分析: 1.正确性。一个算法是正确的,如果它对于每一个输入都最终停止,而且产生正确的输出。调试程序 程序正确性证明。程序调试只能证明程序有错误,不能证明程序无错误。 2.复杂性。预测算法对不同输入所需要的资源量。复杂性测度:时间,空间,I/O。用途:为求解一个问题选择最佳算法。时间:输入产生结果需要的原子操作或步骤数。空间:输入产生结果所需要的存储空间大

计算复杂性课后题

习题2.1.3 构造接受下述语言的确定型有穷自动机: (a) {b a w b a w 的前面是一个中每一个:},{*∈} (b) }{} {* ,:w a b w ∈含有子串abab (c) {ω∈{a,b}* :ω不含子串aa 和bb} (d) {ω∈{a,b}*:ω中有奇数个a 和偶数个b} (e) {ba ab w b a w 和含有字串:},{*∈} 解:(a ) pgk (b) (c ) (d) a 、b b a a b a b a b a b b a b a, b a a b b a a a b b

(e) 习题3.3.2 构造接受下述语言的下推自动机: (b ){:2}m n a b m n m ≤≤ (c )*{{,}:}R w a b w w ∈= (d )*{{,}:}w a b w b a ∈中的是的两倍 解:(b )栈的作用是对a 计数,然后将其与b 的个数进行比较,此处的困难在于一个a 可能对应一个b ,也可能对应两个b ,因此我们需要非确定性。 M =?({s,f,g},{a,b},{a},,s,{f,g}),其中 ?={((s,a,e),(s,a)),读a 并推入a ((s,e,e),(f,e)),跳到f 准备读b f ((,b,a),(f,e)),读b,托出一个a f g g ((,b,a),(,e)),读b,托出一个a ,跳到,准备再读一个b g e f ((,b,),(,e))}读b,不托出a (c) 构造如下自动机M=(K,∑,Γ,Δ,s,F),其中K={s,f},∑={a,b},Γ={a,b},F={f},而Δ是如下七个转移的集合: (1)((s,a,e ),(s,a )) (2)((s,a,e ),(f,e )) (3)((s,b,e ),(s,b )) (4)((s,b,e ),(f,e )) (5)((s,e,e ),(f,e )) (6)((f,a,a ),(f,e )) (7)((f,b,b ),(f,e )) (d )要考虑两种情形:①栈正在对a 计数;②栈正在对b 计数 若栈正在对a 计数,则每读一个a ,要把两个a 推入栈;每读到一个b ,要把一个a 托出栈 若栈正在对b 计数,则每读到一个b,要把一个b 推入栈;每读到一个a ,要把两个b 托出栈 M={{s,q,f},{a,b},{a,b,#},△,s,{f}},其中 △={((s,e,e ),(q,#)), 推入#,转到状态q ((q,a,#),(q,aa#)), 空档,读a ,推入两个a ((q,a,a ),(q,aaa )), 栈正在对a 计数,读a ,推入两个a ((q,a,bb ),(q,e )), 栈正在对b 计数,读a,托出两个b ((q,a,b#),(q,a#)), 栈中只有一个b (和#),读a,栈更新为a# ((q,b,#),(q,b#)), 空栈,读b ,推入一个b ((q,b,b ),(q,bb )), 栈正在对b 计数,读b ,推入一个b ((q,b,a ),(q,e )), 栈正在对a 计数,读b ,托出一个a ((q,e,#),(f,e ))} 空栈,托出#,转到状态f 习题4.1.1 设}){s,,,,(M h k δ∑=,其中 01K {,,}q q h =, {,,U }a b ∑=?,,

相关文档
最新文档