Transcript Chapter 5

Chapter 12
機器模型
12.2 自動機與形式語言
12.3 杜林機
12.4 相關議題
12.4.1 議題一:有限自動機的應用
12.4.2 議題二:停止問題是不可決定的
12.2 迴圈與中國郵差問題
範例 1
什麼是電腦的結構(Architecture)?
馮諾曼(Von Neumam)機器模型,圖 12.2.1 為其示意圖。
CPU
MM
CU
PD
圖 12.2.1
馮諾曼機器模型
 CPU:中央處理單元(Central Processing Unit)。
 MM:主記憶體(Main Memory)。除了 RAM 以外,也儲存常駐程
式單元(Stored Program Unit)。
 CU:控制單元(Control Unit)。例如,可控制 CPU 和輸出入裝置
同時維持運作。
 PD:週邊設備(Peripheral Device)。
範例 2 本節要談的是那一種自動機模型?
依計算能力而分,分成四類:
 有限狀態機(Finite State Automata):簡稱為 FA
 下推自動機(Pushdown Automata):簡稱為 PA
 線性有限自動機(Linear Bounded Automata):簡稱為 LBA
 杜林機:簡稱為 TM
範例 3
何謂 FA?
我們常用 (S , S0 , S f , , T ) 代表 FA,這五個變數的定義為:
S
:狀態集(Set of States)
S0 :起始狀態(Initial State)
S f :最終狀態(Final State)
 :字母集(Alphabet Set)
T :轉換函數(Transition Function)
範例 4
可否舉一個 FA 的例子?
0
1
1
S0
圖 12.2.2
S1
一個 FA 例子
狀態 S0 旁邊加一個>以表示 FA 由這裡起動。
S  {S 0 , S1}
  {0,1}
T ( S 0 ,0)  S 0
T ( S 0 ,1)  S1
T ( S1 ,1)  S1
其可接受字串 1、01、11、011、001、111、…等。
FA 能接受的語言(Language)了。我們記為 L(FA)。
L (FA )  0 *11*
 0 *1
其中 0 * 代表符號 0 出現的個數需大於等於 0,而 1 代表符號 1 出現的個
數需大於等於 1。例如: 0*  { ,0,00,000,} 和 1  {1,11,111,} 。
在上述的 FA 例子中,某一個狀態接受一個輸入後只能轉換到另一個狀
態。這一類的 FA 也稱作可決定式(Deterministic)FA,簡稱為 DFA。
範例 4.1
請描述下列有限狀態機能夠認知的語言。
假設輸出 1 時表示接受此字串. 依據題目之有限狀態機可知其可
接受 (認知) 任何字串中有連續三個或以上的 1 之字串.
範例 4.3
請畫一個能夠認知由 baa 起頭的字串的自動狀態機佈於
{a, b} 上.
令 S  {s0 , s1 , s2 , s3 , s4} 和 I  {0, 1} , 其中 s0 為起始狀態且 s3 為
接受狀態, 則此自動狀態機可如下圖所示:
。
範例 5
是否也有 NFA(Nondeterministic FA)?
若存在某一個狀態在接受到一個輸入後,可轉換到一個以上的狀態
時,就稱為 NFA。例如:圖 12.2.3 就是一個 NFA 的例子,這裡,符
號  代表 FA 即使沒有讀到任何符號也會從狀態 S0 轉換到狀態
S f  S1 。
0
S0

1
1
S1
0
圖 12.2.3
一個 NFA 例子
圖 12.2.3 可接受的語言為
L( NFA)  0* (1  0)1*  0*1*
 0*1  0 1*  0*1*
在 NFA 中,由於一個狀態在讀入一個輸入後,會進到一個以上的狀態,這種機
器有很強的猜測(Guess)能力。
NFA 在設計上要比 DFA 有更大的彈性。
範例 6
如何將 NFA 轉換成 DFA?
利用到封閉性(Closure)的特性。例如 Q5 中的 NFA 的各狀態讀入一
符號後之封閉性可表示於圖 12.2.4 中。
0
1
S0
[ S0 , S1 ]
[ S1 ]
S1

[ S1 ]
圖 12.2.4
圖 12.2.3 的封密性示意圖
將 [S 0 , S1 ] 編 成 新 的 符 號 S0 , 而 將 [ S1 ] 編 成 符 號 S1 。 為 什 麼
T (S 0 ,0)  {S 0 , S1} 呢?讀者可將 S0  [S0 , S1 ] 想像成一個新的狀態符
號。
根據圖 12.2.4,Q5 中的 NFA 可轉換成圖 12.2.5 的
DFA。
0
1
1
S0
圖 12.2.5
S1
圖 12.2.3 轉換後的 DFA
上述圖中所示的 DFA 可接受的語言可表示為
L(DFA)  0*  0*1
 0*1*
