DFA和NFA组成定义
DFA构成:五元组(K,∑,f,S,Z)
- K:所有状态的集合
- ∑:所有可接受的输入符号的集合
- f:转换函数,是K × ∑ → K 上的映射。就是一个状态读入某个输入符号之后所到达的下一个状态的规则
- S:K中的初始状态(只有一个)
- Z:K中的终态集合(多个)
NFA构成:五元组
- K:所有状态的集合
- ∑:所有可接受的输入符号的集合
- f:转换函数,是K × ∑* → 2^k 上的映射(2^k表示k的幂级)。就是一个状态读入某个输入符号之后,可能达到多个状态
- S:K中的初始状态集合(多个)
- Z:K中的终态集合(多个)
状态转换图及状态转换矩阵
- 例子
DFA M = ({S,U,V,Q},{a,b},f,S,{Q}),其中f定义为
f(S,a) = U, f(U,a) = Q, f(V,a) = U, f(Q,a) = Q,
f(S,b) = V, f(U,b) = V, f(V,b) = Q, f(Q,b) = Q
- 状态图
- 初态:以箭头指向表示
- 终态:以双圆圈表示
- 状态转换:以有向弧表示
- 状态转换表(矩阵表示)
- (横,纵) → 值:(当前状态,输入符号) → 下一状态
- 右侧0/1:0表示非终态,1表示终态
状态\符号 | a | b |
---|---|---|
S | U | V |
U | Q | V |
V | U | Q |
Q | Q | Q |
closure和move
- ε-closure(I):其中I是一个集合。表示I中每个状态经过任意条ε弧后,所能达到的状态的集合。
move(I,a):其中I是一个集合,a是一条弧。表示I中每个状态经过一条a弧后,所能达到的状态的集合。
例子
- A = ε-closure(0) = {0,1,2,4,7}
- move(A,a) = {3,8}
等价转换规则
这里介绍 子集法,假设NFA N = (K,∑,f,K0,Kt),构造一个等价DFA M = (S,∑,D,S0,St)
步骤
1) 计算ε-closure(K0),取名T0
2)标记T0以处理,分别计算ε-closure(move(T0,∑的单个输入),取名Tx……Ty
3)标记已处理,对新的Tx-Ty重复第二步,直到不再产生新的Ti集合为止
4)按照1、2、3步的关系,确定所有的T集合之间的转换关系
5)S0=[T0],St=含有NFA中的终态的那个T集合
6)画出状态图例子
- 计算ε-closure(K0),取名T0,K0只有一个0状态
T0 = ε-closure(0) = {0,1,2,4,7}
- 分别计算ε-closure(move(T0,∑的单个输入),取名Tx……Ty
----------------------------------------------T0------------------------------------------------
Ti = ε-closure(move(T0,a))
move(T0,a) = {3,8}
T1 = {1,2,3,4,6,7,8}
Ti = ε-closure(move(T0,b))
move(T0,b) = {5}
T2 = {1,2,4,5,6,7}
- 对新的Tx-Ty重复第二步,直到不再产生新的Ti集合为止(T1、T2)
----------------------------------------------T1------------------------------------------------
T1 = {1,2,3,4,6,7,8}
Ti = ε-closure(move(T1,a))
move(T1,a) = {3,8}
Ti = T1
Ti = ε-closure(move(T1,b))
move(T1,b) = {5,9}
T3 = {1,2,4,5,6,7,9}
----------------------------------------------T2------------------------------------------------
T2 = {1,2,4,5,6,7}
Ti = ε-closure(move(T2,a))
move(T2,a) = {3,8}
Ti = T1
Ti = ε-closure(move(T2,b))
move(T2,b) = {5}
Ti = T2
----------------------------------------------T3------------------------------------------------
T3 = {1,2,4,5,6,7,9}
Ti = ε-closure(move(T3,a))
move(T3,a) = {3,8}
Ti = T1
Ti = ε-closure(move(T3,b))
move(T3,b) = {5,10}
T4 = {1,2,4,5,6,7,10}
----------------------------------------------T4------------------------------------------------
T4 = {1,2,4,5,6,7,10}
Ti = ε-closure(move(T4,a))
move(T4,a) = {3,8}
Ti = T1
Ti = ε-closure(move(T4,b))
move(T4,b) = {5}
Ti = T2
- 至此,所有状态求解已经完成
- S = {T0,T1,T2,T3,T4}
- S0 = T0
- St = T4(T4中含有10)
- ∑ = {a,b} (和NFA是一样的)
- D
D(T0,a) = T1
D(T0,b) = T2
D(T1,a) = T1
D(T1,b) = T3
D(T2,a) = T1
D(T2,b) = T2
D(T3,a) = T1
D(T3,b) = T4
D(T4,a) = T1
D(T4,b) = T2
- 将T0,T1,T2,T3,T4分别对应到0,1,2,3,4,得到状态转换图如下所示
其它
课件下载:
关注下方微信公众号,
回复:
NFA转DFA.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top