NFA 确定化为 DFA 的方法

NFA 确定化为 DFA 的方法

NFA 的确定化是指对任给的 NFA ,都能相应地构造一 DFA ,使它们接受相同的语言

前面提到, NFA 允许 ε 边的状态转换。现在假设一个 NFA 当前是 q1 状态,它遇到的输入符号是 a ,而它在不消耗输入符号 a 的情况下,可以通过 ε 边转换到 q2 状态。那么,如果要问 NFA在使用输入符号 a 之前处于哪种状态,就会有点混乱,难以回答。我们最好描述成:该 NFA 当前的状态可能是状态集合{q 1 , q 2 }中的某个状态。或者将 NFA 想象成同一时间处于 q 1 和 q 2 两个状态,这为我们后面利用子集法转换 NFA 到 DFA 提供了一点暗示,即 DFA 中的状态 q ={q 1 , q 2 }。

对于一个 NFA ,由于状态转换函数 f 是一个多值函数,因此总存在一些状态 q ,对于它们有 f (q , a ) = { q 1 , q 2 , q 3 ,…, q n },它是 NFA 状态集合的一个子集,为了将 NFA 转换为 DFA ,把状态集合{q 1 , q 2 ,…, q n }看做一个状态 A ,也就是说,从 NFA 构造 DFA 的基本思想是 DFA 的每一个状态代表 NFA 状态集合的某个子集,这个 DFA 使用它的状态去记录在 NFA 读入输入符号之后可能到达的所有状态的集合,我们称此构造方法为子集法

下面具体给出由 NFA 构造等价 DFA 的子集法。

**输入**:一个 NFA N 。
**输出**:一个接受(识别)相同语言的 DFA M 。

方法:利用构造 ε - 闭包的方法将 NFA 确定化为 DFA 。

首先引入状态集合 I 的 ε - 闭包的概念。
设 I 是 NFA N 的一个状态子集,ε -CLOSURE ( I )定义如下:

(1 )若 s ∈ I ,则 s ∈ ε -CLOSURE ( I )。
(2 )若 s ∈ I ,那么从 s 出 发经过任意 条 ε 弧而能 到达的 任 何 状 态 s' ,都 属 于 ε -CLOSURE ( I )。

由定义可知,ε -CLOSURE ( I )表示所有那些从 I 中的元素出发经过 ε 道路所能到达的NFA 的状态所组成的集合, I 中任何状态也在其中,因为它们是通过 ε 通路到达自身的。该集合对 DFA 来说是一个状态。这样,利用构造 ε -CLOSURE (I )的方法就可以比较方便、直接地把 NFA 转换为一个等价的 DFA 。

下面通过图 3.13 理解状态集合 I 的 ε - 闭包。在这里插入图片描述
ε -CLOSURE ({ 0 }) = { 0 , 1 , 2 , 3 },即{0 , 1 , 2 , 3 }中的任一状态都是从 NFA N 的初态 0 出发,经任意条 ε 道路可到达的状态。这个状态集合实际就是要求的 DFA 的初态。
若令 A = { 0 ,1 , 2 , 3 },则 J = f ( A , b ) = f ( 0 ,b ) ∪ f ( 1 , b ) ∪ f ( 2 , b ) ∪ f ( 3 , b ) = { 4 , 7 }。
因为在状 态 A 中 只 有 状 态 0 有 b 的 转 移,转 移 到 的 状 态 为 4 和 7 。那 么 令 B = ε -CLOSURE { 4 , 7 } ( ) = { 4 , 5 , 6 , 7 , 8 , 9 },即是 DFA 在状态 A 下遇到输入符号 b 所转移到的后继状态。

综上所述,从 NFA N = ( Q ,Σ , f , S , Z )构造等价的 DFA M = ( Q’ , Σ ,f’,S’ , Z’ )的基本方法是:首先将从状态 S 出发经过任意条 ε 弧所能到达的状态所组成的集合作为 M 的初态 S’ ,然后从 S’ 出发,经过对输入符号 a ∈ Σ 的状态转移所能到达的状态(包括读输入符号 a 之前或之后所有可能的 ε 转移所能到达的状态)所组成的集合作为 M 的新状态,如此重复,直到不再有新的状态出现为止。下面给出构造 Q’ 及f’的算法描述如下:

(1 )置 DFA M 中的状态集 Q’ 和 Z’ 为 Ø 集。
(2 )给出 M 的初态 S’ = ε -CLOSURE ({ S }),并把 S’ 置为未标记状态后加入到 Q’ 中(未标记状态即新状态)。
(3 )如果 Q’ 中存在未标记的状态 T = { q 1 , q 2 ,…, q n }, q i ∈ Q ,则进行如下变换(即求f’(T , a )的后继状态 U )。
① 对于每个 a ∈ Σ ,置

J = f ({ q 1 , q 2 ,…, q n }, a ) = f ( q 1 , a ) ∪ f ( q 2 , a ) ∪ … ∪ f ( q n , a )
U = ε -CLOSURE ( J )

