来自维基百科,自由的百科全书
在計算理論中,確定有限狀態自動機或確定有限自動機(英語:deterministic finite automaton, DFA)是一個能實現狀態轉移的自動機。對於一個給定的屬於該自動機的狀態和一個屬於該自動機字母表的字元,它都能根據事先給定的轉移函式轉移到下一個狀態(這個狀態可以是先前那個狀態)。
確定有限狀態自動機是由
所組成的5-元組。因此一個DFA可以寫成這樣的形式:。
確定有限狀態自動機從起始狀態開始,一個字元接一個字元地讀入一個字串(這裡的指示Kleene星號算子。),並根據給定的轉移函式一步一步地轉移至下一個狀態。在讀完該字串後,如果該自動機停在一個屬於F的接受狀態,那麼它就接受該字串,反之則拒絕該字串。
為了在保證嚴謹的前提下,方便地敘述關於DFA的內容,我們定義如下擴充的轉移函式:
對於一個確定有限狀態自動機,如果,我們就說該自動機接受字串w,反之則表明該自動機拒絕字串w。
被一個確定有限自動機接受的語言(或者叫「被辨識的語言」)定義為:接受字串,也就是由所有被接受的字串組成的集合。
除了數學上的嚴謹表述,通常為了討論方便,也使用狀態圖直觀地表示DFA。不難發現,對於一個給定的DFA,存在唯一一個對應的有向圖(但是嚴格意義上一個有向圖不能確定出唯一一個DFA)。有向圖的每個結點對應一個狀態,每條有向邊對應一種轉移。習慣上將結點畫成兩個圈表示接受狀態,一個圈表示拒絕狀態。用一條沒有起點的邊指向起始狀態。
除了在表述上方便以外,在研究某些問題(如「給定的DFA的語言是否為無窮集合」)時,狀態圖也提供了有效的解法。
DFA是一種實際的計算模型,因為有平凡的線性時間、恆定空間的線上演算法類比在輸入流上的DFA。給定兩個DFA有有效演算法找到辨識它們所辨識語言的併集、交集和補集的DFA。還有有效演算法確定一個DFA是否接受任何給定字串,一個DFA是否接受所有字串,兩個DFA是否辨識同樣的語言,和對特定正規語言找到狀態數目最小的DFA(最小DFA)。
在另一方面,DFA在可辨識的語言上有嚴格的限制—很多簡單的語言,包括需要多於恆定空間來解決的任何問題,不能被DFA辨識。經典的DFA不能辨識的簡單語言的例子是括號語言,就是由正確配對的括號組成的語言,比如 (()())。由形如anbn的字串組成的語言,就是有限數目個a,隨後是相等數目個b。可以證明沒有DFA有足夠狀態來辨識這種語言(通俗地說,因為需要至少2n個狀態,而n是不恆定的)。
下面是一個確定有限狀態自動機的例子。
確定有限狀態自動機
S1 | S2 | S1 |
S2 | S1 | S2 |
狀態表示在輸入的字串中有偶數個0,而表示有奇數個0。在輸入中1不改變自動機的狀態。當讀完輸入的字串的時候,狀態將顯示輸入的字串是否包含偶數個0。
能辨識的語言是。用正規表示式表示為:。
確定有限狀態自動機的交,並,差,補,連接,替換,同態,逆同態等運算是封閉的,也就是說確定有限狀態自動機通過這些運算產生的新的自動機也是確定有限狀態自動機。
是一個DFA,那麼由補運算產生的新DFA定義為:。顯然只要將中接受的狀態設為不接受的狀態,同時把不接受的狀態設為接受的狀態就得到。補運算的複雜度是:。
有兩個DFA,和,那麼由這兩個DFA創造出來的新的自動機定義為:。其中,為的開始狀態,為的轉移函式,且作如下定義:。
交運算和並運算的複雜度都是。
一個同態函式可以遞迴的定義為:
於是則有。(以上所述中為空字元,)
此外替換運算和逆同態運算的方法近似。
對於一個正規語言,接受該語言的等價類自動機是一個的5-元組。其定義如下:
~L被稱為Nerode關係,是Myhill-Nerode定理的基礎。簡單的來說就是對於任意,如果,那麼x~Ly。
對於任意給定的確定有限狀態自動機都能找到一個與之計算能力等價的最小確定有限狀態自動機,簡稱最小自動機。該最小自動機中狀態的數量等於能辨識相同語言的等價類自動機中等價關係的數量,我們可以稱最小自動機和等價類自動機「實際上」是相等的,也就是同構。非正式的說法是:對於最小自動機上的任意狀態都可以通過一個同構函式變換成等價類自動機上的一個狀態。
能辨識一個正規語言的等價類自動機是唯一的,因此能辨識該語言的最小自動機也是唯一的。
定義一個非等價關係:,如下步驟可以得到這個集合N:
以下是由一個任意DFA轉換到一個最小DFA的步驟:
這樣就得到了接受相同語言的最小自動機。複雜度為。
Seamless Wikipedia browsing. On steroids.