範例 7
不知 Q5 中的 L( NFA) 是否相等於 Q6 中的 L(DFA) ?
初看之下,似乎 L( NFA)  0*1  01*  0*1* 和 L(DFA)  0*1* 是不同的。
L( NFA)  0*1  0 1*  0*1*
 0*1  (0   0* )1*
 0*1  0*1*
 0* (1  1* )
 0*1*
由式(12.2.1)的推演,可得
L( NFA)  L(DFA)
也就是說 Q5 中的 L( NFA) 和 Q6 中的 L(DFA) 是相等的。
(12.2.1)
範例 8
到底 DFA 可接受的語言為何呢?
正規表達式(Regular Expression),我們以 RE 稱之。定義如下:
 RE 可以是空字母,ε。
 在 DFA 中的字母集 Σ 內,若 t  Σ,則 t 亦為 RE。
 若 x 為 RE 且 y 亦為 RE,則(x+y)和(xy)也是 RE。
*
*
 若 x 為 RE 且 y 亦為 RE,則 x 和 y 也是 RE。
S fx
S 0x
(a) NFAx
S 0y
S fy
(b) NFAy
圖 12.2.6
NFAx 和 NFAy

S 0x
S fx

S 0y
S fy
S0
(a) NFA(x+y)
S 0x
S xf

(b) NFA(xy)
S 0y
S fy

S fx
S 0x

(c) NFAx*
圖 12.2.7
NFA( x y ) 、 NFA ( xy ) 和 NFAx
*
範例 8.1
使用正規表示法表達下列自動狀態機所能接受的字串
令 A  1 , B  101 (0  1)* , C  01 (0  1) , 則所求為 A  B  C .
範例 9
能被 FA 接受的語言,其所對應的文法型式為何?
FA 所對應的文法也稱作第三類型(Type 3)文法,此類型的文法 G 定義如
下:
G  ( N , T , P, S )
N  { A, B}
T  {a}
S  { A}
P:A  a
A  aB | Ba
N: 非終結符號集(Nonterminal Symbols)。
T: 終結符號集(Terminal Symbols)。
S: 起始符號(Start Symbol)。
P: 產生規則集(Production Rules)。
我們以 Q4 中的圖 12.2.2 之 FA 為例,已知 L(FA)  0*1 。按照 FA 所對應的第三類
型文法,對應文法如下:
G  ( N , T , P, S )
N  { A, B, C}
T  {0,1}
S  { A}
P:A  1B
A  0C
B 
B  1B
C  0C
C  1B
C 1
若給一字串 0011,依照文法的推演(Derivation),我們得到
A  0C
 00C
 001B
 0011B
 0011
從前面幾個 FA 的例子,我們不免好奇 FA 的能力之限制。
範例 9.1
能 找出一個詞組結構 (Phrase-Structure) 的文法去生成集合
{0m1mn0n | m  0, n  0} . 注 意 一 個 詞 組 結 構 的 文 法
G  (V , T , S , P) 包含一個詞彙集合 V, 一個 V 的子集合 T 包
含終端符號, 一個屬於 V 的開始符號 S, 以及一個集合 P 包含
生成規則.
令所求為
其中
G  (V , T , S , P)
V  {S , A, B, 0, 1}
T  {0, 1}
SS
P  {S  AB, A  0 A1, A  , B  1B0, B  }
T:終結符號集(Terminal Symbols)。
S: 起始符號(Start Symbol)。
P: 產生規則集(Production Rules)。
範例 10 FA 能否唯一接受 L  {0 1
n n
| n  1} ?
FA 因為沒有記憶的功能。
這裡,採用鴿籠定理來證明 FA 是無法唯一接受 L  {0n1n | n  1} 的。
因為 FA 的狀態數是有限的,我們可以假設 FA 的狀態數為 S  k ,k
為一個定數。反觀 L 中的 n, n  1 ,可看成無限大的數。假設 FA 的
k 個狀態為 S0 、 S 1 …和 S k 1 且 n  k 。當 FA 處理完 0 n 時,鴿籠定理
告訴我們:在 FA 的 k 個狀態中,必有兩個狀態, S i 和 S j ,會呈現
圖 12.2.8 的迴圈組態(Configuration)。
0
Si
0
圖 12.2.8
...
狀態
0
Sj
Si 被拜訪二次
這 時 , 若 0 n1n 能 唯 一 被 假 設 中 的 FA 接 受 的 話 , 則 意 謂 著
0n( j i1)1n  0n j i 11n 也會被 FA 接受。這和假設是衝突的。
範例 11
在 Q10 中曾證明了 FA 能力的有限性,如何設計一能力更強大
的自動機能唯一接受 L  {0n1n | n  1} ?
設計一種帶有記憶裝置的 FA。我們在 FA 旁增加一個堆疊(Stack)
的裝置,這種改良式 FA 被稱為下推自動機(Pushdown Automata,
PA),如圖 12.2.9 所示。
0
1
0
0
1
1
磁帶
...
.
.
.
狀態
控制器
0
1
0
圖 12.2.9
PA
堆疊
PA 中的堆疊可用來當記憶器用。例如,當讀完 0 n 時,PA 使用了 n
次 PUSH 的運算,這時堆疊中擺了 n 個 0。而後,每讀一個 1,PA
就對堆疊進行一次 POP 的運算,也就是拿走一個 0。PA 的確能唯一
接受 L  {0 n1n | n  1} 。
範例 12 如何用數學的符號表示 PA?
PA 可表示成 (S , S0 , S f , ,T , ) ,但是轉換函數 T  被定義如下:
*
T :S  *    S  
 代表可寫入堆疊的符號集。
