有限自动机 | G/FA/PDA/TM 的概念汇总以及互相转换
对象定义文法GΣVSPGΣVSP有限自动机FAQΣδq0FFAQΣδq0F下推自动机PDAQΣΓδq0Z0FPDAQΣΓδq0Z0F图灵机TMQΣq0qαδTMQΣq0qαδ。
文章目录
前言:
- 感觉习题册里的题都没有涉及几个概念之间的转换;
- 遂拿出教材里的例题。
0 概念汇总
定义的汇总
| 对象 | 定义 |
|---|---|
| 文法 | G = ( Σ , V , S , P ) G=(\Sigma, V, S, P) G=(Σ,V,S,P) |
| 有限自动机 | F A = ( Q , Σ , δ , q 0 , F ) FA=(Q, \Sigma, δ, q_0, F) FA=(Q,Σ,δ,q0,F) |
| 下推自动机 | P D A = ( Q , Σ , Γ , δ , q 0 , Z 0 , F ) PDA=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F) PDA=(Q,Σ,Γ,δ,q0,Z0,F) |
| 图灵机 | T M = ( Q , Σ , q 0 , q α , δ ) TM=(Q,\Sigma,q_0,q_{\alpha},\delta) TM=(Q,Σ,q0,qα,δ) |
规则的汇总
| 对象 | 规则的定义 |
|---|---|
| 有限自动机 | δ ( q , x ) = q ′ \delta(q,x)=q' δ(q,x)=q′ |
| 下推自动机 | < q , x , A , q ′ , A 1 A 2 ⋯ A i > <q,x,A,q',A_1A_2 \cdots A_i> <q,x,A,q′,A1A2⋯Ai> |
| 图灵机 | < q , x , q ′ , x ′ , { L , R , N } > <q,x,q',x',\{L,R,N\}> <q,x,q′,x′,{L,R,N}> 或者 δ ( q , x ) = ( q ′ , x ′ , { L , R , N } ) \delta(q,x)=(q',x',\{L,R,N\}) δ(q,x)=(q′,x′,{L,R,N}) |
格局的汇总
格局的定义:
| 对象 | 格局的定义 |
|---|---|
| 有限自动机 | q w qw qw,其中 w w w 是剩余未被扫描的串 |
| 下推自动机 | ( q , w , σ ) (q,w,\sigma) (q,w,σ),其中 w w w 是剩余未被扫描的串, σ \sigma σ 是当前栈内的符号 |
| 图灵机 | w 1 q w 2 w_1qw_2 w1qw2,其中 w 1 w_1 w1 是读写头左边的串, w 2 w_2 w2 是读写头右边的串 |
格局的转换:
| 对象 | 格局的转换 |
|---|---|
| 有限自动机 | δ ( q , x ) = q ′ \delta(q,x)=q' δ(q,x)=q′ 将导致: q x w ⇒ q ′ w qxw \Rightarrow q'w qxw⇒q′w |
| 下推自动机 | < q , x , A , q ′ , A 1 A 2 ⋯ A i > <q,x,A,q',A_1A_2 \cdots A_i> <q,x,A,q′,A1A2⋯Ai> 将导致: ( q , x w , A σ ) ⇒ ( q ′ , w , A 1 A 2 ⋯ A i σ ) (q,xw,A\sigma) \Rightarrow (q',w,A_1A_2 \cdots A_i\sigma) (q,xw,Aσ)⇒(q′,w,A1A2⋯Aiσ) |
| 图灵机 | < q , x , q ′ , x ′ , L > <q,x,q',x',L> <q,x,q′,x′,L> 将导致: s 1 y q x s 2 ⇒ s 1 q ′ y x ′ s 2 s_1yqxs_2 \Rightarrow s_1q'yx's_2 s1yqxs2⇒s1q′yx′s2 |
1 文法与有限自动机之间的转换
DFA 转换为 RLG
例: 已知形式语言 L = { { 0 , 1 } 1 ∗ 0 } ∗ L=\{\{0,1\}1^*0\}^* L={{0,1}1∗0}∗,请构造右线性文法接收该语言。
思路:
- Step1:构造 DFA 接收 FSL,由此得到 δ \delta δ 转换函数。
- Step2:把 δ \delta δ 转换函数转换为文法 G G G 的产生式。
解答:
- 分析:该语言对应的正则表达式为 ( ( 0 + 1 ) 1 ∗ 0 ) ∗ ((0+1)1^*0)^* ((0+1)1∗0)∗ 。
- 由此构造 DFA 接收该语言:

