NFA与DFA之间的转化

利用子集法,可以将NFA转化为与之等价的DFA。

记状态机$A$为 $$A = ( V,\sum,\delta,V_{N},V_{T} )$$

$\epsilon \_CLOSURE$的求法

假设我们要构造状态$I$的$\epsilon$_闭包,即$\epsilon \_CLOSURE(I)$。

基础:$I \in \epsilon \_CLOSURE(I)$。

归纳:如果$s_i \in \epsilon \_CLOSURE(I)$,且存在$\delta(s_i,\epsilon) = s_j$,则$s_j \in \_CLOSURE(I)$。

子集法确定化NFA的步骤

(1)构造一张转换表,其第一列为状态子集$I$,对不同的$a \ (a \in \sum)$ 在表单中设一列$I_{a}$。

(2)表的第一行第一列其状态子集$I$为$\epsilon \_CLOSURE(V_{T})$,其中$V_{T}$为初始状态。

(3)根据第一列中的$I$,为每一个$a$求其$I_{a}$,并记入对应的$I_{a}$列中,并且对该状态子集求$\epsilon \_CLOSURE$,如果此$I_{a}$不同与第一列中已存在的所有状态子集$I$,则将其记入到空行的第一列。

(4)重复步骤(3),直到每个$I$及$a$,均已求得$I_{a}$,并且无新的状态子集$I_{a}$加入第一列为止。

(5)重新命名第一列的每一个状态子集,则转换为新的状态转移矩阵。

 

下面是一个NFA,并且将NFA转为DFA

 

下面是转化过程

对第一列进行编号,形成新的DFA状态,然后根据上面的状态转移矩阵画图。

为什么子集构造法是正确的

这里可知,DFA识别字符串返回的是一个状态,而NFA识别字符串是返回一个状态集合。

由上面的步骤可知,子集构造法是将NFA识别的状态集合作为DFA的一个状态,所以NFA能识别的字符串,DFA照样能够识别,所以子集构造法是行之有效的。

下面给出形式化的证明

对于字符串$w$

要证明的只是对于$\delta_{D}(\epsilon\_CLOSURE(V_{T}),w) = \delta_{N}(V_{T},w)$

$\delta_{D}$是DFA的转移函数  , $ \delta_{N}$是NFA的转移函数

即从初始状态开始,对于任意的字符串$w$,它们识别的情况是一样的。

基础:设$|w|=0$,即$w=\epsilon$,那么可知,$\delta_{D}(\epsilon\_CLOSURE(V_{T}),\epsilon) 和 \delta_{N}(V_{T},\epsilon)$都是$\epsilon\_CLOSURE(V_{T})$。

归纳:设$w$的长度为$n+1$,假设命题对长度$n$成立。把$w$分解成$w=xa$。$a$是字符串w的最后一个字符

那么根据假设, 有 $\delta_{D}(\epsilon\_CLOSURE(V_{T}),x) = \delta_{N}(V_{T},x)$。设这两个状态集合都是$\{ p_1,p_2,...,p_k \}$

那么NFA识别字符串$w$所得到的状态集合是$$\delta_{N}(V_T,w) = \bigcup_{i=1}^{k} \delta_N(p_i,a)$$

而DFA识别字符串$w$所得到的状态集合是$$\delta_D({p_1,p_2,...,p_k},a)=\bigcup_{i=1}^{k}\delta_D(p_i,a)$$

可知$$\delta_D({p_1,p_2,...,p_k},a)= \bigcup_{i=1}^{k} \delta_N(p_i,a)$$

所以,$$\delta_D({p_1,p_2,...,p_k},a) = \bigcup_{i=1}^{k} \delta_N(p_i,a)$$

所以得到了$L(D)=L(N)$的证明。

 

转载于:https://www.cnblogs.com/beMaster/p/5068934.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值