【概述】
有限狀態機(有時稱為有限狀態自動機)是一種可以用硬件或軟件實現的計算模型,可以用來模擬順序邏輯和某些計算機程序。
有限狀態自動機生成常規語言。它可用於對許多領域的問題進行建模,包括數學,人工智能,游戲和語言學。
【米里狀態機 Mealy State Machine】
順序系統,其中輸出取決於當前輸入和狀態
有限狀態機(FSM)對正則表達式提供了不同的觀點,一個FSM描述了一個正則表達式的行為,每個FSM由以下5個元組成
Q: 有限的狀態集 a finite set of states
Σ: 有限的字母集 a finite alphabet set 針對某些狀態采用的action
δ: Q X Σ → Q: 轉換函數/映射函數 一組從狀態和輸入到狀態的映射 transition function -a set of maps from states and inputs into states 在某個狀態下采用某個action而得到新狀態的轉化
q0: 初始狀態 an initial state (q0 ∈Q)
F: 一組最終/接受狀態a set of final/accepting states (F ⊆Q)
每個FSM可能有不同的狀態集、字母集、映射函數、初始與最終狀態,針對不同的情況,我們會有不同的FSM的設計(不同問題,不同設計)
FSM是抽象機,在任何給定時間只能處於有限數量的狀態(Q)之一。
FSM可以響應某些外部輸入而從一種狀態轉換為另一種狀態
【狀態 States】
狀態集通常描述機器的當前狀態。機器的當前狀態通常取決於機器的先前狀態,總有如下兩種特殊狀態
1.起始狀態 Start State : FSM始終在此狀態下開始。起始狀態通常用箭頭“從任何地方指向它”表示。一般會在它的圓圈上加上三角形來表示它
2.完成狀態 Finish State(s) : 如果要識別該語言,則FSM必須在此狀態(或其中一種狀態)下完成。完成狀態是機器報告接受輸入的狀態。接受狀態通常用雙圓圈表示
所有其他狀態都被視為中間狀態。通常使用qx表示狀態,其中x是某個數字
【字母與轉換函數 Alphabet & Transition Functions】
字母表 Alphabet :字母描述了機器可接受的輸入
轉換函數 Transition Functions :任何狀態和字母符號的轉換函數都是要轉換成的一個或多個下一個狀態,轉換由上方帶有字母符號的箭頭表示
例子:比如現在有q0,q1,q2,q3三種狀態,其中q0是初始狀態(圓圈+三角形)、q3是最終狀態(雙圓圈),它們之間有a、b兩種轉化方式(箭頭表示轉化)
比如我們在q0的狀態接受到了a,那么便會轉換到q1
狀態集是:{q0,q1,q2,q3}
字母集是:{a,b}
【轉換表 Transition Table】
一個FSM可以用一個表來表示。這個表將包含狀態、字母和轉換,例如上面的例子,我們可以用下圖來表示
【詞典順序 Lexicographical Ordering】
當枚舉字母表中所有可能的字符串時,我們以字典順序顯示它們。
這意味着首先列出較短的字符串,而對於長度相同的字符串,則以字母alphabetical或數字numerical順序表示
比如給定一個字母表 Σ= {𝑎,𝑏},列出L中所有長度小於四的字符串,其中L是所有可能的由Σ= {𝑎,𝑏}組成的字符串,即含有x個a,y個b的字符串
L={⋋, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb} ,其中⋋表示空字符串,其它字符串均以上文提及的順序排列
給定一個字母Σ= {𝑎,𝑏},列出L中所有長度小於5的字符串,其中L是所有以b開頭並以b結尾的字符串。一些有效的單詞是:bb,bab,bbb,baab,..
FSM的所有可接受的字符串應按字典順序排序!
【JFLAP】
JFLAP是允許我們對FSM的操作進行建模的工具。
可以從這里下載JFLAP: http://www.cs.duke.edu/csed/jflap/
這個例子中,只有兩個狀態。從初始狀態q0輸入x就會轉換為最終狀態q1
這個例子中,我們從初始狀態q0輸入x達到狀態q1,之后持續輸入x將在q1中循環接收
這個例子中,我們從初始狀態q0輸入x達到狀態q2,之后持續輸入x將在q1和q2中循環接收。這種情況下它只能接受偶數個個數的字符串
此時,因為q1q2的存在,q1接收x到q2,而q2再次接受x才會轉化到q1(q1是最終狀態),因此接收的x一定是偶數個
分析FSM后,您應該會看到僅接受x的偶數。我們從狀態q0開始,並在得到x的輸入時轉換到狀態q2。如果我們得到另一個x,我們將轉換為狀態q1。 q1是接受狀態–當前單詞在該語言中是否是有效單詞?是的-因為該單詞由兩個x組成,即xx。如果再得到一個x或另外兩個x或更多x,會發生什么情況? q1是接受狀態,只有x的個數為偶數才能達到。
【確定性有限狀態自動機(DFA) Deterministic Finite State Automata(DFA)】
確定性有限自動機(DFA)是一種FSM,在狀態下每個標簽僅具有一個過渡
請注意,每個狀態只有一個字母符號用於作離開狀態的一個過渡
當我們處於某個狀態時,一個符號對應一個下狀態(每種狀態接收到字母之后,下一個狀態是確定性。不會出現在q1輸入x,可能去q2,也可能q3的情況)
上圖用表表示即:
【非確定性有限自動機 Non-deterministic Finite Automata 】
了解了DFA之后,就可以用一張圖來解釋這種狀態機了
非確定性有限自動機(NFA)允許在多個狀態下使用相同字母進行多次轉換,這對應於狀態轉換表中單元中的兩個(或多個)條目,它不是確定性的,因為下一個狀態可以是許多可能狀態中的任何一個。
【NFA和DFA的關系】
也就是說,對於任何NFA,我們都可以構建等效的DFA,反之亦然
雖然DFA和NFA有不同的定義,但可以證明它們是等同的。我們甚至可以在它們之間進行轉換,但不是直接轉化。
NFA和DFA都只承認正則語言
【練習和判斷】
確定語言的方法是:
1.從開始狀態開始,並按照圖表進行操作,直到達到接受狀態(一般就是最終狀態)
2.以字典順序列出在此狀態下接受的字符串
【有限狀態機的優勢 Advantages of Finite State Machine】
1.靈活 Finite state machines are flexible
2.可以更簡單的把抽象的工作,轉化為具體代碼的執行 Easy to move from a significant abstract to a code execution
3.處理器開銷低 Low processor overhead
4.輕松確定狀態的可達性 Easy determination of reachability of a state
【有限狀態機的缺點 Disadvantages of Finite State Machine】
1.確定性不一定會被需要 The expected character of deterministic finite state machines can be not needed in some areas like computer games
2.如果沒有任何設計思路,使用FSM實施大型系統很難進行管理,難以維護 The implementation of huge systems using FSM is hard for managing without any idea of design
3.不適用於所有領域 Not applicable for all domains
4.狀態轉換的順序是不靈活的 The orders of state conversions are inflexible.