日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

發布時間:2025/6/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、非確定性自動機 計算過程 ( 計算樹 )
  • 二、判定 非確定性自動機 接受的字符串
  • 三、自動機 設計要求
  • 四、非確定性有限自動機設計
  • 五、非確定性有限自動機 與 確定性 有限自動機 比較
  • 六、空值轉換





一、非確定性自動機 計算過程 ( 計算樹 )



分析上述自動機處理 " 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ε 輸入控制轉換狀態 的操作 , 可以設計自動機可以將設計自動機的語言化整為零 , 將零散設計的自動機組合到一起 , 拼裝成一個更大的自動機 ;

總結

以上是生活随笔為你收集整理的【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。