如何將 不確定的有窮自動機(NFA) 轉化為 確定的有窮自動機(DFA)
阿新 • • 發佈:2019-01-08
ima 有一個 str 入棧 出發 一個 初始化 dstat 所有
一、從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)