如果 U 不在 Q’ 中,则将 U 置为无标记的状态添加到 Q’ 中,且把状态转移f’(T , a ) = U添加到 M 中,如果 U 中至少含有一个元素是 N 的终态,则把 U 置为 M 的终态,即把 U 添加到 Z’ 中。
② 对 T 置标记(表示 T 不再是新加入 Q’ 中的状态)。

(4 )重复进行步骤( 3 ),直到 Q’ 中不再含有未标记的状态为止。

(5 )重新命名 Q’ 中的状态,最后获得等价的 DFA M 。

【例 3.14 】将图 3.11 中的 NFA N 确定化。
在这里插入图片描述

(1 )其等价 DFA 的开始状态为

A = ε -CLOSURE ({ X }) = { X , 0 , 1 }

作为未标记的状态添加到 Q’ 中。

(2 )此时 Q’ 中仅有唯一的未标记状态 A ,因此
① 进行如下变换:

f'(A , a ) = ε -CLOSURE ( f ({ X , 0 , 1 }, a )) = ε -CLOSURE ({ 0 , 2 }) = { 0 , 1 , 2 } = B

且把 B 置为未标记的状态添加到 Q’ 中,把状态转移
f’(A , a ) = B 添加到 M 中。

f'(A , b ) = ε -CLOSURE ( f ({ X , 0 , 1 }, b )) = ε -CLOSURE ({ 0 }) = { 0 , 1 } = C

且把 C 置为未标记的状态添加到 Q’ 中,把状态转移f’(A , b ) = C 添加到 M 中。

② 对 A 做标记。

(3 )此时, Q’ = { A , B , C },其中 B , C 均未加标记,故
① 进行如下变换:

f'(B , a ) = ε -CLOSURE ( f ({ 0 , 1 , 2 }, a )) = ε -CLOSURE ({ 0 , 2 }) = { 0 , 1 , 2 } = B

把状态转移
f’(B , a ) = B 添加到 M 中。

f'(B , b ) = ε -CLOSURE ( f ({ 0 , 1 , 2 }, b )) = ε -CLOSURE ({ 0 , 3 }) = { 0 , 1 , 3 } = D

且把 D 置为未标记的状态添加到 Q’ 中,把状态转移f’(B , b ) = D 添加到 M 中。
② 对 B 做标记。

(4 )此时, Q’ = { A , B , C , D }其中 C , D 均未加标记,故
① 进行如下变换:

f'(C , a ) = ε -CLOSURE ( f ({ 0 , 1 }, a )) = ε -CLOSURE ({ 0 , 2 }) = { 0 , 1 , 2 } = B

把状态转移
f’(C , a ) = B 添加到 M 中。

f'(C , b ) = ε -CLOSURE ( f ({ 0 , 1 }, b )) = ε -CLOSURE ({ 0 }) = { 0 , 1 } = C

把状态转移f’(C , b ) = C ,添加到 M 中。
② 对 C 做标记。

(5 )此时, Q’ 未增大,但 D 未做标记,故
① 进行如下变换:

f'(D , a ) = ε -CLOSURE ( f ({ 0 , 1 , 3 }, a ) = ε -CLOSURE ({ 0 , 2 }) = { 0 , 1 , 2 } = B

把状态转移f’(D , a ) = B 添加到 M 中。

f'(D , b ) = ε -CLOSURE ( f ({ 0 , 1 , 3 }, b )) = ε -CLOSURE ({ 0 , Y }) = { 0 , 1 , Y } = E

且把 E 置为未标记的状态添加到 Q’ 中,把状态转移f’(D , b ) = E 添加到 M 中。
② 对 D 做标记。

(6 )此时, Q’ = { A , B , C , D , E },其中 E 未加标记,故
① 进行如下变换:

f'(E , a ) = ε -CLOSURE ({ 0 , 1 , Y }, a )) = ε -CLOSURE ({ 0 , 2 }) = { 0 , 1 , 2 } = B

把状态转移f’(E , a ) = B 添加到 M 中。

f'(E , b ) = ε -CLOSURE ({ 0 , 1 , Y }, b )) = ε -CLOSURE ({ 0 }) = { 0 , 1 } = C

把状态转移f’(E , b ) = C 添加到 M 中,且 E 中含有一个 N 的终态 Y ,则置 E 为 M 的终态。

② 对 E 做标记。至此,Q’ 中的状态 A , B , C , D , E 已全部标记完毕,故确定化的过程结束,得到了等价的DFA M 的状态转换矩阵(见表 3.3 )和如图 3.14 所示的 DFA M 的状态转换图。在这里插入图片描述
【例 3.15 】将图 3.12 中的 NFA N 确定化。在这里插入图片描述

首先确定其初态,命名为 0 状态。
0= ε-CLOSURE ({ X }) = { X }
对初态执行确定化算法,得到如表 3.4 所示的 DFA M 的状态矩阵和如图 3.15 所示的DFA M 的状态转换图。在这里插入图片描述

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值