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

Posted andyevans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将 不确定的有穷自动机(NFA) 转化为 确定的有穷自动机(DFA)相关的知识,希望对你有一定的参考价值。

一、从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)的主要内容,如果未能解决你的问题,请参考以下文章

什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)

什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)

什么是NFA(不确定的有穷自动机)和DFA(确定的有穷自动机)

编译原理 DFA(确定性有穷自动机)&& NFA(非确定性有穷自动机)

NFA到DFA的转换及DFA的简化

编译原理 第三章 词法分析(下)