【計算理論】確定性有窮自動機 ( 自動機組成 | 自動機語言 | 自動機等價 )



I . 確定性有窮自動機組成



DFA , 全稱爲 Deterministic Finite Automaton , 確定性有窮自動機 ;


確定性 有窮自動機 組成 : 由以下的 5 5 部分組成 , 放入集合中展示 { Q , Σ , , δ , q 0 , F } \{ \quad Q , \quad \Sigma , \quad , \delta \quad , q_0 , \quad F \quad \} ;


Q Q 狀態集 : 有限個狀態 ;

Σ \Sigma 字母表 : 有限個字符集 , 長度有限的字符串 ;

δ \delta 轉移函數 : δ \delta 稱爲轉移函數 ; 基於當前的 自動機 的某個狀態 , 將字符集 輸入到自動機中 , 該自動機轉換成另一個狀態 , 這個轉換就是通過 δ \delta 轉換函數進行的 , 使用公式描述 Q × Σ Q Q \times \Sigma \to Q ;

q 0 q_0 起始狀態 : 是自動機的開始狀態 ;

F F 接受狀態集 : F F 是 可接受狀態 , 是 Q Q 的子集 , 記做 F Q F \subseteq Q , F F 可接受狀態相對的是不可接受狀態 ;



II . 確定性有窮自動機計算過程



在這裏插入圖片描述


1 . 自動機示例 : 上圖是上一篇博客的自動機示例 , 自動機開始執行後 , 將 字符串 「 0101 0101 」 輸入到自動機中 , 從 Start 出發 , 根據當前的自動機狀態 , 結合當前處理的輸入字符 , 改變成另外一個自動機狀態 , 所有字符處理完畢後 , 查看當前自動機狀態是否是可接受狀態 ;


2 . 自動機運行過程 : 詳細的計算過程 , 參考上一篇博客 : 【計算理論】自動機 示例 ( 自動機示例 | 自動機表示方式 | 自動機計算流程簡介 )


3 . 自動機定義由來 : { Q , Σ , , δ , q 0 , F } \{ \quad Q , \quad \Sigma , \quad , \delta \quad , q_0 , \quad F \quad \} 五個組件代入上述過程 , 就可以得到自動機定義 ;



III . 確定性有窮自動機定義



確定性又窮自動機定義


1 . 有以下已知條件 :


① 有窮自動機 : M M ;

② 輸入信息 : 接收 w w 字符串作爲輸入 , w w 字符串可以寫成 { w 1 , w 2 , w 3 , w m } \{ \, w_1, w_2 , w_3 , \cdots w_m \, \} m m 個字符 ; 其中 每個字符都屬於有限字符集 Σ \Sigma 中的字符 , 這些字符有重複的 , 這是輸入序列 , 下面是狀態序列 ; m m 是總共計算的次數 ;

③ 狀態序列 : 自動機 M M 有以下 m + 1 m + 1 個狀態序列 , { r 0 , r 1 , r 2 , , r m } \{\, r_0 , r_1 , r_2 , \cdots , r_m \, \} , 這個序列中的狀態有很多重複的 , 這是自動機的執行序列 , 途徑的狀態 , 所有的狀態都屬於 Q Q ; 這是 自動機 M M 計算過程中的 狀態序列 , 上面的輸入信息時每個狀態序列對應的輸入序列 ; m m 是總共計算的次數 ;


2 . 上述條件滿足如下計算 :


① 自動機起始狀態 : r 0 = q 0 r_0 = q_0 , 自動機 M M 開始時 , 是 q 0 q_0 起始狀態 , 相當於上圖中的 Start 狀態 ; 這也是爲什麼狀態序列比輸入信息序列多一個原因 , 狀態序列開始必須有一個狀態 , 之後每接受一個參數字符 , 就更新一個新的狀態 , 之後就狀態與輸入字符就是一一對應的 ; 最後狀態序列 比 字符序列多一個 ;

② 自動機計算 : 對於 1 = 0 , 1 , , m 1 1 = 0 , 1 , \cdots , m-1 , 有 δ ( r i , w i + 1 ) = r i + 1 \delta(r_i , w_{i+1}) = r_{i+1} , 意思就是 當前是自動機的一個狀態 r i r_i , 輸入一個 w i + 1 w_{i+1} 字符後 , 變成了 r i + 1 r_{i+1} 狀態 ;

