什么是狀態機(轉)


看資料的時候總是出現狀態機這個名詞,大概明白是什么意思,但是一直沒有去調查過,搜到知乎上一個人的回答蠻好的:狀態機概念里,我認為最值得注意的是狀態機的本質是“狀態機是一個對真實世界的抽象,而且是邏輯嚴謹的數學抽象”,以及狀態機的4大概念:state, event, action, transition

定義

我們先來給出狀態機的基本定義。一句話:

狀態機是有限狀態自動機的簡稱,是現實事物運行規則抽象而成的一個數學模型。

先來解釋什么是“狀態”( State )。現實事物是有不同狀態的,例如一個自動門,就有 open 和 closed 兩種狀態。我們通常所說的狀態機是有限狀態機,也就是被描述的事物的狀態的數量是有限個,例如自動門的狀態就是兩個 open 和 closed 。

狀態機,也就是 State Machine ,不是指一台實際機器,而是指一個數學模型。說白了,一般就是指一張狀態轉換圖。例如,根據自動門的運行規則,我們可以抽象出下面這么一個圖。

 

 

自動門有兩個狀態,open 和 closed ,closed 狀態下,如果讀取開門信號,那么狀態就會切換為 open 。open 狀態下如果讀取關門信號,狀態就會切換為 closed 。

狀態機的全稱是有限狀態自動機,自動兩個字也是包含重要含義的。給定一個狀態機,同時給定它的當前狀態以及輸入,那么輸出狀態時可以明確的運算出來的。例如對於自動門,給定初始狀態 closed ,給定輸入“開門”,那么下一個狀態時可以運算出來的。

這樣狀態機的基本定義我們就介紹完畢了。重復一下:狀態機是有限狀態自動機的簡稱,是現實事物運行規則抽象而成的一個數學模型。

四大概念

下面來給出狀態機的四大概念。

第一個是 State ,狀態。一個狀態機至少要包含兩個狀態。例如上面自動門的例子,有 open 和 closed 兩個狀態。

第二個是 Event ,事件。事件就是執行某個操作的觸發條件或者口令。對於自動門,“按下開門按鈕”就是一個事件。

第三個是 Action ,動作。事件發生以后要執行動作。例如事件是“按開門按鈕”,動作是“開門”。編程的時候,一個 Action 一般就對應一個函數。

第四個是 Transition ,變換。也就是從一個狀態變化為另一個狀態。例如“開門過程”就是一個變換。

上面這四大概念,在使用狀態機思想來寫程序時候經常用到,參考  。

應用

最后再來說說狀態機的應用。狀態機是一個對真實世界的抽象,而且是邏輯嚴謹的數學抽象,所以明顯非常適合用在數字領域。可以應用到各個層面上,例如硬件設計,編譯器設計,以及編程實現各種具體業務邏輯的時候。

來舉個例子。街上的自動售貨機中明顯能看到狀態機邏輯。我們做一下簡化,假設這是一台只賣2元一瓶的汽水的售貨機,只接受五毛和一塊的硬幣。初始狀態是”未付款“,中間狀態有”已付款5毛“,”已付款1塊“,”已付款1.5塊“,”已足額付款“,四個狀態。狀態切換的觸發條件是”投一塊硬幣“和”投5毛硬幣“兩種,”到達足額付款“狀態,還要進行余額清零和彈出汽水操作。所以如果畫出一張完整的狀態轉換圖,也會是比較復雜的一張圖了。而實際中的售貨機對應的狀態機就會更加復雜了。

總之,狀態機應用范圍很廣,這里就不展開了。插一句,跟狀態機類似的概念還有圖靈機,圖靈機就是計算機底層采用的計算模型。

總結

這就是對狀態機概念的一個通俗的簡述了。總結一下,狀態機不是實際機器設備,而是一個數學模型,通常體現為一個狀態轉換圖。涉及到的相關概念是 State 狀態,Event 事件,Action 動作,Transition 轉換。狀態機是計算機科學的重要基礎概念之一,也可以說是一種總結歸納問題的思想,應用范圍非常廣泛。

 

轉自: https://zhuanlan.zhihu.com/p/47434856


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM