本系列文章
文章目录:有穷自动机
1. 确定的有穷自动机 (DFA)
1. 形式化定义
确定的有穷自动机 (Deterministic Finite Automata):DFA是一个五元组,如: M = ( Q , Σ , δ , q 0 , F ) M=(Q,\; \Sigma,\; \delta,\;q_0,\; F) M=(Q,Σ,δ,q0,F) ,其中,
- Q Q Q 是有限的状态集,包含DFA中所有的状态;
- Σ \Sigma Σ 是有限的输入字符集,也就是DFA的字母表;
- q 0 q_0 q0 是初始状态,并且 q 0 ∈ Q q_0\in Q q0∈Q;
- F F F 是终解状态的集合,并且 F ∈ Q F \in Q F∈Q;
- δ \delta δ 是状态转移函数,它是一个映射: Q × Σ → Q Q \times \Sigma \to Q Q×Σ→Q
δ \delta δ 要对 Q Q Q 中所有的状态和 Σ \Sigma Σ 中所有的状态的组合都要有定义,也就是笛卡尔积是一个单射
例:以自动门为例,使用 0 0 0 表示关门信号, 1 1 1 表示开门信号, p p p 表示关门状态, q q q 表示开门状态,则DFA如下:
-
状态集: { p , q } \{p,\; q\} { p,q}
-
输入字符集: { 0 , 1 } \{0,\;1\} { 0,1}
-
初始状态: p p p
-
终解状态: p p p
-
状态转移函数: δ \delta δ
δ ( p , 0 ) = p δ ( p , 1 ) = q δ ( q , 1 ) = q δ ( q , 0 ) = p \delta(p,\; 0)=p\\ \delta(p,\; 1)=q\\ \delta(q,\; 1)=q\\ \delta(q,\; 0)=p δ(p,0)=pδ(p,1)=qδ(q,1)=qδ(q,0)=p
故该DFA的定义为: { { p , q } , { 0 , 1 } , δ , p , { p } } \{ \{p,\; q\},\;\{0,\;1\},\;\delta,\;\;p,\;\{p\}\} { { p,q},{ 0,1},δ,p,{ p}}
用图表示: 单线圈表示普通状态,双线圈表示终解状态,弧表示状态转移函数
用表格表示: 用 → \to → 标识出初始状态,用 ∗ * ∗ 标识出终解状态
0 | 1 | |
---|---|---|
→ ∗ p \to*p →∗p | p p p | q q q |
q \qquad q q | p p p | q q q |
DFA的目的是区分字符串,于是,按照如上例子构造的DFA就把字符串分成了两类:
L 1 = { w ∈ { 0 , 1 } ∗ ∣ w e n d w i t h 0 } ∪ { ε } L 2 = { w ∈ { 0 , 1 } ∗ ∣ w e n d w i t h 1 } L_1=\{ w\in\{0,1\}^* \;|\; w \; end \; with \; 0 \}\cup \{\,\varepsilon\,\} \\ L_2=\{ w\in\{0,1\}^* \;|\; w \; end \; with \; 1 \} L1={ w∈{ 0,1}∗∣wendwith0}∪{ ε}L2={ w∈{ 0,1}∗∣wendwith1}
而 L 1 L_1 L1 就是该DFA所接受的字符串集合,就能够判断任意的字符串 w w