③ 最終狀態可接受 : 最終的 r m r_m 狀態必須是可接受狀態 , r m F r_m \in F ;


3 . 自動機組件 :


Q Q 狀態集 : 自動機的有限個狀態 , 其中有可接受狀態 ( 雙圈 ) , 不可接收狀態 ( 單圈 ) ;

Σ \Sigma 字母表 : 有限個字符集 , 如 { 0 , 1 } \{0 ,1\} , 但其輸入可以是 0101 0101 , 也可以是 00111 00111 等字符 ;

δ \delta 轉移函數 : δ \delta 稱爲轉換函數 ; 基於當前的 自動機 的某個狀態 , 將字符集 輸入到自動機中 , 該自動機轉換成另一個狀態 , 這個轉換就是通過 δ \delta 轉換函數進行的 , 使用公式描述 Q × Σ Q Q \times \Sigma \to Q ;

q 0 q_0 起始狀態 : 是開始狀態 ;

F F 接受狀態集 : F F 是 可接受狀態 , 是 Q Q 的子集 , 記做 F Q F \subseteq Q , 與 F F 可接受狀態相對的是不可接受狀態 ;



IV . 自動機 語言 與 等價



1 . 自動機語言 : 確定性有窮自動機 M M , 將自動機 M M 所接受的所有的字符串放在一個集合 A A 中 , 該集合 A A 稱爲自動機 M M 的語言 , 自動機 M M 認識 ( 接受 ) A A 語言 , 記作 L ( M ) = A L(M) = A ;


2 . 自動機等價 : 如果兩個自動機認識相同的語言 , 那麼稱這兩個自動機是等價的 ;



V . 自動機語言 示例



在這裏插入圖片描述

1 . 自動機描述 :


自動機有 5 5 個狀態 ;

S S 是開始狀態 ;

q 1 , r 1 q_1 , r_1 是可接受狀態 ;

q 2 , r 2 q_2 , r_2 是不可接受狀態 ;

自動機語言是 { a , b } \{ a , b \} 字符集 ;


下面開始分析上面 5 5 狀態自動機的語言 ;


2 . 自動機 左側分支分析 :


① 執行流程 : 開始時 , 自動機是 S S 起始狀態 , 當輸入 a a 時 , 自動機狀態變成 q 1 q_1 , 此後不管多少次輸入 a a , 一直處於 q 1 q_1 狀態 , 如果輸入 b b , 那麼就會轉爲 q 2 q_2 狀態 , 如果一直輸入 b b , 自動機一直處於該非接受狀態 q 2 q_2 , 如果輸入 a a , 又回到接受狀態 q 1 q_1 ;

② 左側分支分析總結 : 左側分支 , 主要接受 以 a a 開頭 , 以 a a 結尾的字符串 , 最後才能進入接受狀態 ;


3 . 自動機 右側分支分析 :


① 執行流程 : 開始時 , 自動機是 S S 起始狀態 , 當輸入 b b 時 , 自動機狀態變成 r 1 r_1 , 此後不管多少次輸入 b b , 一直處於 r 1 r_1 狀態 , 如果此時輸入 a a , 那麼就會轉爲 r 2 r_2 狀態 , 此時如果一直輸入 a a , 自動機一直處於該非接受狀態 r 2 r_2 , 如果輸入 b b , 又回到接受狀態 r 1 r_1 ;

② 右側分支分析總結 : 右側分支 , 主要接受 以 b b 開頭 , 以 b b 結尾的字符串 , 最後才能進入接受狀態 ;


4 . 自動機 總體分析 : 自動機 M M 接受相同開頭 和 相同結尾的 字符串 ;


5 . 接受狀態 與 非接受狀態 : 只在計算結束以後纔開始起作用 ;


① 計算過程 : 在計算過程中 , 這兩個狀態沒有區別 , 可以任意轉換 ;

② 最終狀態 : 自動機的 最終的狀態 , 必須判定失接受狀態 還是 非接受狀態 , 如果是非接受狀態 , 說明輸入不對 , 自動機拒絕該輸入 ;