第三章 课后作业参考答案#
6. 令 A A A 、B B B 和 C C C 是任意正规式,证明以下关系成立。#
(1) A ∣ A = A A \mid A = A A ∣ A = A
(2) ( A ∗ ) ∗ = A ∗ (A^*)^* = A^* ( A ∗ ) ∗ = A ∗
(3) A ∗ = ε ∣ A A ∗ A^* = \varepsilon \mid A A^* A ∗ = ε ∣ A A ∗
(4) ( A B ) ∗ A = A ( B A ) ∗ (AB)^*A = A(BA)^* ( A B ) ∗ A = A ( B A ) ∗
(5) A = b ∣ a A A = b \mid aA A = b ∣ a A 当且仅当 A = a ∗ b A = a^*b A = a ∗ b
解答 :
(1) 证明 A ∣ A = A A \mid A = A A ∣ A = A :
根据正规式并集运算对应的集合定义,有:
L ( A ∣ A ) = L ( A ) ∪ L ( A ) = L ( A ) L(A \mid A) = L(A) \cup L(A) = L(A) L ( A ∣ A ) = L ( A ) ∪ L ( A ) = L ( A )
故 A ∣ A = A A \mid A = A A ∣ A = A 成立。
(2) 证明 ( A ∗ ) ∗ = A ∗ (A^*)^* = A^* ( A ∗ ) ∗ = A ∗ :
由克林闭包运算定义,对于任意集合 S S S ,其闭包为 S ∗ = ⋃ i = 0 ∞ S i S^* = \bigcup_{i=0}^{\infty} S^i S ∗ = ⋃ i = 0 ∞ S i 。
则有:
L ( A ∗ ) = ⋃ i = 0 ∞ L ( A ) i L(A^*) = \bigcup_{i=0}^{\infty} L(A)^i L ( A ∗ ) = ⋃ i = 0 ∞ L ( A ) i
L ( ( A ∗ ) ∗ ) = ⋃ j = 0 ∞ L ( A ∗ ) j = ⋃ j = 0 ∞ ( ⋃ i = 0 ∞ L ( A ) i ) j L((A^*)^*) = \bigcup_{j=0}^{\infty} L(A^*)^j = \bigcup_{j=0}^{\infty} \left( \bigcup_{i=0}^{\infty} L(A)^i \right)^j L (( A ∗ ) ∗ ) = ⋃ j = 0 ∞ L ( A ∗ ) j = ⋃ j = 0 ∞ ( ⋃ i = 0 ∞ L ( A ) i ) j
因为上式中右侧项表示对 L ( A ) L(A) L ( A ) 的任意有限次、无限次连接与并集,而这与 L ( A ∗ ) L(A^*) L ( A ∗ ) 中所包含的元素集合范围完全一致(均由 ε \varepsilon ε 以及由 L ( A ) L(A) L ( A ) 中元素连接而成的有限长字串组成),因此两集合相等:
L ( ( A ∗ ) ∗ ) = L ( A ∗ ) L((A^*)^*) = L(A^*) L (( A ∗ ) ∗ ) = L ( A ∗ )
故 ( A ∗ ) ∗ = A ∗ (A^*)^* = A^* ( A ∗ ) ∗ = A ∗ 成立。
(3) 证明 A ∗ = ε ∣ A A ∗ A^* = \varepsilon \mid A A^* A ∗ = ε ∣ A A ∗ :
展开克林闭包 L ( A ∗ ) L(A^*) L ( A ∗ ) :
L ( A ∗ ) = { ε } ∪ L ( A ) ∪ L ( A ) 2 ∪ L ( A ) 3 ∪ … = { ε } ∪ L ( A ) ( { ε } ∪ L ( A ) ∪ L ( A ) 2 ∪ … ) = { ε } ∪ L ( A ) L ( A ∗ ) = L ( ε ∣ A A ∗ ) \begin{aligned}
L(A^*) &= \{\varepsilon\} \cup L(A) \cup L(A)^2 \cup L(A)^3 \cup \dots \\
&= \{\varepsilon\} \cup L(A) \left( \{\varepsilon\} \cup L(A) \cup L(A)^2 \cup \dots \right) \\
&= \{\varepsilon\} \cup L(A) L(A^*) \\
&= L(\varepsilon \mid A A^*)
\end{aligned} L ( A ∗ ) = { ε } ∪ L ( A ) ∪ L ( A ) 2 ∪ L ( A ) 3 ∪ … = { ε } ∪ L ( A ) ( { ε } ∪ L ( A ) ∪ L ( A ) 2 ∪ … ) = { ε } ∪ L ( A ) L ( A ∗ ) = L ( ε ∣ A A ∗ )
故 A ∗ = ε ∣ A A ∗ A^* = \varepsilon \mid A A^* A ∗ = ε ∣ A A ∗ 成立。
(4) 证明 ( A B ) ∗ A = A ( B A ) ∗ (AB)^*A = A(BA)^* ( A B ) ∗ A = A ( B A ) ∗ :
展开左侧正规式表示的集合:
L ( ( A B ) ∗ A ) = ( ⋃ i = 0 ∞ ( L ( A ) L ( B ) ) i ) L ( A ) = { ε , A B , A B A B , A B A B A B , … } L ( A ) = { A , A B A , A B A B A , A B A B A B A , … } \begin{aligned}
L((AB)^*A) &= \left( \bigcup_{i=0}^{\infty} (L(A)L(B))^i \right) L(A) \\
&= \{ \varepsilon, AB, ABAB, ABABAB, \dots \} L(A) \\
&= \{ A, ABA, ABABA, ABABABA, \dots \}
\end{aligned} L (( A B ) ∗ A ) = ( i = 0 ⋃ ∞ ( L ( A ) L ( B ) ) i ) L ( A ) = { ε , A B , A B A B , A B A B A B , … } L ( A ) = { A , A B A , A B A B A , A B A B A B A , … }
展开右侧正规式表示的集合:
L ( A ( B A ) ∗ ) = L ( A ) ( ⋃ i = 0 ∞ ( L ( B ) L ( A ) ) i ) = L ( A ) { ε , B A , B A B A , B A B A B A , … } = { A , A B A , A B A B A , A B A B A B A , … } \begin{aligned}
L(A(BA)^*) &= L(A) \left( \bigcup_{i=0}^{\infty} (L(B)L(A))^i \right) \\
&= L(A) \{ \varepsilon, BA, BABA, BABABA, \dots \} \\
&= \{ A, ABA, ABABA, ABABABA, \dots \}
\end{aligned} L ( A ( B A ) ∗ ) = L ( A ) ( i = 0 ⋃ ∞ ( L ( B ) L ( A ) ) i ) = L ( A ) { ε , B A , B A B A , B A B A B A , … } = { A , A B A , A B A B A , A B A B A B A , … }
显然两边集合完全一致,故 ( A B ) ∗ A = A ( B A ) ∗ (AB)^*A = A(BA)^* ( A B ) ∗ A = A ( B A ) ∗ 成立。
(5) 证明 A = b ∣ a A A = b \mid aA A = b ∣ a A 当且仅当 A = a ∗ b A = a^*b A = a ∗ b :
充分性 (若 A = a ∗ b A = a^*b A = a ∗ b ,则满足等式):
将 A = a ∗ b A = a^*b A = a ∗ b 带入右式中:
b ∣ a A = b ∣ a ( a ∗ b ) = ( ε ∣ a a ∗ ) b \begin{aligned}
b \mid aA &= b \mid a(a^*b) \\
&= (\varepsilon \mid a a^*) b
\end{aligned} b ∣ a A = b ∣ a ( a ∗ b ) = ( ε ∣ a a ∗ ) b
由题(3)已证结论知 ε ∣ a a ∗ = a ∗ \varepsilon \mid a a^* = a^* ε ∣ a a ∗ = a ∗ ,带入后有:
( ε ∣ a a ∗ ) b = a ∗ b = A (\varepsilon \mid a a^*) b = a^*b = A ( ε ∣ a a ∗ ) b = a ∗ b = A
等式成立。
必要性 (若 A = b ∣ a A A = b \mid aA A = b ∣ a A ,在 ε ∉ L ( a ) \varepsilon \notin L(a) ε ∈ / L ( a ) 的前提下其唯一解为 a ∗ b a^*b a ∗ b ):
根据 Arden 引理(Arden’s Lemma),对于集合方程 X = A X ∪ B X = AX \cup B X = A X ∪ B ,如果空字 ε ∉ L ( A ) \varepsilon \notin L(A) ε ∈ / L ( A ) ,则该方程有唯一的代数解 X = A ∗ B X = A^*B X = A ∗ B 。因此当 ε ∉ L ( a ) \varepsilon \notin L(a) ε ∈ / L ( a ) 时,A = a ∗ b A = a^*b A = a ∗ b 是 A = b ∣ a A A = b \mid aA A = b ∣ a A 的唯一解。
7. 构造下列正规式相应的 DFA。#
(1) 1 ( 0 ∣ 1 ) ∗ 101 1(0 \mid 1)^*101 1 ( 0 ∣ 1 ) ∗ 101
(2) 0 ∗ 10 ∗ 10 ∗ 10 ∗ 0^*10^*10^*10^* 0 ∗ 1 0 ∗ 1 0 ∗ 1 0 ∗ (原书标注为第3问)
解答 :
(1) 对于正规式 1 ( 0 ∣ 1 ) ∗ 101 1(0 \mid 1)^*101 1 ( 0 ∣ 1 ) ∗ 101 #
(该 DFA 的子集构造法详细步骤可见课本大题-答案 )
状态 输入 0 0 0 输入 1 1 1 是否接受 A A A (初态)A A A B B B 否 B B B C C C B B B 否 C C C A A A D D D 否 D D D (终态)C C C B B B 是
stateDiagram-v2
[*] --> A
A --> A : 0
A --> B : 1
B --> B : 1
B --> C : 0
C --> A : 0
C --> D : 1
D --> B : 1
D --> C : 0
classDef accept fill : #f9f,stroke :#333, stroke-width : 2px;
class D accept;
(2) 对于正规式 0 ∗ 10 ∗ 10 ∗ 10 ∗ 0^*10^*10^*10^* 0 ∗ 1 0 ∗ 1 0 ∗ 1 0 ∗ #
该语言的特征是:包含恰好三个 字符 1 1 1 ,且在这三个 1 1 1 之间和前后允许填充任意多个 0 0 0 。
DFA 状态定义 :
S 0 S_0 S 0 :已匹配 0 0 0 个 1 1 1 (初态)。
S 1 S_1 S 1 :已匹配 1 1 1 个 1 1 1 。
S 2 S_2 S 2 :已匹配 2 2 2 个 1 1 1 。
S 3 S_3 S 3 :已匹配 3 3 3 个 1 1 1 (终态/接受状态)。
S 4 S_4 S 4 :已匹配多于 3 3 3 个 1 1 1 (死状态,任何输入均无法再接受)。
状态转移关系 :
δ ( S 0 , 0 ) = S 0 \delta(S_0, 0) = S_0 δ ( S 0 , 0 ) = S 0 ,δ ( S 0 , 1 ) = S 1 \delta(S_0, 1) = S_1 δ ( S 0 , 1 ) = S 1
δ ( S 1 , 0 ) = S 1 \delta(S_1, 0) = S_1 δ ( S 1 , 0 ) = S 1 ,δ ( S 1 , 1 ) = S 2 \delta(S_1, 1) = S_2 δ ( S 1 , 1 ) = S 2
δ ( S 2 , 0 ) = S 2 \delta(S_2, 0) = S_2 δ ( S 2 , 0 ) = S 2 ,δ ( S 2 , 1 ) = S 3 \delta(S_2, 1) = S_3 δ ( S 2 , 1 ) = S 3
δ ( S 3 , 0 ) = S 3 \delta(S_3, 0) = S_3 δ ( S 3 , 0 ) = S 3 ,δ ( S 3 , 1 ) = S 4 \delta(S_3, 1) = S_4 δ ( S 3 , 1 ) = S 4
δ ( S 4 , 0 ) = S 4 \delta(S_4, 0) = S_4 δ ( S 4 , 0 ) = S 4 ,δ ( S 4 , 1 ) = S 4 \delta(S_4, 1) = S_4 δ ( S 4 , 1 ) = S 4
stateDiagram-v2
[*] --> S0
S0 --> S0 : 0
S0 --> S1 : 1
S1 --> S1 : 0
S1 --> S2 : 1
S2 --> S2 : 0
S2 --> S3 : 1
S3 --> S3 : 0
S3 --> S4 : 1
S4 --> S4 : 0, 1
classDef accept fill : #f9f,stroke :#333, stroke-width : 2px;
class S3 accept;
8. 给出下面正规表达式。#
(1) 以 01 结尾的二进制数串。
(2) 能被 5 5 5 整除的十进制整数。
(3) 包含奇数个 1 1 1 或奇数个 0 0 0 的二进制数串。
解答 :
(1) 以 01 结尾的二进制数串 :
( 0 ∣ 1 ) ∗ 01 (0 \mid 1)^*01 ( 0 ∣ 1 ) ∗ 01
(2) 能被 5 5 5 整除的十进制整数 :
考虑到不应有前导零,可以独立表示整数 0 0 0 ,首位非零的其他以 0 0 0 或 5 5 5 结尾的数字串:
0 ∣ ( 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 ) ( 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 ) ∗ ( 0 ∣ 5 ) 0 \mid (1 \mid 2 \mid 3 \mid 4 \mid 5 \mid 6 \mid 7 \mid 8 \mid 9)(0 \mid 1 \mid 2 \mid 3 \mid 4 \mid 5 \mid 6 \mid 7 \mid 8 \mid 9)^*(0 \mid 5) 0 ∣ ( 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 ) ( 0 ∣ 1 ∣ 2 ∣ 3 ∣ 4 ∣ 5 ∣ 6 ∣ 7 ∣ 8 ∣ 9 ) ∗ ( 0 ∣ 5 )
(3) 包含奇数个 1 1 1 或奇数个 0 0 0 的二进制数串 :
奇数个 1 1 1 的表示式(0 0 0 任意):( 0 ∣ 10 ∗ 1 ) ∗ 10 ∗ (0 \mid 10^*1)^*10^* ( 0 ∣ 1 0 ∗ 1 ) ∗ 1 0 ∗
奇数个 0 0 0 的表示式(1 1 1 任意):( 1 ∣ 01 ∗ 0 ) ∗ 01 ∗ (1 \mid 01^*0)^*01^* ( 1 ∣ 0 1 ∗ 0 ) ∗ 0 1 ∗
求两者并集:
( 0 ∣ 10 ∗ 1 ) ∗ 10 ∗ ∣ ( 1 ∣ 01 ∗ 0 ) ∗ 01 ∗ (0 \mid 10^*1)^*10^* \mid (1 \mid 01^*0)^*01^* ( 0 ∣ 1 0 ∗ 1 ) ∗ 1 0 ∗ ∣ ( 1 ∣ 0 1 ∗ 0 ) ∗ 0 1 ∗
9. 对下面情况给出 DFA 及正规表达式。#
(1) { 0 , 1 } \{0,1\} { 0 , 1 } 上包含子串 010 的所有串。
解答 :
状态 输入 0 0 0 输入 1 1 1 是否接受 A A A (初态)B B B A A A 否 B B B B B B C C C 否 C C C D D D A A A 否 D D D (终态)D D D D D D 是
stateDiagram-v2
[*] --> A
A --> A : 1
A --> B : 0
B --> B : 0
B --> C : 1
C --> A : 1
C --> D : 0
D --> D : 0, 1
classDef accept fill : #f9f,stroke :#333, stroke-width : 2px;
class D accept;
12. 将下面的有限自动机分别确定化和最小化。#
(a) 需确定化的有限自动机。
(b) 需最小化的有限自动机。
解答 :
(a) 有限自动机确定化与最少化过程#
原 NFA 转移表(初态与接受状态均为 0 0 0 ):
δ ( 0 , a ) = { 0 , 1 } \delta(0, a) = \{0, 1\} δ ( 0 , a ) = { 0 , 1 }
δ ( 0 , b ) = { 1 } \delta(0, b) = \{1\} δ ( 0 , b ) = { 1 }
δ ( 1 , a ) = { 0 } \delta(1, a) = \{0\} δ ( 1 , a ) = { 0 }
δ ( 1 , b ) = ∅ \delta(1, b) = \emptyset δ ( 1 , b ) = ∅
子集确定化步骤 :
初态集 :A = [ 0 ] A = [0] A = [ 0 ] (由于包含原终态 0 0 0 ,为接受状态)
求转移关系 :
move ( A , a ) = δ ( 0 , a ) = [ 0 , 1 ] = B \text{move}(A, a) = \delta(0, a) = [0, 1] = B move ( A , a ) = δ ( 0 , a ) = [ 0 , 1 ] = B (接受状态)
move ( A , b ) = δ ( 0 , b ) = [ 1 ] = C \text{move}(A, b) = \delta(0, b) = [1] = C move ( A , b ) = δ ( 0 , b ) = [ 1 ] = C (非接受状态)
对子集 B = [ 0 , 1 ] B = [0, 1] B = [ 0 , 1 ] 计算 :
move ( B , a ) = δ ( 0 , a ) ∪ δ ( 1 , a ) = { 0 , 1 } ∪ { 0 } = [ 0 , 1 ] = B \text{move}(B, a) = \delta(0, a) \cup \delta(1, a) = \{0, 1\} \cup \{0\} = [0, 1] = B move ( B , a ) = δ ( 0 , a ) ∪ δ ( 1 , a ) = { 0 , 1 } ∪ { 0 } = [ 0 , 1 ] = B
move ( B , b ) = δ ( 0 , b ) ∪ δ ( 1 , b ) = { 1 } ∪ ∅ = [ 1 ] = C \text{move}(B, b) = \delta(0, b) \cup \delta(1, b) = \{1\} \cup \emptyset = [1] = C move ( B , b ) = δ ( 0 , b ) ∪ δ ( 1 , b ) = { 1 } ∪ ∅ = [ 1 ] = C
对子集 C = [ 1 ] C = [1] C = [ 1 ] 计算 :
move ( C , a ) = δ ( 1 , a ) = [ 0 ] = A \text{move}(C, a) = \delta(1, a) = [0] = A move ( C , a ) = δ ( 1 , a ) = [ 0 ] = A
move ( C , b ) = δ ( 1 , b ) = ∅ = Φ \text{move}(C, b) = \delta(1, b) = \emptyset = \Phi move ( C , b ) = δ ( 1 , b ) = ∅ = Φ (死状态/空集)
死状态 Φ \Phi Φ 计算 :
move ( Φ , a ) = Φ \text{move}(\Phi, a) = \Phi move ( Φ , a ) = Φ ,move ( Φ , b ) = Φ \text{move}(\Phi, b) = \Phi move ( Φ , b ) = Φ
确定化后的转移表 :
确定化状态 对应子集 输入 a a a 输入 b b b 是否接受 A A A (初态){ 0 } \{0\} { 0 } B B B C C C 是 B B B { 0 , 1 } \{0, 1\} { 0 , 1 } B B B C C C 是 C C C { 1 } \{1\} { 1 } A A A Φ \Phi Φ 否 Φ \Phi Φ ∅ \emptyset ∅ Φ \Phi Φ Φ \Phi Φ 否
进行状态最小化(最少化) :
初始划分 :
接受状态组:S 1 = { A , B } S_1 = \{A, B\} S 1 = { A , B }
非接受状态组:S 2 = { C , Φ } S_2 = \{C, \Phi\} S 2 = { C , Φ }
检查 S 1 = { A , B } S_1 = \{A, B\} S 1 = { A , B } 的等价性 :
输入 a a a :A → a B ∈ S 1 A \xrightarrow{a} B \in S_1 A a B ∈ S 1 ,B → a B ∈ S 1 B \xrightarrow{a} B \in S_1 B a B ∈ S 1 (同组)
输入 b b b :A → b C ∈ S 2 A \xrightarrow{b} C \in S_2 A b C ∈ S 2 ,B → b C ∈ S 2 B \xrightarrow{b} C \in S_2 B b C ∈ S 2 (同组)
因此 A A A 和 B B B 等价,可以合并,记为状态 A B AB A B (接受状态,也是初态)。
检查 S 2 = { C , Φ } S_2 = \{C, \Phi\} S 2 = { C , Φ } 的等价性 :
输入 a a a :C → a A ∈ S 1 C \xrightarrow{a} A \in S_1 C a A ∈ S 1 ,而 Φ → a Φ ∈ S 2 \Phi \xrightarrow{a} \Phi \in S_2 Φ a Φ ∈ S 2 (分属不同组)
因此 C C C 和 Φ \Phi Φ 不等价,必须拆分。
最终化简状态集 为:{ A B , C , Φ } \{AB, C, \Phi\} { A B , C , Φ } 。
最小化后的 DFA 转移图 :
stateDiagram-v2
[*] --> AB
AB --> AB : a
AB --> C : b
C --> AB : a
C --> phi : b
phi --> phi : a, b
classDef accept fill : #f9f,stroke :#333, stroke-width : 2px;
class AB accept;
(b) 有限自动机最小化过程#
原 DFA 状态集 S = { 0 , 1 , 2 , 3 , 4 , 5 } S = \{0, 1, 2, 3, 4, 5\} S = { 0 , 1 , 2 , 3 , 4 , 5 } ,初态为 0 0 0 ,接受状态集为 F = { 0 , 1 } F = \{0, 1\} F = { 0 , 1 } 。
初始划分为两个子集 :
接受状态集:S 1 = { 0 , 1 } S_1 = \{0, 1\} S 1 = { 0 , 1 }
非接受状态集:S 2 = { 2 , 3 , 4 , 5 } S_2 = \{2, 3, 4, 5\} S 2 = { 2 , 3 , 4 , 5 }
分析划分 S 2 = { 2 , 3 , 4 , 5 } S_2 = \{2, 3, 4, 5\} S 2 = { 2 , 3 , 4 , 5 } :
考察对输入 a a a 的转移:
δ ( 2 , a ) = 1 ∈ S 1 \delta(2, a) = 1 \in S_1 δ ( 2 , a ) = 1 ∈ S 1
δ ( 3 , a ) = 3 ∈ S 2 \delta(3, a) = 3 \in S_2 δ ( 3 , a ) = 3 ∈ S 2
δ ( 4 , a ) = 0 ∈ S 1 \delta(4, a) = 0 \in S_1 δ ( 4 , a ) = 0 ∈ S 1
δ ( 5 , a ) = 5 ∈ S 2 \delta(5, a) = 5 \in S_2 δ ( 5 , a ) = 5 ∈ S 2
由于 { 2 , 4 } \{2, 4\} { 2 , 4 } 转移到 S 1 S_1 S 1 ,而 { 3 , 5 } \{3, 5\} { 3 , 5 } 转移到 S 2 S_2 S 2 ,原集合拆分为:
P 1 = { { 0 , 1 } , { 2 , 4 } , { 3 , 5 } } P_1 = \{ \{0, 1\}, \{2, 4\}, \{3, 5\} \} P 1 = {{ 0 , 1 } , { 2 , 4 } , { 3 , 5 }}
分析 P 1 P_1 P 1 中的各个子集 :
检查子集 { 0 , 1 } \{0, 1\} { 0 , 1 } :
输入 a a a :δ ( 0 , a ) = 1 ∈ { 0 , 1 } \delta(0, a) = 1 \in \{0, 1\} δ ( 0 , a ) = 1 ∈ { 0 , 1 } ,δ ( 1 , a ) = 1 ∈ { 0 , 1 } \delta(1, a) = 1 \in \{0, 1\} δ ( 1 , a ) = 1 ∈ { 0 , 1 }
输入 b b b :δ ( 0 , b ) = 2 ∈ { 2 , 4 } \delta(0, b) = 2 \in \{2, 4\} δ ( 0 , b ) = 2 ∈ { 2 , 4 } ,δ ( 1 , b ) = 4 ∈ { 2 , 4 } \delta(1, b) = 4 \in \{2, 4\} δ ( 1 , b ) = 4 ∈ { 2 , 4 }
因为转移目标落在相同分组内,所以 0 0 0 和 1 1 1 等价。记作状态 A = { 0 , 1 } A = \{0, 1\} A = { 0 , 1 } 。
检查子集 { 2 , 4 } \{2, 4\} { 2 , 4 } :
输入 a a a :δ ( 2 , a ) = 1 ∈ { 0 , 1 } \delta(2, a) = 1 \in \{0, 1\} δ ( 2 , a ) = 1 ∈ { 0 , 1 } ,δ ( 4 , a ) = 0 ∈ { 0 , 1 } \delta(4, a) = 0 \in \{0, 1\} δ ( 4 , a ) = 0 ∈ { 0 , 1 }
输入 b b b :δ ( 2 , b ) = 3 ∈ { 3 , 5 } \delta(2, b) = 3 \in \{3, 5\} δ ( 2 , b ) = 3 ∈ { 3 , 5 } ,δ ( 4 , b ) = 5 ∈ { 3 , 5 } \delta(4, b) = 5 \in \{3, 5\} δ ( 4 , b ) = 5 ∈ { 3 , 5 }
因为转移目标落在相同分组内,所以 2 2 2 和 4 4 4 等价。记作状态 B = { 2 , 4 } B = \{2, 4\} B = { 2 , 4 } 。
检查子集 { 3 , 5 } \{3, 5\} { 3 , 5 } :
输入 a a a :δ ( 3 , a ) = 3 ∈ { 3 , 5 } \delta(3, a) = 3 \in \{3, 5\} δ ( 3 , a ) = 3 ∈ { 3 , 5 } ,δ ( 5 , a ) = 5 ∈ { 3 , 5 } \delta(5, a) = 5 \in \{3, 5\} δ ( 5 , a ) = 5 ∈ { 3 , 5 }
输入 b b b :δ ( 3 , b ) = 2 ∈ { 2 , 4 } \delta(3, b) = 2 \in \{2, 4\} δ ( 3 , b ) = 2 ∈ { 2 , 4 } ,δ ( 5 , b ) = 4 ∈ { 2 , 4 } \delta(5, b) = 4 \in \{2, 4\} δ ( 5 , b ) = 4 ∈ { 2 , 4 }
因为转移目标落在相同分组内,所以 3 3 3 和 5 5 5 等价。记作状态 C = { 3 , 5 } C = \{3, 5\} C = { 3 , 5 } 。
划分收敛 ,最终最小化状态集为 { A , B , C } \{A, B, C\} { A , B , C } :
A A A (接受状态,包含原初态 0 0 0 ,为新初态)
B B B (非接受状态)
C C C (非接受状态)
最小化后的 DFA 转移图 :
stateDiagram-v2
[*] --> A
A --> A : a
A --> B : b
B --> A : a
B --> C : b
C --> C : a
C --> B : b
classDef accept fill : #f9f,stroke :#333, stroke-width : 2px;
class A accept;