確定型有限自動機(DFA)

確定型有限自動機(deterministic finite automaton)

確定型有限自動機,簡稱 DFA,是計算理論中最簡單的真實機器,也是你接觸的第一部真正的自動機。再想想旋轉柵門或自動販賣機:它一次讀一個符號,全部記憶就只有一個狀態,而對任何「狀態加符號」的組合,它接下來該做的事都恰好只有一件。「確定型(deterministic)」這個詞保證永遠沒有選擇、沒有模稜兩可:給定你在哪裡、剛讀到什麼,下一個狀態就被完全決定了。

DFA 的執行方式如下。它從一個指定的起始狀態開始,由左到右讀入輸入字串;每讀一個符號,就沿著「目前狀態」與「該符號」對應的那條唯一箭頭走到新狀態。當輸入讀完時,它檢視自己最後停在哪個狀態。如果那個最終狀態屬於被標記的接受狀態,DFA 就接受這個字串;否則就拒絕。所以 DFA 本質上是個是/否的判定器:其字母表上的每個字串都恰好得到一個裁決。

DFA 的重要性遠遠超出玩具範圍。它是編譯器詞法分析階段(辨識關鍵字與數字)背後的引擎,是搜尋取代與許多正規表示式比對器背後的引擎,也是通訊協定與硬體控制器背後的引擎。它同時是探問「有限記憶能做什麼、不能做什麼」最乾淨的模型,正因如此,一整套理論——正規語言、幫浦引理、最小化——都建立在它之上。

在字母表 {0,1} 上、恰好接受以 1 結尾之字串的 DFA:兩個狀態,A(上一個符號不是 1,或為空)與 B(上一個符號是 1)。從 A 開始。讀到 1 走到 B;讀到 0 走到 A。B 是唯一的接受狀態。對 1101 執行:A->B->B->A->B,停在 B,接受。對 110 執行:A->B->B->A,停在 A,拒絕。

兩個狀態就足以記住「上一個符號是不是 1?」這唯一一件事。

DFA 的能力與非確定型有限自動機完全相同——它們辨識的語言一模一樣。確定型講的是「下一步是否唯一」,而不是「能辨識什麼」。

又称
DFAdeterministic finite-state machine決定性有限自動機DFA