24-25-2-形式语言与自动机-期中

1. (15分)

构造文法能够产生下列语言,并指明文法类型。

  1. L1={anbm+1m,n0}L_1=\{a^n b^{m+1} \mid m, n \geq 0\}
答案 / 解析

设文法 G1=(N1,Σ1,P1,S)G_1 = (N_1, \Sigma_1, P_1, S),其中

N1={S,B}N_1 = \{S, B\}

Σ1={a,b}\Sigma_1 = \{a, b\}

P1P_1 包含以下产生式:

  1. SaSS \to aS
  2. SbBS \to bB
  3. SbS \to b
  4. BbBB \to bB
  5. BbB \to b

语言 L1L_1 是正则语言。(产生式可有多种答案,此处仅给出其中一种)

  1. L2={ww 由字符 {0,1} 构成,且 0 和 1 的个数相等}L_2=\{ w \mid w \text{ 由字符 } \{0, 1\} \text{ 构成,且 0 和 1 的个数相等}\}
答案 / 解析

设文法 G2=(N2,Σ2,P2,S)G_2 = (N_2, \Sigma_2, P_2, S),其中

N2={S}N_2 = \{S\}

Σ2={0,1}\Sigma_2 = \{0, 1\}

P2P_2 包含以下产生式:

  1. SεS \to \varepsilon
  2. S0S1S \to 0S1
  3. S1S0S \to 1S0
  4. SSSS \to SS

语言 L2L_2 是上下文无关语言。

2. (15分)

已知右线性文法 G = ({S, A}, {0, 1}, P, S) 其中 P: S—>0A, A—> 1A | 0S | 1,构造与之等价的有限自动机,并将其转化为确定的有限自动机,并采用格局的方法写出 01001 的识别过程。

答案 / 解析

自动机

自动机

确定自动机

确定自动机

({S},01001)({A},1001)({A,B},001)({S},01)({A},1)({A,B},ε)(\{S\}, 01001) \vdash (\{A\}, 1001) \vdash (\{A,B\}, 001) \vdash (\{S\}, 01) \vdash (\{A\}, 1) \vdash (\{A,B\}, \varepsilon)

3. (6分)

已知右线性文法 G, 用正则表达式表示文法所产生的语言。

G=({S,A,B},{0,1},P,S)G=(\{S, A, B\}, \{0,1\}, P,S)

生成式 PP 如下:

S0AS1BS1S\to0A \quad S\to1B \quad S\to1 A1AA0A\to1A \quad A\to0 B1SB\to1S
答案 / 解析
L(G)=(11)(010+1)L(G) = (11)^*(01^*0 + 1)

4. (10分)

使用泵浦引理,证明集合 {akbkck1}\{ a^k b^k c \mid k \geq 1\} 不是正则集。

答案 / 解析

假设集合 L={akbkck1}L = \{ a^kb^kc \mid k \geq 1 \} 是正则的。根据泵浦引理,存在一个泵浦长度 p \geq 1,使得任何字符串 w \in L 且 wp|w| \geq p,都可以被分解为 w=xyzw = xyz,满足以下条件:

xyp|xy| \leq p

y1|y| \geq 1

对于所有 i0i \geq 0xyizLxy^iz \in L

选择字符串 w=apbpcw = a^pb^pc。显然 wLw \in Lw=2p+1p|w| = 2p + 1 \geq p

由于 xyp|xy| \leq p 且 w 以 apa^p 开头,所以子串 xy 必定只包含 a。又因为 y1|y| \geq 1,所以 y 必须是 aja^j 的形式,其中 1jp1 \leq j \leq p

因此,x=amx = a^my=ajy = a^jz=a(pmj)bpcz = a^{(p-m-j)}b^pc,其中 m+jpm+j \leq p

现在考虑 i=0i = 0 的情况,即泵浦串 xy0z=xzxy^0z = xz

xz=ama(pmj)bpc=a(pj)bpcxz = a^m a^{(p-m-j)}b^pc = a^{(p-j)}b^pc

由于 j1j \geq 1,所以 pj<pp-j < p。因此,在字符串 xz 中,a 的数量 (pj)(p-j) 不等于 b 的数量 (p)(p)

所以,xzLxz \notin L

这与泵浦引理的条件 (3) 相矛盾。因此,最初的假设是错误的。

