文章目錄
I . 非確定性自動機 計算過程 ( 計算樹 )
分析上述自動機處理 " " 字符串信息的過程
自動機啓動後 , 進入 狀態 , 這是個非接受狀態 ( 單圈表示 ) ;
狀態讀取字符 : 仍然保持 狀態 ;
狀態 讀取字符 : 有 個後繼狀態 , 分別是 , 和 ;
是 輸入 的後繼狀態原因 : 到 不需要讀取任何字符 , 就可以跳轉到 , 因此 是無條件跳轉到 的 , 此時可以與 並列 ;
分析第三層的左側 分支 :
狀態讀取 , 跳轉到 狀態 ;
再次從 狀態讀取 , 又出現跳轉到 , 和 三個狀態的分支 , 如下圖紅框內的部分 :
分析第三層的中間 分支 :
狀態讀取 , 跳轉到 狀態 ;
再次從 狀態讀取 , 跳轉到 狀態 , 如下圖紅框內的部分 ;
分析第三層的右側的 分支 : 此時輸入 字符 , 沒有路徑 , 該分支終端 ;
這是非確定性自動機最終的計算結果如下圖所示 ;
計算樹 : 非確定性有限自動機 在 " " 字符串 上進行計算 , 得到的是一個 計算樹 ;
對比 : 確定性自動機計算的時候 , 得到的結果是 鏈 , 非確定性自動機計算 , 得到的結果是 樹 ;
II . 判定 非確定性自動機 接受的字符串
如何判定非確定性自動機是否接收某個字符串
計算結果描述 : 上述的計算樹 , 是自動機在 " " 字符串上的計算 ; 最後一排的狀態 , 只有 是 接受狀態 , 都是 非接受狀態 ;
① 接受字符串 : 只要最後一排的葉子結點上 , 存在一個 接受狀態 , 那麼稱 非確定性有限自動機 是 接受這個字符串 " " 的 ;
② 拒絕字符串 : 如果最後一排的葉子結點上 , 都是 非接受狀態 , 那麼稱 非確定性有限自動機 是 拒絕這個字符串 " " 的 ;
III . 自動機 設計要求
非確定性有限自動機 需求 :
字符集 : ;
語言要求 : 接受的字符串的倒數第三個字符是 ;
分別設計一個確定性有限自動機和非確定性有限自動機 , 對它們進行比較 ;
IV . 非確定性有限自動機設計
非確定性有限自動機設計思路 : 只要沿着正確的思路設計即可 , 設計出一種正確的自動機即可 ;
自動機啓動後 , 自動進入開始狀態 ;
在開始狀態 , 接收一個字符 , 假設當前接收的字符已經到了倒數第三個字符 , 是 , 此時滿足語言要求 ;
當前時刻後面還可以 輸入兩個任意字符 , 經歷 個任意狀態 , 最後一個狀態 是 接受狀態 ;
非確定性有限自動機設計如下 :
非確定性有限自動機詳細說明 :
① 第一個狀態 接受 第一個字符 : 其中開始狀態是 第一個狀態 , 輸入 進入第二個狀態 , 這個是必須的 , 因爲需要倒數第三個字符是 ;
② 第二個狀態 接受 第二個字符 : 第二個狀態 輸入不管是 還是 , 都跳轉到第三個狀態 ;
③ 第三個狀態 接受 第三個字符 : 第三個狀態 輸入不管是 還是 , 都跳轉到第四個狀態 ;
④ 第四個狀態 接收狀態 : 第四個狀態是接收狀態 , 因爲導數第 個字符是 , 該自動機符合要求 ;
第一個狀態是導數第三個字符 , 之前還可以有無數個字符 , 可以在 第一個狀態下 , 接收任意 字符 , 仍然回到第一個狀態 ;
上述自動機所接受的字符串 , 剛好是自動機設計要求的字符串 , 倒數第三個字符是 ;
V . 非確定性有限自動機 與 確定性 有限自動機 比較
使用非確定性有限自動機 設計上述語言對應的自動機非常方便簡潔 , 其遠遠比確定性有限自動機方便 ;
非確定性有限自動機 與 確定性 有限自動機 比較 :
① 非確定性有限自動機 : 只需要考慮正確的分支即可 , 不需要的分支 , 完全可以不寫 ; 如上述要求倒數第三個字符是 , 假如輸入的倒數第三個字符是 , 自動機肯定不會接受該字符串 , 非確定性有限自動機中就可以不用考慮這種情況 ;
② 確定性有限自動機 : 但是在確定性有限自動機中 , 必須設計出該分支 , 當導數第三個字符是 的情況 , 需要設計出該分支 , 極大的增加了自動機的複雜性 ;
VI . 空值轉換
空字符串在非確定性有限自動機中的 作用 :
開始狀態 , 如果讀取到 , 會自動跳轉到後續狀態 , 這是無條件的條狀 , 表示 開始狀態 不需要讀取任何字符 , 就可以跳轉到下一個狀態 , 其後續狀態 與 開始狀態是平級的 ;
使用 輸入控制轉換狀態 的操作 , 可以設計自動機可以將設計自動機的語言化整爲零 , 將零散設計的自動機組合到一起 , 拼裝成一個更大的自動機 ;