*
範例 13 可否寫一文法以辨識 L  {0 1
n n
| n  1} ?
G  ( N , T , P, S )
N  {S }
T  {0,1,  }
S  {S }
P: S  0 S1
S 
上面的文法稱為語境自由文法(Context-Free Grammar, CFG)。CFG 中的
產生規則 P:A   需滿足 A  N 和   ( N  T )* 。CFG 所定的文法規
則也稱作第二類型(Type 2)的文法。
範例 14 在形式語言中,文法共有幾種類型?
 第一類型(Type 1):產生規則需滿足

 
這裡  ,   (T  N )* ,但  的長度需大於等於  的長度。
 第零類型(Type 0):產生規則需滿足
 
 
這裡  和  無特別限制。除了    和  ,   (T  N )* 外。
第一類型的文法也叫語境限定文法(Context-Sensitive Grammar,
CSG) , 而 第 零 類 型 的 文 法 也 叫 非 限 制 型 文 法 (Unrestricted
Grammar, UG)。
第三類型
第二類型
第一類型
第零類型
圖 12.2.10
四種文法類型的 Chomsky 階層圖
範例 15 Q14
中所提及的四種文法類型與對應的機器模型可否條列一
下?
RG
↔ 第三類型文法
↔ FA
CFG
↔
第二類型文法
↔ PA
CSG
↔
第一類型文法
↔ LBA
UG
↔
第零類型文法
↔ TM
這裡,LBA 代表 Linear Bounded Automata,而 TM 代表杜林機(Turing
Machine)。
12.3 杜林機
目前電腦界最崇高的一項學術獎項就是為紀念這位四十多歲死於獄中的杜
林而設的杜林獎。在 2000 年時,普林斯頓大學電腦系的姚棋智教授獲此殊榮,
實為華人至高的光榮。
範例 1
何謂杜林機?
☆ c
b
b
c
a
...
讀寫頭
狀態控制器
圖 12.3.1
杜林機
磁帶
我們可如下定義杜林機:
TM  (S , S0 , S h , ,T )
這裡 Sh 代表停止狀態(Halting State)。字母集  內含空白符號 b 和磁帶
上的最左符號☆。轉換函數 T 可定義為
T:(S  S h )    S  (  {, })
T( S0 ,☆)  ( S 0 , )
(5.3.1)
T( S0 , C)  (S1 , b )
(5.3.2)
T( S 1 , b )  ( S 0 , )
(5.3.3)
T( S 0 , b )  ( S h , b )
(5.3.4)
是用來將 TM 上的讀寫頭從磁帶的最左邊一直移到輸入字串的最右邊之
右側格子上,且移動的過程中,一路將磁帶上掃描到的符號 C 予以塗銷
成空白。
範例 2
可否依據上述的四個轉換函數在 TM 上實際模擬一次圖 12.3.2 的變化情
形?
☆ C
C
C
b
b
b
b
...
讀寫頭
狀態控制器
圖 12.3.2
起始的 TM 組態
磁帶
磁帶
☆ C
S0
(a)
執行完式(12.3.1)
磁帶
☆ b
S1
(b)
執行完式(12.3.2)
磁帶
☆ b C
S0
(c)
執行完式(12.3.3)
磁帶
☆ b b
S1
(d)
執行完式(12.3.2)
磁帶
☆ b b C
S0
(e)
執行完式(12.3.3)
磁帶
☆ b b b
S1
(f)
執行完式(12.3.2)
磁帶
☆ b b b b
S0
(g)
執行完式(12.3.3)
磁帶
☆ b b b b
Sh
(h)
圖 12.3.3
TM 進入最終狀態
一個 TM 模擬的例子
範例 3
可否修改式(12.3.1)到式(12.3.4)的轉換函數以便將磁帶的三個 C
之內容(見圖 12.3.2)更改為三個 d?
將式(12.3.2)和式(12.3.3)改成
T( S0 , C)  ( S1 , d)
(5.3.5)
T( S 1 , d)  ( S 0 , )
(5.3.6)
範例 4
如何更改 TM 的轉換函數以便將圖 12.3.4 上讀寫頭移到第一個位置上?
T( S0 ,☆)  ( S 0 , )
T( S0 , C)  ( S1 , d)
T( S 1 , d)  ( S 0 , )
原(12.3.1)
T( S0 , b )  ( S 2 , )
T( S2 , d)  ( S 2 , )
T( S2 ,☆)  ( S h ,☆)
(12.3.7)
原(12.3.5)
原(12.3.6)
(12.3.8)
(12.3.9)
☆ C
C
C
b
b
磁帶
S0
式 (12.3.7)、式 (12.3.8) 和
式 (12.3.9)
式 (12.3.1)、式 (12.3.5)、
式 (12.3.6)
☆ d
d
d
b
b
磁帶
Sh
圖 12.3.5
將全部 C 改為全部 d, 並將讀寫頭移回第一個位置
範例 5
可 否 在
TM
上 設 計 出 適 當 的 轉 換 函 數 以 完 成
L  {0n1m | n, m  1 且 n  m} 的辨認工作?
我用三個模組 (Module) 的觀念來完成相關的杜林程式設計.
(1) 模組一:讀寫頭移到磁帶上第一次出現 1 的地方且將磁帶的 1 清掉.
T( S 0 , ☆)  (S0 , )
T( S 0 , 0 )  (S0 , )
T( S 0 , 1)  (S1 , b )
(2) 模組二:讀寫頭往左移直到碰到第一個 0 且將磁帶上的 0 清掉, 然後讀寫頭
再左移一格.
T( S1 , b )  (S1 , )
T( S1 , 0 )  (S 2 , b )
T( S 2 , b )  (S3 , )
(3) 模組三:如果磁帶上的資料為 0, 則讀寫頭往右移直到第一個 1 被碰到, 這時
清掉 1 再往左走;否則, 表示讀寫頭已碰到磁帶的最左邊, 則可進入 TM 的最
終狀態.
T( S 3 , 0 )  (S0 , 0 )
T( S 0 , b )  (S0 , )
T( S 3 , ☆)  ( S h , ☆)
12.4 相關議題
12.4.1 議題一:有限自動機的應用
範例 1
可否舉個帶有輸出功能的 FA 例子?
0
1
0
1
S2
S0
0
1
1
0
圖 12.4.1.1
1
0
1
0
S1
帶輸出功能的 FA
a 代表輸入為 a 時,則輸出為 b。若輸入的字串為 0110111,則輸出的字串
b
為 1001000。
範例 3
可否用表格的方式表示圖 12.4.1.1 的 FA?
圖 12.4.1.1 的表格表示法如圖 12.4.1.3 所示。
目前狀態
下個狀態
輸 出
0
1
0
1
S0
S0
S1
1
0
S1
S0
S2
1
0
S2
S0
S2
1
0
圖 12.4.1.3
圖 12.4.1.1 的表格表示法
12.4.2 議題二:停止問題是不可決定的
範例 1
何謂停止問題是不可決定的?
從本節的前言敘述中,該程式雖然執行了三個月,但有可能在下一
刻停止,也有可能永遠不會停。到底這個程式是會停還是不會停,
的確是很難決定,在下一個 Q&A 中,我們要證明程式的停止問題是
不可決定的。
範例 2
如何證明停止問題是不可決定的?
輸入資料
程 式
Prog
停止
不停止
無窮
迴圈
停止
圖 12.4.2.1
建構的特殊程式