- 从而得到 δ \delta δ 转换函数,将其转换为文法 G G G 的产生式:
| DFA 的状态转换函数 | RLG 的产生式 |
|---|---|
| δ ( q 0 , 0 ) = q 1 \delta(q_0,0)=q_1 δ(q0,0)=q1 | q 0 → 0 q 1 q_0 \rightarrow 0q_1 q0→0q1 |
| δ ( q 0 , 1 ) = q 1 \delta(q_0,1)=q_1 δ(q0,1)=q1 | q 0 → 1 q 1 q_0 \rightarrow 1q_1 q0→1q1 |
| δ ( q 1 , 1 ) = q 1 \delta(q_1,1)=q_1 δ(q1,1)=q1 | q 1 → 1 q 1 q_1 \rightarrow 1q_1 q1→1q1 |
| δ ( q 1 , 0 ) = q 0 ∈ F \delta(q_1,0)=q_0 \in F δ(q1,0)=q0∈F | q 1 → 0 q 0 ∣ 0 q_1 \rightarrow 0q_0 \mid 0 q1→0q0∣0 |
| δ ( q 0 , ε ) = q 0 ∈ F \delta(q_0,\varepsilon)=q_0 \in F δ(q0,ε)=q0∈F | q 0 → ε q_0 \rightarrow \varepsilon q0→ε |
特别注意:状态函数 δ ( q , x ) = q ′ , q ′ ∈ F \delta(q,x)=q',q' \in F δ(q,x)=q′,q′∈F 对应的产生式是 q → x q ′ q \rightarrow xq' q→xq′ 和 q → x q \rightarrow x q→x 。
- 整理得到文法 G G G 的产生式如下:
- q 0 → 0 q 1 ∣ 1 q 1 ∣ ε q_0 \rightarrow 0q_1 \mid 1q_1 \mid \varepsilon q0→0q1∣1q1∣ε
- q 1 → 1 q 1 ∣ 0 q 0 ∣ 0 q_1 \rightarrow 1q_1 \mid 0q_0 \mid 0 q1→1q1∣0q0∣0
RLG 转换为 NFA
例: 已知形式语言 L = { a b , a a } L=\{ab,aa\} L={ab,aa},请构造 NFA 接收该语言。
思路:
- Step1:构造 RLG 接收该语言,由此得到文法 G G G 的产生式。
- Step2:把文法 G G G 的产生式转换为 NFA 的 δ \delta δ 转换函数。
- Step3:根据 NFA 的 δ \delta δ 转换函数绘制状态图。
解答:
- 构造 RLG 如下:
- S → a A S \rightarrow aA S→aA
- A → a ∣ b A \rightarrow a \mid b A→a∣b
- 将上述产生式转换为 NFA 的 δ \delta δ 转换函数:
| RLG 的产生式 | NFA 的状态转换函数 |
|---|---|
| S → a A S \rightarrow aA S→aA | δ ( S , a ) = A \delta(S,a)=A δ(S,a)=A |
| A → a A \rightarrow a A→a | δ ( A , a ) = q ∈ F \delta(A,a)=q \in F δ(A,a)=q∈F |
| A → b A \rightarrow b A→b | δ ( A , b ) = q ∈ F \delta(A,b)=q \in F δ(A,b)=q∈F |
- 根据 NFA 的 δ \delta δ 转换函数绘制状态图:

2 有限自动机之间的转换
NFA 转换为 DFA
例 1: 构造 DFA 接收 { 0 , 1 } \{0,1\} {0,1} 上的语言,该语言中每个字符串在被当成二进制数时,能够被 2 整除。
思路:
- Step1:构造 NFA 接收该语言。
- Step2:将 NFA 转换为 DFA 。
解答:
- 分析:该语言对应的正则表达式为 ( 0 + 1 ) ∗ 0 (0+1)^*0 (0+1)∗0 。
- 由此构造 NFA 接收该语言:

- 通过表格法,将 NFA 转换为 DFA:
| 状态集合 P | 0 | 1 |
|---|---|---|
| { q 0 } \{q_0\} {q0} | { q 0 , q 1 } \{q_0,q_1\} {q0,q1} | { q 0 } \{q_0\} {q0} |
| { q 0 , q 1 } , q 1 ∈ F \{q_0,q_1\}, q_1 \in F {q0,q1},q1∈F | { q 0 , q 1 } \{q_0,q_1\} {q0,q1} | { q 0 } \{q_0\} {q0} |
注意:DFA 的开始状态 q 0 ′ q_0' q0′ 等于 NFA 的开始状态集合 Q 0 Q_0 Q0 。
- 根据表格绘制 DFA 的状态图:

例 2: 构造 DFA 接收语言
L = { w ∣ w ∈ { a , b , c } + , ∣ w ∣ > 1 , w 中最后的字母与第一个字母相同 } L=\{w\mid w\in \{a,b,c\}^+,|w|>1,w\ 中最后的字母与第一个字母相同\} L={w∣w∈{a,b,c}+,∣w∣>1,w 中最后的字母与第一个字母相同}
思路:
- Step1:构造 NFA 接收该语言。
- Step2:将 NFA 转换为 DFA 。
解答:
- 分析:该语言对应的正则表达式为 a R ∗ a + b R ∗ b + c R ∗ c aR^*a+bR^*b+cR^*c aR∗a+bR∗b+cR∗c,其中 R = ( a + b + c ) R=(a+b+c) R=(a+b+c) 。
- 由此构造 NFA 接收该语言:

- 通过表格法,将 NFA 转换为 DFA:
| 状态集合 P | a | b | c |
|---|---|---|---|
| { q 0 } \{q_0\} {q0} | { q 1 } \{q_1\} {q1} | { q 2 } \{q_2\} {q2} | { q 3 } \{q_3\} {q3} |
| { q 1 } \{q_1\} {q1} | { q 1 , q 4 } \{q_1,q_4\} {q1,q4} | { q 1 } \{q_1\} {q1} | { q 1 } \{q_1\} {q1} |
| { q 2 } \{q_2\} {q2} | { q 2 } \{q_2\} {q2} | { q 2 , q 4 } \{q_2,q_4\} {q2,q4} | { q 2 } \{q_2\} {q2} |
| { q 3 } \{q_3\} {q3} | { q 3 } \{q_3\} {q3} | { q 3 } \{q_3\} {q3} | { q 3 , q 4 } \{q_3,q_4\} {q3,q4} |
| { q 1 , q 4 } \{q_1,q_4\} {q1,q4} | { q 1 , q 4 } \{q_1,q_4\} {q1,q4} | { q 1 } \{q_1\} {q1} | { q 1 } \{q_1\} {q1} |
| { q 2 , q 4 } \{q_2,q_4\} {q2,q4} | { q 2 } \{q_2\} {q2} | { q 2 , q 4 } \{q_2,q_4\} {q2,q4} | { q 2 } \{q_2\} {q2} |
| { q 3 , q 4 } \{q_3,q_4\} {q3,q4} | { q 3 } \{q_3\} {q3} | { q 3 } \{q_3\} {q3} | { q 3 , q 4 } \{q_3,q_4\} {q3,q4} |
- 根据表格绘制 DFA 的状态图:

ε-NFA 转换为 NFA
转换方法如下:
- 计算 NFA 的状态转换函数 δ ′ \delta' δ′: δ ′ ( q , x ) = δ ∗ ( { q } , x ) \delta'(q,x)=\delta^*(\{q\},x) δ′(q,x)=δ∗({q},x)
- 确定 NFA 的接收状态 F ′ F' F′:
- 若 F ∩ ε -CLOSURE ( q 0 ) ≠ ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) \ne \phi F∩ε-CLOSURE(q0)=ϕ,则 F ′ = F ∩ { q 0 } F'=F \cap \{q_0\} F′=F∩{q0}。
- 若 F ∩ ε -CLOSURE ( q 0 ) = ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) = \phi F∩ε-CLOSURE(q0)=ϕ,则 F ′ = F F'=F F′=F。
例: 请将下述 ε-NFA 转换为 NFA 。

解答:
- 计算状态转换函数:
- δ ′ ( q 0 , 0 ) = δ ∗ ( { q 0 } , 0 ) = { q 0 , q 1 , q 2 } \delta'(q_0,0)=\delta^*(\{q_0\},0)=\{q_0,q_1,q_2\} δ′(q0,0)=δ∗({q0},0)={q0,q1,q2}
- δ ′ ( q 0 , 1 ) = δ ∗ ( { q 0 } , 1 ) = { q 1 , q 2 } \delta'(q_0,1)=\delta^*(\{q_0\},1)=\{q_1,q_2\} δ′(q0,1)=δ∗({q0},1)={q1,q2}
- δ ′ ( q 0 , 2 ) = δ ∗ ( { q 0 } , 2 ) = { q 2 } \delta'(q_0,2)=\delta^*(\{q_0\},2)=\{q_2\} δ′(q0,2)=δ∗({q0},2)={q2}
- δ ′ ( q 1 , 0 ) = δ ∗ ( { q 1 } , 0 ) = 无定义 \delta'(q_1,0)=\delta^*(\{q_1\},0)=无定义 δ′(q1,0)=δ∗({q1},0)=无定义
- δ ′ ( q 1 , 1 ) = δ ∗ ( { q 1 } , 1 ) = { q 1 , q 2 } \delta'(q_1,1)=\delta^*(\{q_1\},1)=\{q_1,q_2\} δ′(q1,1)=δ∗({q1},1)={q1,q2}
- δ ′ ( q 1 , 2 ) = δ ∗ ( { q 1 } , 2 ) = { q 2 } \delta'(q_1,2)=\delta^*(\{q_1\},2)=\{q_2\} δ′(q1,2)=δ∗({q1},2)={q2}
- δ ′ ( q 2 , 0 ) = δ ∗ ( { q 2 } , 0 ) = 无定义 \delta'(q_2,0)=\delta^*(\{q_2\},0)=无定义 δ′(q2,0)=δ∗({q2},0)=无定义
- δ ′ ( q 2 , 1 ) = δ ∗ ( { q 2 } , 1 ) = 无定义 \delta'(q_2,1)=\delta^*(\{q_2\},1)=无定义 δ′(q2,1)=δ∗({q2},1)=无定义
- δ ′ ( q 2 , 2 ) = δ ∗ ( { q 2 } , 2 ) = { q 2 } \delta'(q_2,2)=\delta^*(\{q_2\},2)=\{q_2\} δ′(q2,2)=δ∗({q2},2)={q2}
- 确定接收状态:
- F ∩ ε -CLOSURE ( q 0 ) = q 2 ∩ { q 0 , q 1 , q 2 } ≠ ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) = {q_2} \cap \{q_0,q_1,q_2\} \ne \phi F∩ε-CLOSURE(q0)=q2∩{q0,q1,q2}=ϕ,故 F ′ = F ∩ { q 0 } = { q 0 , q 2 } F'=F \cap \{q_0\}=\{q_0,q_2\} F′=F∩{q0}={q0,q2}。
- 根据 NFA 的 δ \delta δ 转换函数绘制状态图:

3 文法与下推自动机之间的转换
CFG 转换为单态 PDA
例: 已知形式语言 L = { a n b n ∣ n ≥ 1 } L=\{a^nb^n \mid n \ge 1\} L={anbn∣n≥1},请构造 PDA 接收该语言。
思路:
- Step1:构造 CFG 接收该语言,由此得到文法 G G G 的产生式。
- Step2:把文法 G G G 的产生式转换为单态 PDA 的规则。
解答:
- 构造 CFG 如下:
- S → a S B ∣ a B S \rightarrow aSB \mid aB S→aSB∣aB
- B → b B \rightarrow b B→b
- 把文法 G G G 的产生式转换为单态 PDA 的规则:
| CFG 的产生式 | 单态 PDA 的规则 |
|---|---|
| S → a S B S \rightarrow aSB S→aSB | < a , S , S B > <a,S,SB> <a,S,SB> |
| S → a B S \rightarrow aB S→aB | < a , S , B > <a,S,B> <a,S,B> |
| B → b B \rightarrow b B→b | < b , B , ε > <b,B,\varepsilon> <b,B,ε> |
Q:为啥教材里讲完 RLG 到单态 PDA 的转换要出这个例题?这也不是右线性文法啊?
单态 PDA 转换为 CFG
例: 请将下述单态 PDA 转换为 CFG 。
解答:
| 单态 PDA 的规则 | CFG 的产生式 |
|---|---|
| < a , Z 0 , A Z 0 > <a, Z_0,AZ_0> <a,Z0,AZ0> | S → a A S S \rightarrow aAS S→aAS |
| < b , Z 0 , B Z 0 > <b, Z_0,BZ_0> <b,Z0,BZ0> | S → b B S S \rightarrow bBS S→bBS |
| < a , A , A A > <a, A, AA> <a,A,AA> | A → a A A A \rightarrow aAA A→aAA |
| < b , B , B B > <b, B, BB> <b,B,BB> | B → b B B B \rightarrow bBB B→bBB |
| < a , B , ε > <a, B, \varepsilon> <a,B,ε> | B → a B \rightarrow a B→a |
| < b , A , ε > <b, A, \varepsilon> <b,A,ε> | A → b A \rightarrow b A→b |
| < ε , Z 0 , ε > <\varepsilon, Z_0, \varepsilon> <ε,Z0,ε> | S → ε S \rightarrow \varepsilon S→ε |
- 整理得到文法 G G G 的产生式如下:
- S → a A S ∣ b B S ∣ ε S \rightarrow aAS \mid bBS \mid \varepsilon S→aAS∣bBS∣ε
- A → a A A ∣ b A \rightarrow aAA \mid b A→aAA∣b
- B → b B B ∣ a B \rightarrow bBB \mid a B→bBB∣a
4 有限自动机与下推自动机之间的转换
NFA 转换为单态 PDA
转换方法如下:
| NFA 的状态转换函数 | 单态 PDA 的规则 |
|---|---|
| δ ( q , x ) = { q 1 , q 2 , ⋯ , q n } \delta(q,x)=\{q_1,q_2,\cdots,q_n\} δ(q,x)={q1,q2,⋯,qn} | < x , q , q 1 > , < x , q , q 2 > , ⋯ , < x , q , q n > <x,q,q_1>,<x,q,q_2>,\cdots,<x,q,q_n> <x,q,q1>,<x,q,q2>,⋯,<x,q,qn> |
说明:没有例题。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)