有限自动机和右线性文法笔记
有限自动机
有限状态系统和有限自动机
有限状态自动机简称有限自动机,是一种具有离散输入输出系统的数学模型
有限状态系统具有任意有限数目的内部状态
状态转换:每当在某个状态读入一个字符时,便使状态改变为另一个状态,改变后的状态称为后继状态
状态转换的三种情况:(1)转换到自身;(2)转换的后继状态只有一个;(3)转换的后继状态有若干个
根据不同状态转换情况,将有限自动机分为确定的有限自动机DFA(Deterministic Finite Automaton)和不确定的有限自动机NFA(Non-deterministic Finite Automaton)
DFA:每次转换的后继状态都唯一的有限状态自动机
NFA:转换的后继状态不是唯一的有限状态自动机
形式定义确定的有限自动机
一台有限自动机可以由形式定义描述成以下五部分的表:
(1)状态集 Q Q Q 有限状态的集合
(2)输入字母表 T T T 允许的输入符号
(3)动作规则 δ \delta δ 状态转换的规则
(4)起始状态 q 0 q_0 q0
(5)接收状态集 F F F
形式定义确定的有限自动机DFA
确定的有限自动机DFA是一个五元组 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)
其中,
- Q Q Q:有限状态的集合;
- T T T:有限的输入字母表;
- δ \delta δ:转换函数,从 Q Q Q × \times × T T T到 Q Q Q的映射;
- q 0 q_0 q0 :初始状态, q 0 q_0 q0 ∈ \in ∈ Q Q Q
- F F F:终止状态集, F F F ⊆ \subseteq ⊆ Q Q Q
需要注意,以上讨论的转换函数 δ \delta δ实在一个状态下仅仅输入一个字符的转换函数
当输入一个字符串时,转换函数用 δ ′ \delta' δ′表示,显然 δ ‘ \delta‘ δ‘是从 Q Q Q × \times × T ∗ T^* T∗到 Q Q Q的映射
δ ‘ \delta‘ δ‘的定义:
- 对 ϵ \epsilon ϵ ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ϵ \epsilon ϵ) = = = q q q;
- 对任意 a a a ∈ \in ∈ T T T和 ω \omega ω ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω a a a) = = = δ \delta δ ( ( ( δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) ), a a a ) ) )
如果有 δ ′ \delta' δ′ ( ( ( q 0 q_0 q0, ω \omega ω ) ) )= p p p, p p p ∈ \in ∈ F F F,那么称字符串 ω \omega ω被有限自动机 M M M接受,而 L L L ( ( ( M M M ) ) )则表示 M M M接受的语言,表示为 L ( M ) = { ω ∣ δ ′ ( q 0 , ω ) ∈ F } L(M)=\{ {\omega|\delta'(q_0,\omega)\in{F}}\} L(M)={ ω∣δ′(q0,ω)∈F}
确定的有限自动机转换函数的描述方法
状态转换图
直接描述转换函数
δ \delta δ ( ( ( q 0 q_0 q0 , , , a a a ) ) ) = = = q 1 q_1 q1, δ \delta δ ( ( ( q 0 q_0 q0 , , , b b b ) ) ) = = = q 2 q_2 q2
δ \delta δ ( ( ( q 1 q_1 q1 , , , a a a ) ) ) = = = q 3 q_3 q3 , , , δ \delta δ ( ( ( q 1 q_1 q1 , , , b b b ) ) ) = = = q 1 q_1 q1
δ \delta δ ( ( ( q 2 q_2 q2 , , , a a a ) ) ) = = = q 2 q_2 q2, δ \delta δ ( ( ( q 2 q_2 q2 , , , b b b ) ) ) = = = q 3 q_3 q3
δ \delta δ ( ( ( q 3 q_3 q3 , , , a a a ) ) ) = = = ϕ \phi ϕ, δ \delta δ ( ( ( q 3 q_3 q3 , , , b b b ) ) ) = = = ϕ \phi ϕ
转换函数表
a a a | b b b | |
---|---|---|
q 0 q_0 q0 | q 1 q_1 q1 | q 2 q_2 q2 |
q 1 q_1 q1 | q 3 q_3 q3 | q 1 q_1 q1 |
q 2 q_2 q2 | q 2 q_2 q2 | q 3 q_3 q3 |
q 3 q_3 q3 | ϕ \phi ϕ | ϕ \phi ϕ |
不确定的有限自动机
形式定义不确定的有限自动机
形式定义不确定的有限自动机NFA
确定的有限自动机DFA是一个五元组 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)
其中,
- Q Q Q:有限状态的集合;
- T T T:有限的输入字母表;
- δ \delta δ:转换函数,从 Q Q Q × \times × T T T到 2 Q 2^Q 2Q的映射;(当NFA在某一个状态下输入一个字符时,可转换的后继状态是 Q Q Q的一个子集)
- q 0 q_0 q0 :初始状态, q 0 q_0 q0 ∈ \in ∈ Q Q Q
- F F F:终止状态集, F F F ⊆ \subseteq ⊆ Q Q Q
与DFA相似,当NFA在某一个状态下输入了一个字符串时,其转换函数 δ \delta δ应改为 δ ′ \delta' δ′
δ ′ \delta' δ′的定义如下 - 对 ϵ \epsilon ϵ ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ϵ \epsilon ϵ) = = = q q q;
- 对任意 a a a ∈ \in ∈ T T T和 ω \omega ω ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω a a a) = = ={ p p p|对 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) )中某状态 r r r,且 p p p在 δ \delta δ ( ( ( r r r, a a a ) ) )内};
- δ ′ \delta' δ′ ( ( ( P P P, ω \omega ω ) ) )= ⋃ q ∈ P \bigcup_{q\in{P}} ⋃q∈P δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) ), P P P ⊆ \subseteq ⊆ Q Q Q
NFA可接受的语言为 L ( M ) = { ω ∣ δ ′ ( q 0 , ω ) 含 F 中 的 一 个 状 态 } L(M)=\{\omega|\delta'(q_0,\omega)含F中的一个状态\} L(M)={ ω∣δ′(q0,ω)含F中的一个状态}
不确定的有限自动机转换函数描述方法
状态转移图
直接描述转移函数
δ \delta δ ( ( ( q 0 q_0 q0, a a a ) ) )={
q 0 q_0 q0, q 1 q_1 q1}, δ \delta δ ( ( ( q 0 q_0 q0, b b b ) ) )={
q 0 q_0 q0, q 3 q_3 q3}, δ \delta δ ( ( ( q 0 q_0 q0, c c c ) ) )={
q 0 q_0 q0, q 5 q_5 q5}
δ \delta δ ( ( ( q 1 q_1 q1, a a a ) ) )={
q 2 q_2 q2}, δ \delta δ ( ( ( q 1 q_1 q1, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 1 q_1 q1, c c c ) ) )= ϕ \phi ϕ
δ \delta δ ( ( ( q 2 q_2 q2, a a a ) ) )={
q 2 q_2 q2}, δ \delta δ ( ( ( q 2 q_2 q2, b b b ) ) )={
q 2 q_2 q2}, δ \delta δ ( ( ( q 2 q_2 q2, c c c ) ) )={
q 2 q_2 q2}
δ \delta δ ( ( ( q 3 q_3 q3, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 3 q_3 q3, b b b ) ) )={
q 4 q_4 q4}, δ \delta δ ( ( ( q 3 q_3 q3, c c c ) ) )= ϕ \phi ϕ
δ \delta δ ( ( ( q 4 q_4 q4, a a a ) ) )={
q 4 q_4 q4}, δ \delta δ ( ( ( q 4 q_4 q4, b b b ) ) )={
q 4 q_4 q4}, δ \delta δ ( ( ( q 4 q_4 q4, c c c ) ) )={
q 4 q_4 q4}
δ \delta δ ( ( ( q 5 q_5 q5, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 5 q_5 q5, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 5 q_5 q5, c c c ) ) )={
q 6 q_6 q6}
δ \delta δ ( ( ( q 6 q_6 q6, a a a ) ) )={
q 6 q_6 q6}, δ \delta δ ( ( ( q 6 q_6 q6, b b b ) ) )={
q 6 q_6 q6}, δ \delta δ ( ( ( q 6 q_6 q6, c c c ) ) )={
q 6 q_6 q6}
转换函数表
a a a | b b b | c c c | |
---|---|---|---|
q 0 q_0 q0 | { q 0 q_0 q0, q 1 q_1 q1} | { q 0 q_0 q0, q 3 q_3 q3} | { q 0 q_0 q0, q 5 q_5 q5} |
q 1 q_1 q1 | { q 2 q_2 q2} | ϕ \phi ϕ | ϕ \phi ϕ |
q 2 q_2 q2 | { q 2 q_2 q2} | { q 2 q_2 q2} | { q 2 q_2 q2} |
q 3 q_3 q3 | ϕ \phi ϕ | { q 4 q_4 q4} | ϕ \phi ϕ |