故集合 {akbkck1}\{ a^kb^kc \mid k \geq 1 \} 不是正则集。

5. (10分)

第五题图

第五题图

采用填表法化简下面的自动机,求出最简自动机。

答案 / 解析

填表法

填表法

状态1与2等价,状态5、6、7相互等价。

状态输入 ’a’输入 ’b’{1,2}{5,6,7}{3}{3}{1,2}{5,6,7}{4}{4}{5,6,7}{5,6,7}{4}{1,2}\begin{array}{llll} \text{状态} & \text{输入 'a'} & \text{输入 'b'} \\ \hline \{1,2\} & \{5,6,7\} & \{3\} \\ \{3\} & \{1,2\} & \{5,6,7\} \\ \{4\} & \{4\} & \{5,6,7\} \\ \{5,6,7\} & \{4\} & \{1,2\} \\ \end{array}

自动机

自动机

6. (20分)

将下面的ε-NFA 转换为 DFA,并给出右线性文法。

εab
->q0{q1}{q2}Φ
q1Φ{q1}{q1,q2}
*q2Φ{q0}Φ
答案 / 解析

ε\varepsilon-closure(q0) = {q0,q1}\{q0, q1\}

ε\varepsilon-closure(q1) = {q1}\{q1\}

ε\varepsilon-closure(q2) = {q2}\{q2\}

A=εA = \varepsilon-closure(q0) = {q0,q1}\{q0, q1\}

B={q1,q2}B = \{q1, q2\}

状态 A 不包含 q2,不是接受状态。 状态 B 包含 q2,是接受状态。

abABBBAB\begin{array}{|c|c|c|} \hline & a & b \\ \hline \rightarrow A & B & B \\ \hline *B & A & B \\ \hline \end{array}

G=(V,Σ,S,P)G = (V, \Sigma, S, P)

V={A,B}V = \{A, B\}

Σ={a,b}\Sigma = \{a, b\}

S=AS = A

P:P:

  1. AaBA \to a B
  2. AbBA \to b B
  3. BaAB \to a A
  4. BbBB \to b B
  5. BεB \to \varepsilon

7. (20分)

设计有限自动机,米兰机和摩尔机,输入是 a, b 组成的串,要求 能够识别字符串 anba^n b(n>0n>0)。

答案 / 解析

有限自动机

有限自动机

有限自动机

当前状态输入 a输入 bq0q1qdeadq1q1q2q2qdeadqdeadqdeadqdeadqdead\begin{array}{|c|c|c|} \hline \text{当前状态} & \text{输入 a} & \text{输入 b} \\ \hline \rightarrow q_0 & q_1 & q_{\text{dead}} \\ \hline q_1 & q_1 & q_2 \\ \hline *q_2 & q_{\text{dead}} & q_{\text{dead}} \\ \hline q_{\text{dead}} & q_{\text{dead}} & q_{\text{dead}} \\ \hline \end{array}

米兰机

米兰机

米兰机

当前状态输入 a输入 bq0q1/0qdead/0q1q1/0q2/1q2qdead/0qdead/0qdeadqdead/0qdead/0\begin{array}{|c|c|c|} \hline \text{当前状态} & \text{输入 a} & \text{输入 b} \\ \hline \rightarrow q_0 & q_1 / 0 & q_{\text{dead}} / 0 \\ \hline q_1 & q_1 / 0 & q_2 / 1 \\ \hline q_2 & q_{\text{dead}} / 0 & q_{\text{dead}} / 0 \\ \hline q_{\text{dead}} & q_{\text{dead}} / 0 & q_{\text{dead}} / 0 \\ \hline \end{array}

摩尔机

摩尔机

摩尔机

当前状态输入 a输入 b输出 g(q)q0q1qdead0q1q1q20q2qdeadqdead1qdeadqdeadqdead0\begin{array}{|c|c|c|c|} \hline \text{当前状态} & \text{输入 a} & \text{输入 b} & \text{输出 g(q)} \\ \hline \rightarrow q_0 & q_1 & q_{\text{dead}} & 0 \\ \hline q_1 & q_1 & q_2 & 0 \\ \hline q_2 & q_{\text{dead}} & q_{\text{dead}} & 1 \\ \hline q_{\text{dead}} & q_{\text{dead}} & q_{\text{dead}} & 0 \\ \hline \end{array}