计算理论课后习题答案
[a] 0 [b
1 0,1 0] 0,1
[c]
[e]
1
2020/3/30
9.给定DFA M如图所示。求一个左线性文法G,使得
L(G)=T(M)。 解:有两种方法。
方法1 1.先将M逆转成M’: 2.根据M’构造右线性文 法G’:
1
A0 B1 C
0
0,1
1
A
0 B
1
ε
C
S
0 0,1
ε
P={qap|δ(q,a)=p}∪{qa|δ(q,a)∈F}。
ε ε
ε q1 0 q2 ε
ε q11
q13
ε q3
1
q4 ε
q12 ε
ε q14
q9
1 q10
ε
ε
ε
q16
q15
ε
ε
ε
q0
ε
q5 0 q6 ε q7 1 q8 ε
q17
2020/3/30
7.给定FA M如下图所示,求它所接收的语言T(M)的正规表达式。 ຫໍສະໝຸດ :10 0 q1 q1
2
ri0j{a a 1 1 a a 2 2 .. .a .. m .a m
构造一个DFA M2,使得T(M1)=T(M2) 。
解:令 M2=(K’,∑, δ’, q0’,F’), 其中 K’2K,K’中的元素是由K的子集
δ0 1 p {p,q} {p} q {r } {r}
{q1,q2,…,qi}构成,但是要把子集
r {s} Φ
{q1,q2,…,qi}作为的一个状态看待,
给定DFA M=(K,∑,δ,q0,F),
a 0 b1 f
p,q∈K, pq 对 x∈∑*, 有
1 0,1 0 1 1 0 0
δ(p,x)∈Fδ(q,x)∈F
c
如果pq 也称p与q是不可区分的。
e
0 1d
二.商集K/ 三.的逆关系̷
p̷q x(x∈∑*∧(δ(p,x)∈Fδ(q,x)∈F))
x(x∈∑*∧ ((δ(p,x)∈F∧δ(q,x)F)∨(δ(p,x)F∧δ(q,x)∈F)))
ˆ (q,wa)=ε-CLOSURE(δ( (ˆq,w),a))
2020/3/30
因为fCLOSURE(a)={a,b}, 所以F’=F={f} δ’ :q∈K,任何a∈∑, δ’(q,a)= (ˆq,a) 。
ε
ε a0
b c
1 ε
d ε
e
0 1
f
在计算 ˆ (q,a)时,要将a理解成a路径! 例如δ’(a,0)= (ˆa,0)={c,e,d,b} 。
凡是符合要求的句子G都能产生出来; G产生出来的所有句子都是符合要求的。 (1) G=({S,A,B,C},{a,b,c},P,S)
P: S→ABC , A→aA|a, B→bB|b,C→cC|c
2020/3/30
(2) G=({S,A,B,C},{a,b,c},P,S) P: S→aA , A→aA| bB, B→bB|cC, C→cC|ε
δ’:
0
a {c,e,d,b}
b
Φ
c
{f}
d
{f}
e
{f}
f
Φ
1 {d,b} {d,b} {f,d,b} {d,b} {f,d,b}
Φ
2020/3/30
5.化简正规表达式 a(ε+aa)*(ε+a)b+b+φ(ab*+b)*。 解:上式=a(aa)*(ε+a)b+b 其中(aa)*(ε+a)代表集合: {ε,aa,aaaa,aaaaaa,…}{ε,a} = {ε,aa,aaaa,aaaaaa,…}{a,aaa,aaaaa,…} ={ε,a,aa,aaa,aaaa,aaaaa,aaaaaa,…}={a}* 于是上式=aa*b+b=a+ b+b= (a++ε)b= a*b
执行此算法的结果用一个表表示,实际上,执行此算 法的过程就是向这个表内写入“×”的过程。
b× c ×× d ×?× e × × ×× f × × × × (b,d)
a b cde
a 0 b1 f
1 0,1 0 1 1 0 0
c
e
0 1d
(a,b): 0 1 (a,c): 0 1
ab
ab
be
ca
(a,d): 0 1 ab
K’={[q]| [q]∈K/且在M中q是从q0 可达的状态} F’={[q]| q∈F} δ’:对任何[q]∈K’,任何a∈∑,
δ’([q],a)=[δ(q,a)]
2020/3/30
K/{{a},{b,d},{c},{e,f}}={[a],[b],[c],[e]},
([b]=[b,d],[e]={e,f})
K’= {[a],[b],[c],[e]} F’={[e]}
a 0 b1 f
M’=(K’,∑,δ’,[a], F’)
1
=({[a],[b],[c],[e]},{0,1},δ’,[a],{[e]})
0,1
0
11 0 0
δ’([q],a)=[δ(q,a)]
c
e
0 1d
δ’: 0 1
[a] [b] [c] [b] [e] [e] [c] [a] [a] [e] [b] [e]
s {s} {s}
因此把此子集写成[q1,q2,…,qi]。
q0’=[q0] ,
F’={[q1,q2,…,qi]|[q1,q2,…,qi]∈K’且{q1,q2,…,qi}∩F≠Φ} δ’ :K’×∑→K’,对[q1,q2,…,qi]∈K’, a∈∑,有
δ’([q1,q2,…,qi],a)=[p1,p2,…,pj] 当且仅当
δ({q1,q2,…,qi},a)={p1,p2,…,pj}
2020/3/30
q0’=[p] , K’和F’以后确定。
δ0 1
δ’:
p {p,q} {p}
0
1
q {r } {r}
[p] [p,q]
[p]
[p,q] [p,q,r]
[p,r]
[p,r] [p,q,s]
[p]
r {s} Φ
s {s} {s} 1 [p] 0 [p,q]
ε
ε a0
b c
1 ε
d ε
e
0 1
f
解:M’=(K, ∑, δ’,q0 ,F’),q0是M的开始状态,其中
F{F{q0} F
如果 ε- CL O U S0)U FR Φ E (q 否则
δ’ :对任何q∈K,任何a∈∑, δ’(q,a)= (qˆ,a) 。
公式(1):对于q∈K, , ˆ (q,ε)=ε-CLOSURE(q) 公式(2): 对于q∈K, w∈∑*, a∈∑,
SA|C| ε A0B B0A|0C|1C|0 C1A|1B|1
3.将G’逆转成左线性 文法G:
2.设计下列各文法G,使得它们分别是: (1)G是个上下文无关文法,且
L(G)={aibj ck ∣ i,j,k≥1}。 (2)G是个正规文法,且
L(G)={aibj ck ∣ i,j,k≥1}。 (3)G是个上下文无关文法,且
L(G)={ wwR∣w∈{0,1}+ }。其中wR是w的逆转,例 如w=001, 则wR=100. 解:设计一个文法G要验证:
x(x∈∑*,使得δ(p,x)与δ(q,x)恰有一个在F中 )
如果p̷q, 称p与q是可区分的。判断p̷q是比较容易的 。
2020/3/30
4.判断可区分状态对的算法
引理2-1 设M=(K,∑,δ,q0,F)是DFA,则状态对(p,q)是可区分 的(即p̷q),当且仅当在下面算法中(p,q)格写上×。 begin 1.for p∈F,q∈K-F, do 给(p,q)格写×; 2.for F×F或(K-F)×(K-F)中每个状态对(p,q) (p≠q),do 3.if a∈∑,使得格(δ(p,a),δ(q,a))内已经写上×,then
1
[p,r,s] 1 [p,s] 1 [p,r,s]
K’={[p],[p,q],[p,r],[p,s],[p,q,r],[p,q,s],[p,r,s],[p,q,r,s]}
F’ ={ [p,s],[p,q,s],[p,r,s],[p,q,r,s]}
2020/3/30
4.将下面的ε-NFA M等价变换成NFA M’。
a,b q3 a,b
2020/3/30
2.设计二个FA M1和M2,分别满足
T(M1)={02i∣i是自然数}
T(M2)={02i+1∣i=0,1,2,3,4,…}
解: M1 :
q0 0
0
q1
q3
0
0
q0
q1
0
M2 :
0
q0
q1
0
2020/3/30
3. 给定NFA M1 =({p,q,r,s},{0,1},δ,p,{s}),如下表所示。
2020/3/30
6.构造一个FA M,使得T(M)的正规表达式为 01+((0+1)*1)*。 解:1.分解表达式,找出基本单元:0,1,01,1。设计接收 这些基本单元的自动机如下:
q1 0 q2
q3 1 q4
q5 0 q6
q7 1 q8
q9 1 q10
2020/3/30
2.组装: (按照优先权从高到低) 01+((0+1)*1)*
r= r122 r1 1(2 r2 1)2*r2 1 2r1 12 r1 1(2 r2 1)2 r1 12 r1 1(2r(2 1)2 ε ) r1 1(2 r2 1)2* 1*0(1*0ε) * 1*0(1*0) * (1*0)