(NFA的确定化)NFA转换为等价的DFA(含视频教程)

视频教程,点这里

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    
  • 状态图
    • 初态:以箭头指向表示
    • 终态:以双圆圈表示
    • 状态转换:以有向弧表示

(NFA的确定化)NFA转换为等价的DFA(含视频教程)_第1张图片

  • 状态转换表(矩阵表示)
    • (横,纵) → 值:(当前状态,输入符号) → 下一状态
    • 右侧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弧后,所能达到的状态的集合。

  • 例子
    (NFA的确定化)NFA转换为等价的DFA(含视频教程)_第2张图片

  • 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)画出状态图

  • 例子

(NFA的确定化)NFA转换为等价的DFA(含视频教程)_第3张图片
- 计算ε-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的确定化)NFA转换为等价的DFA(含视频教程)_第4张图片

视频教程,点这里

其它

课件下载:

关注下方微信公众号,
回复:
NFA转DFA.code
  • 欢迎加入交流群:451826376

  • 更多信息:www.itcourse.top

完整教程PDF版本下载

你可能感兴趣的:(杂项)