文章目錄
- 1.1.1有限自動機導論
- 1.1.2結構化標記法
- 1.1.3自動機和複雜性
1.1為什麼要研究狀態機器(自動機)理論?
在電腦科學內重要的核心內容中,有若干種原因需要我們研究狀態機器理論及其複雜性。該節主要是向讀者展示理論研究動機及在本書當中的一些主要話題及一些輪廓。
1.1.1有限自動機導論
對於大部分的硬體或者軟體來說,有限自動機都是一種非常有效模型。我們將會從第二章開始討論它,將會展示一些概念的應用。這裡我們會列出比較重要的幾種應用:
1.設計及校正數字電路軟體
2.典型編譯器的詞法分析器,也就是該編譯器組件可以將輸入的文本分割成邏輯單元,如標識符,關鍵字及標點符號等
3.大型文本掃描軟體,例如網頁搜尋,如找到單詞的出現次數,片語,及一些文字模式等
4.系統校正軟體,這類軟體通常具有有限個不同狀態,如通訊協議或者安全資訊交換系統。
在此,我們將會給出滿足各種應用的自動機的一個精確定義,在正式的介紹之前首先給出什麼是有限自動機及它能做什麼。大部分的系統或者系統組件,即如上文所示的系統都可以看成有限數量的狀態構成的。狀態的目的是標記系統曆史資訊的相關部分。由於狀態數是有限的,在通常的情況下,系統的曆史資訊很難被記錄所以系統必須被仔細的設計才能關注那些重要的資訊而忽略那些不重要的資訊。這種通過使用有限個狀態的優勢是我們能通過一種固定的資源即能實現特定的系統需求,如使用硬體電子迴路或者一個簡單的軟體試算表。即它們可以通過有限的資料進行決策或者使用其在代碼當中的位置進行自主決策。
例1.1:或許最簡單常見的有限自動機是一個帶有”開/閉”功能的開關,該裝置能記住它自己是處於開狀態還是處於關狀態,並且允許使用者通過按按鈕來改變它的狀態,其最終效果往往由開關的目前狀態決定。也就是說當開關處於開狀態時,則按下按鈕將會使其處於關狀態,而開關處於關狀態時,按下按鈕則會使其處於開狀態。
開關的有限自動機模型1.1所示,正如所有的有限自動機模型那樣,狀態用圓來表示。在這個例子中我們把狀態稱之為on/off,狀態之間的圓弧表示輸入。輸入代表的是對系統的外部影響,這裡兩個輸入圓弧用push標記,代表使用者按下了這個按鈕。兩個圓弧的目的是說明,當push輸入被接受的時候,開關就切換到另外的狀態。
其中的一個狀態被設計為”start”狀態,該狀態是系統起始狀態,在我們的例子中,起始狀態是off,習慣上我們通過單詞start和指向某一方向的箭頭來表示開始狀態。
通常情況下,還會有更多個”終態”或稱為”接受態”。例如在圖1.1當中的狀態即為終態,因為在該狀態下,由開關控制的裝置是可操作的。通常用一個雙圓表示一個終態,圖1.1當中我們並沒有做特殊的標明。
例1.2通常情況下,能夠通過狀態進行表示的系統,都要比”on/off”這類選項複雜的多。圖1.2展示了另外一種有限自動機。該自動機可以構成詞法分析器的一部分,這個自動機的目的是識別出關鍵詞”then”,因而它需要5個狀態,每一個狀態都表示當前達到的單詞then當中的位置。這些位置與單詞當中的首碼相對應,從Null 字元直到完整的單詞。
在圖1.2中,5個狀態分別以當前看到的then的首碼來命名,輸入序列對應相應的字元序列。我們可以把它想象成詞法分析器在編譯時間刻一次檢驗程式的一個字元的過程,即下一個自動機輸入需要檢測的字元。開始狀態對應的是Null 字元串,並且每一個狀態通過then的下一個字元轉換成具有更多then首碼的狀態。Then狀態是指最終完全拼字出了then的狀態,由於該自動機的目的就是識別出關鍵字then。所以我們認為該狀態既是該自動機的最終狀態。
1.1.2結構化標記法
這裡有兩個重要的不像自動機的表示方法,但是這些方法在自動機及其應用當中起著很重要的作用。
文法在處理具有遞迴結構的軟體設計當中是一種很好用的模型。最典型的例子就是編譯器當中的”解析器”。其功能是處理具有遞迴的嵌套定義的程式設計語言,如算術運算式,條件陳述式等。比如,一個像Ε?Ε+Ε的文法規則表示一個運算式可以通過一個加號串連另外兩個運算式所組成,這種方式是對典型的真實程式設計語言運算式形式的描述。通常我們把這種文法稱為上下文無關文法,將在第五章進行介紹。
Regex表示的是資料的結構,尤其善於表達文本字串的結構。正如將在第三章看到的,它所描述的字串的模式和有限自動機所描述的相一致。這些表示方法的風格與文法的表示方法是截然不同的。這裡我們展示一個非常簡單的例子,在類UNIX系統中的Regex”[A-Z][a-z]*[ ][A-Z][a-z]”表示首都的單詞,及跟隨一個空格,及首都的兩個字母。該運算式表示的模式是一個城市和一個州的名字。如Ithaua NY.該模式不包含那些更多個單詞的城市如Polo Alto CA即更複雜運算式構成的城市名,它的模式應當是這樣的”([A-Z][a-z]*[ ] )*[ ][A-Z][a-z]”,當解釋這些運算式時,我們僅需要知道”[A-Z]”代表的是從字元”A”到”Z”之間的所有大寫字母,而”[ ]”代表的是一個空白字元,而字元”*”代表的是任何數量的前面的運算式,從而用於重複的表示模式。
1.1.3自動機和複雜性
自動機是計算限制條件研究的本質。正如我們在介紹當中所提到的,它有兩個重要的因素:
1.電腦到底能做什嗎?這種研究被稱為可判定性研究。這一類能夠被電腦解決的問題被稱為”判定”,將在第9章描述。
2.電腦能夠有效地做什嗎?通常稱為棘手問題,這類問題需要隨著其輸入規模的增長能夠在常量時間以內被解決,通常這類問題規模的增長會比任何其它多項因子方式增長的快,這類問題在第十章進行研究。