系統程式設計師成長計畫-文字處理(一)狀態機(1)
sunday, june 07th, 2009 | author:
admin |
» edit «
作者****:李先靜
系統程式設計師成長計畫-文字處理(一)
狀態機(1)
o 有窮狀態機的形式定義
有窮狀態機是乙個五元組 (q,σ,δ,q0,f),其中:
q是乙個有窮集合,稱為狀態集。
σ是乙個有窮集合,稱為字母表。
δ: q xςq稱為狀態轉移函式。
q0 是初始狀態。
f 是接受狀態集。
教科書上是這樣定義有窮自動機的,這個形式定義精確的描述了有窮狀態機的含義。但是大部分人(包括我自己)第一次看到它時,反覆的讀上幾遍,仍然不知道它在說什麼。幸好通過一些例項,我們可以很容易明白有窮狀態機的原理。
自動門是乙個典型的有窮狀態機:
它有「開」和「關」兩種狀態,這就是它的狀態集,也就是上面所說的q。
人可以從自動門進來或出去,當人進來或出去的時候,自動門會自動開啟,如果在規定的時間內沒有人進出,自動門會自動關上。人的進來、出去和超時三個 事件是自動門的字母表,也就是上面所說的σ。而自動門在當前狀態下,對事件的響應,會引起狀態的變化,這就是狀態轉換函式,也就是上面所說的δ。
自動門剛安裝好的時候,我們可以認為它是關上的,所以關閉狀態是自動門的初始狀態。
在理想情況下,自動門會一直執行,所以它沒有接受狀態,接受狀態集f是空集。
有窮狀態機的形式定義很精確,文字描述比較通俗,而圖形表示則比較直觀。通用建模語言(uml)裡的狀態圖是狀態機的常用圖形表示方法。簡單的狀態 圖包括一些狀態,用圓角方框表示,裡面有狀態的名稱。狀態之間的轉換,用箭頭表示,上面可以加轉換條件。自動門的狀態機可以用下圖表示:
有窮狀態機很簡單,在生活中可以找出很多這樣的例子。但是教科書裡講得太複雜了,一會兒證明確定性有窮狀態機和非確定性有窮狀態機的等價性,一會兒 證明正規表示式的正則運算是封閉的,一會兒又來個幫浦引理。花了很長時間,我才明白這些原理,但兩年之後,我又把它們忘得一乾二淨。
主要原因是工作中沒有機會運用它們,這些理論的證明於程式設計沒有太大用處,不過狀態機本身卻是文字處理利器,由於程式設計師在很多場合下都是在與文字資料 打交道,所以狀態機是程式設計師必備的工具之一。這裡我們將一起學習如何用狀態機來處理文字資料,後面我們也會提到狀態機的其它用途,不過不是本節的重點。
系統程式設計師成長計畫 文字處理 INI解析器
系統程式設計師成長計畫 文字處理 一 sunday,june 07th,2009 author admin edit 作者 李先靜 系統程式設計師成長計畫 文字處理 一 狀態機 3 o ini解析器 上面我們看了只有中間兩個狀態的狀態機,現在我們來看乙個稍微複雜一點的狀態機。ini檔案是window...
系統程式設計師成長計畫 文字處理 INI解析器
系統程式設計師成長計畫 文字處理 一 sunday,june 07th,2009 author admin edit 作者 李先靜 系統程式設計師成長計畫 文字處理 一 狀態機 3 o ini解析器 上面我們看了只有中間兩個狀態的狀態機,現在我們來看乙個稍微複雜一點的狀態機。ini檔案是window...
系統程式設計師成長計畫005
1.這個變成大寫的函式,就不需要用函式指標來給foreach做引數了。因為他沒有什麼其他變種,不像print那樣,既要print int又要print str。函式指標,或者說 函式,別瞎用!2.書裡的寫法 dlist foreach dlist,str toupper,null 看來還是堅持了 函...