码迷,mamicode.com
首页 > 其他好文 > 详细

如何将 不确定的有穷自动机(NFA) 转化为 确定的有穷自动机(DFA)

时间:2019-01-08 21:18:45      阅读:402      评论:0      收藏:0      [点我收藏+]

标签:ons   set   标记   接收   输出   入栈   http   ima   ack   

一、从NFA到DFA的转换

例如下图:

技术分享图片

 

DFA的每个状态都是一个由NFA中的状态构成的集合,即NFA状态集合的一个子集

 技术分享图片

r =aa*bb*cc*

技术分享图片

 

二、从带有ε-边的NFA到DFA的转换

技术分享图片

r=0*1*2*

技术分享图片

技术分享图片

三、子集构造法( subset construction)

? 输入:NFA N
? 输出:接收同样语言的DFA D
? 方法:一开始,ε-closure ( s0 )是Dstates 中的唯一状态,且它未加标记;

while(在Dstates中有一个未标记状态T )
{
    给T加上标记;
    for(每个输入符号a)
    {
        U = ε-closure(move(T, a));
        if ( U不在Dstates中)
            将U加入到Dstates中,且不加标记;
        Dtran[T, a]=U ;
    }
} 

技术分享图片

四、计算 ε-closure (T )

将T的所有状态压入stack中;将ε-closure  (T )初始化为 T ;

 while(stack非空)
{
  将栈顶元素 t 给弹出栈中;
  for(每个满足如下条件的u :从t出发有一个标号为ε的转换到达状态u)
     if ( u不在ε-closure  (T )中)
    {
      将u加入到ε-closure  (T )中;将u压入栈中;
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

如何将 不确定的有穷自动机(NFA) 转化为 确定的有穷自动机(DFA)

标签:ons   set   标记   接收   输出   入栈   http   ima   ack   

原文地址:https://www.cnblogs.com/AndyEvans/p/10241031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!