【計算理論】非確定性有限自動機 ( 計算過程 | 計算樹 | 確定可接受字符串 | 設計非確定性有限自動機 | 空字符 )





I . 非確定性自動機 計算過程 ( 計算樹 )



在這裏插入圖片描述

分析上述自動機處理 " 01010101 " 字符串信息的過程



自動機啓動後 , 進入 q1q_1 狀態 , 這是個非接受狀態 ( 單圈表示 ) ;

在這裏插入圖片描述

q1q_1 狀態讀取字符 00 : 仍然保持 q1q_1 狀態 ;

在這裏插入圖片描述

q1q_1 狀態 讀取字符 11 : 33 個後繼狀態 , 分別是 q1q_1 , q2q_2q3q_3 ;


q3q_3q1q_1 輸入 11 的後繼狀態原因 : q2q_2q3q_3 不需要讀取任何字符 , 就可以跳轉到 q3q_3 , 因此 q2q_2 是無條件跳轉到 q3q_3 的 , 此時可以與 q2q_2 並列 ;

在這裏插入圖片描述

分析第三層的左側 q1q_1 分支 :


q1q_1 狀態讀取 00 , 跳轉到 q1q_1 狀態 ;

再次從 q1q_1 狀態讀取 11 , 又出現跳轉到 q1q_1 , q2q_2q3q_3 三個狀態的分支 , 如下圖紅框內的部分 :

在這裏插入圖片描述

分析第三層的中間 q2q_2 分支 :


q2q_2 狀態讀取 00 , 跳轉到 q3q_3 狀態 ;

再次從 q3q_3 狀態讀取 11 , 跳轉到 q4q_4 狀態 , 如下圖紅框內的部分 ;

在這裏插入圖片描述

分析第三層的右側的 q3q_3 分支 : 此時輸入 00 字符 , 沒有路徑 , 該分支終端 ;



這是非確定性自動機最終的計算結果如下圖所示 ;


計算樹 : 非確定性有限自動機 在 " 01010101 " 字符串 上進行計算 , 得到的是一個 計算樹 ;

對比 : 確定性自動機計算的時候 , 得到的結果是 鏈 , 非確定性自動機計算 , 得到的結果是 樹 ;

在這裏插入圖片描述





II . 判定 非確定性自動機 接受的字符串



如何判定非確定性自動機是否接收某個字符串 ??


計算結果描述 : 上述的計算樹 , 是自動機在 " 01010101 " 字符串上的計算 ; 最後一排的狀態 q1,q2,q3,q4q_1, q_2, q_3, q_4 , 只有 q4q_4 是 接受狀態 , q1,q2,q3q_1, q_2, q_3 都是 非接受狀態 ;


① 接受字符串 : 只要最後一排的葉子結點上 , 存在一個 接受狀態 , 那麼稱 非確定性有限自動機 是 接受這個字符串 " 01010101 " 的 ;

② 拒絕字符串 : 如果最後一排的葉子結點上 , 都是 非接受狀態 , 那麼稱 非確定性有限自動機 是 拒絕這個字符串 " 01010101 " 的 ;





III . 自動機 設計要求



非確定性有限自動機 需求 :


字符集 : Σ={0,1}\Sigma = \{0 , 1\} ;

語言要求 : 接受的字符串的倒數第三個字符是 11 ;


分別設計一個確定性有限自動機和非確定性有限自動機 , 對它們進行比較 ;





IV . 非確定性有限自動機設計



非確定性有限自動機設計思路 : 只要沿着正確的思路設計即可 , 設計出一種正確的自動機即可 ;


自動機啓動後 , 自動進入開始狀態 q1q_1 ;

在開始狀態 q1q_1 , 接收一個字符 , 假設當前接收的字符已經到了倒數第三個字符 , 是 11 , 此時滿足語言要求 ;

當前時刻後面還可以 輸入兩個任意字符 , 經歷 22 個任意狀態 q2,q3q_2,q_3 , 最後一個狀態 q4q_4 是 接受狀態 ;


非確定性有限自動機設計如下 :

在這裏插入圖片描述


非確定性有限自動機詳細說明 :


① 第一個狀態 q1q_1 接受 第一個字符 : 其中開始狀態是 第一個狀態 , 輸入 11 進入第二個狀態 , 這個是必須的 , 因爲需要倒數第三個字符是 11 ;

② 第二個狀態 q2q_2 接受 第二個字符 : 第二個狀態 輸入不管是 00 還是 11 , 都跳轉到第三個狀態 ;

③ 第三個狀態 q3q_3 接受 第三個字符 : 第三個狀態 輸入不管是 00 還是 11 , 都跳轉到第四個狀態 ;

④ 第四個狀態 q4q_4 接收狀態 : 第四個狀態是接收狀態 , 因爲導數第 33 個字符是 11 , 該自動機符合要求 ;


第一個狀態是導數第三個字符 , 之前還可以有無數個字符 , 可以在 第一個狀態下 , 接收任意 0,10,1 字符 , 仍然回到第一個狀態 ;


上述自動機所接受的字符串 , 剛好是自動機設計要求的字符串 , 倒數第三個字符是 11 ;





V . 非確定性有限自動機 與 確定性 有限自動機 比較



使用非確定性有限自動機 設計上述語言對應的自動機非常方便簡潔 , 其遠遠比確定性有限自動機方便 ;


非確定性有限自動機 與 確定性 有限自動機 比較 :


① 非確定性有限自動機 : 只需要考慮正確的分支即可 , 不需要的分支 , 完全可以不寫 ; 如上述要求倒數第三個字符是 11 , 假如輸入的倒數第三個字符是 00 , 自動機肯定不會接受該字符串 , 非確定性有限自動機中就可以不用考慮這種情況 ;

② 確定性有限自動機 : 但是在確定性有限自動機中 , 必須設計出該分支 , 當導數第三個字符是 00 的情況 , 需要設計出該分支 , 極大的增加了自動機的複雜性 ;





VI . 空值轉換



ε\varepsilon 空字符串在非確定性有限自動機中的 作用 :


開始狀態 , 如果讀取到 ε\varepsilon , 會自動跳轉到後續狀態 , 這是無條件的條狀 , 表示 開始狀態 不需要讀取任何字符 , 就可以跳轉到下一個狀態 , 其後續狀態 與 開始狀態是平級的 ;


使用 ε\varepsilon 輸入控制轉換狀態 的操作 , 可以設計自動機可以將設計自動機的語言化整爲零 , 將零散設計的自動機組合到一起 , 拼裝成一個更大的自動機 ;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章