有限狀態機的實現

2021-03-31 23:03:04 字數 692 閱讀 4536

有限狀態機(finite state machine或者finite state automata)是軟體領域中一種重要的工具,很多東西的模型實際上就是有限狀態機。

最近看了一些遊戲程式設計ai的材料,感覺遊戲中的ai,第一要說的就是有限狀態機來實現精靈的ai,然後才是a*尋路,其他學術界討論比較多的神經網路、模糊控制等問題還不是很熱。

f**的實現方式:

1) switch/case或者if/else

這無意是最直觀的方式,使用一堆條件判斷,會程式設計的人都可以做到,對簡單小巧的狀態機來說最合適,但是毫無疑問,這樣的方式比較原始,對龐大的狀態機難以維護。

2) 狀態表

維護乙個二維狀態表,橫座標表示當前狀態,縱座標表示輸入,表中乙個元素儲存下乙個狀態和對應的操作。這一招易於維護,但是執行時間和儲存空間的代價較大。

3) 使用state pattern

4) 使用巨集定義描述狀態機

一般來說,c++程式設計中應該避免使用#define,但是這主要是因為如果用巨集來定義函式的話,很容易產生這樣那樣的問題,但是巧妙的使用,還是能夠產生奇妙的效果。mfc就是使用巨集定義來實現大的架構的。

在實現f**的時候,可以把一些繁瑣無比的if/else還有花括號的組合放在巨集中,這樣,在**中可以3)中狀態機描述文字一樣寫,通過編譯器的預編譯處理產生1)一樣的效果,我見過產生c**的巨集,如果要產生c++**,己軟mfc可以,那麼理論上也是可行的。

有限狀態機

有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...

有限狀態機

以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...

有限狀態機

需要掌握的名詞 數字系統有兩大類有限狀態機 finite state machine,fsm moore狀態機和mealy狀態機。狀態機名 次態輸出 moore摩爾 f 現狀,輸入 g 現狀 mealy公尺粒 f 現狀,輸入 g 現狀,輸入 mealy型狀態機 下一狀態不但與當前狀態有關,還與當前輸...