【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
文章目錄
- 一、非確定性自動機 計算過程 ( 計算樹 )
- 二、判定 非確定性自動機 接受的字符串
- 三、自動機 設計要求
- 四、非確定性有限自動機設計
- 五、非確定性有限自動機 與 確定性 有限自動機 比較
- 六、空值轉換
一、非確定性自動機 計算過程 ( 計算樹 )
分析上述自動機處理 " 010101010101 " 字符串信息的過程
自動機啟動后 , 進入 q1\rm q_1q1? 狀態 , 這是個非接受狀態 ( 單圈表示 ) ;
q1q_1q1? 狀態讀取字符 000 : 仍然保持 q1\rm q_1q1? 狀態 ;
q1\rm q_1q1? 狀態 讀取字符 111 : 有 333 個后繼狀態 , 分別是 q1\rm q_1q1? , q2\rm q_2q2? 和 q3\rm q_3q3? ;
q3q_3q3? 是 q1q_1q1? 輸入 111 的后繼狀態原因 : q2q_2q2? 到 q3q_3q3? 不需要讀取任何字符 , 就可以跳轉到 q3q_3q3? , 因此 q2q_2q2? 是無條件跳轉到 q3q_3q3? 的 , 此時可以與 q2q_2q2? 并列 ;
分析第三層的左側 q1q_1q1? 分支 :
q1q_1q1? 狀態讀取 000 , 跳轉到 q1q_1q1? 狀態 ;
再次從 q1q_1q1? 狀態讀取 111 , 又出現跳轉到 q1q_1q1? , q2q_2q2? 和 q3q_3q3? 三個狀態的分支 , 如下圖紅框內的部分 :
分析第三層的中間 q2q_2q2? 分支 :
q2q_2q2? 狀態讀取 000 , 跳轉到 q3q_3q3? 狀態 ;
再次從 q3q_3q3? 狀態讀取 111 , 跳轉到 q4q_4q4? 狀態 , 如下圖紅框內的部分 ;
分析第三層的右側的 q3q_3q3? 分支 : 此時輸入 000 字符 , 沒有路徑 , 該分支終端 ;
這是非確定性自動機最終的計算結果如下圖所示 ;
計算樹 : 非確定性有限自動機 在 " 010101010101 " 字符串 上進行計算 , 得到的是一個 計算樹 ;
對比 : 確定性自動機計算的時候 , 得到的結果是 鏈 , 非確定性自動機計算 , 得到的結果是 樹 ;
二、判定 非確定性自動機 接受的字符串
如何判定非確定性自動機是否接收某個字符串 ???
計算結果描述 : 上述的計算樹 , 是自動機在 " 010101010101 " 字符串上的計算 ; 最后一排的狀態 q1,q2,q3,q4q_1, q_2, q_3, q_4q1?,q2?,q3?,q4? , 只有 q4q_4q4? 是 接受狀態 , q1,q2,q3q_1, q_2, q_3q1?,q2?,q3? 都是 非接受狀態 ;
① 接受字符串 : 只要最后一排的葉子結點上 , 存在一個 接受狀態 , 那么稱 非確定性有限自動機 是 接受這個字符串 " 010101010101 " 的 ;
② 拒絕字符串 : 如果最后一排的葉子結點上 , 都是 非接受狀態 , 那么稱 非確定性有限自動機 是 拒絕這個字符串 " 010101010101 " 的 ;
三、自動機 設計要求
非確定性有限自動機 需求 :
字符集 : Σ={0,1}\Sigma = \{0 , 1\}Σ={0,1} ;
語言要求 : 接受的字符串的倒數第三個字符是 111 ;
分別設計一個確定性有限自動機和非確定性有限自動機 , 對它們進行比較 ;
四、非確定性有限自動機設計
非確定性有限自動機設計思路 : 只要沿著正確的思路設計即可 , 設計出一種正確的自動機即可 ;
自動機啟動后 , 自動進入開始狀態 q1q_1q1? ;
在開始狀態 q1q_1q1? , 接收一個字符 , 假設當前接收的字符已經到了倒數第三個字符 , 是 111 , 此時滿足語言要求 ;
當前時刻后面還可以 輸入兩個任意字符 , 經歷 222 個任意狀態 q2,q3q_2,q_3q2?,q3? , 最后一個狀態 q4q_4q4? 是 接受狀態 ;
非確定性有限自動機設計如下 :
非確定性有限自動機詳細說明 :
① 第一個狀態 q1q_1q1? 接受 第一個字符 : 其中開始狀態是 第一個狀態 , 輸入 111 進入第二個狀態 , 這個是必須的 , 因為需要倒數第三個字符是 111 ;
② 第二個狀態 q2q_2q2? 接受 第二個字符 : 第二個狀態 輸入不管是 000 還是 111 , 都跳轉到第三個狀態 ;
③ 第三個狀態 q3q_3q3? 接受 第三個字符 : 第三個狀態 輸入不管是 000 還是 111 , 都跳轉到第四個狀態 ;
④ 第四個狀態 q4q_4q4? 接收狀態 : 第四個狀態是接收狀態 , 因為導數第 333 個字符是 111 , 該自動機符合要求 ;
第一個狀態是導數第三個字符 , 之前還可以有無數個字符 , 可以在 第一個狀態下 , 接收任意 0,10,10,1 字符 , 仍然回到第一個狀態 ;
上述自動機所接受的字符串 , 剛好是自動機設計要求的字符串 , 倒數第三個字符是 111 ;
五、非確定性有限自動機 與 確定性 有限自動機 比較
使用非確定性有限自動機 設計上述語言對應的自動機非常方便簡潔 , 其遠遠比確定性有限自動機方便 ;
非確定性有限自動機 與 確定性 有限自動機 比較 :
① 非確定性有限自動機 : 只需要考慮正確的分支即可 , 不需要的分支 , 完全可以不寫 ; 如上述要求倒數第三個字符是 111 , 假如輸入的倒數第三個字符是 000 , 自動機肯定不會接受該字符串 , 非確定性有限自動機中就可以不用考慮這種情況 ;
② 確定性有限自動機 : 但是在確定性有限自動機中 , 必須設計出該分支 , 當導數第三個字符是 000 的情況 , 需要設計出該分支 , 極大的增加了自動機的復雜性 ;
六、空值轉換
ε\varepsilonε 空字符串在非確定性有限自動機中的 作用 :
開始狀態 , 如果讀取到 ε\varepsilonε , 會自動跳轉到后續狀態 , 這是無條件的條狀 , 表示 開始狀態 不需要讀取任何字符 , 就可以跳轉到下一個狀態 , 其后續狀態 與 開始狀態是平級的 ;
使用 ε\varepsilonε 輸入控制轉換狀態 的操作 , 可以設計自動機可以將設計自動機的語言化整為零 , 將零散設計的自動機組合到一起 , 拼裝成一個更大的自動機 ;
總結
以上是生活随笔為你收集整理的【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算理论】自动机设计 ( 设计自动机
- 下一篇: 【计算理论】正则语言 ( 正则表达式原子