多帶圖靈機 (k-tape Turing machine)
多帶圖靈機和圖靈機類似,唯一的不同在於它可以有 k (>1) 條紙帶,每條紙帶上都有一個讀寫頭。
- 其狀態轉移函數 δ 修改為:δ:Q×Γk→Q×Γk×{L,R}k 此處 k 是紙帶的數目。
- 表達式 δ(q,x1,x2,…,xk)=(q′,x′1,x′2,…,x′k,m1,m2,…,mk),其中 mi=L 或 R。
多帶圖靈機與單帶圖靈機的等價
對於任意一個多帶圖靈機 M ,存在一個單帶圖靈機 M′ ,滿足 L(M)=L(M′)。
單帶圖靈機轉多帶圖靈機:顯然成立,改一下型別即可。
多帶圖靈機轉單帶圖靈機:改寫方式如下
符號定義
- #:分開不同紙帶的符號
- X∗:符號上的點代表磁頭位置
- U:代表「空」
- 初始值:#W1W2W3W4...Wn#U∗#U∗#U∗#...#
- 掃第一遍看磁頭位置
- 再掃一遍用轉移函式轉換 (如果虛擬磁頭移到#上就補上U*然後全部右移)
[用心去感覺] 多紙帶圖靈機推導可得到的結論
- 一端無限的紙帶等價於兩端無限的紙帶(單紙帶等於雙紙帶)
- 計算能力:圖靈機 Turing machines > 下推自動機 PDAs > 有限狀態機 DFAs
非決定性圖靈機 (Nondeterministic Turing Machines)
如果不加特殊說明,通常所說的圖靈機都是決定型圖靈機。非決定型圖靈機和決定型圖靈機的不同之處在於,在計算的每一時刻,根據當前狀態和讀寫頭所讀的符號,機器存在多種狀態轉移方案,機器將任意地選擇其中一種方案繼續運作,直到最後停機為止。
具體而言,其狀態轉移函數為 δ:Q×Γ→2Q×Γ×{L,R},其中Q是狀態集合,Γ是帶字母表,L,R分別表示讀寫頭向左和向右移動;符號 2A 表示集合A的冪集。
具體而言,其狀態轉移函數為 δ:Q×Γ→2Q×Γ×{L,R},其中Q是狀態集合,Γ是帶字母表,L,R分別表示讀寫頭向左和向右移動;符號 2A 表示集合A的冪集。
例如,設非決定型圖靈機M的當前狀態為q,當前讀寫頭所讀的符號為x,若 δ(q,x)={(q1,x1,d1),(q2,x2,d2),…,(qk,xk,dk)} 則M將任意地選擇一個 (qi,xi,di) ,按其進行操作,然後進入下一步計算。
非決定型圖靈機 M 在輸入串 ω 上的計算過程可以表示為一棵樹,不同的分支對應著每一步計算的不同的可能性。只要有任意一個分支進入接受狀態,則稱 M 接受 ω ;只要有任意一個分支進入拒絕狀態,則稱 M 拒絕 ω ;某些分支可能永遠無法停機,但只要有一個分支可以進入接受或拒絕狀態,我們就說 M 在輸入 ω 上可停機。注意,我們規定 M 必須是無矛盾的,即它不能有某個分支接受 ω 而同時另一個分支拒絕ω,這樣有矛盾的非決定型圖靈機是不合法的。
如果語言 L 被非決定型圖靈機 M 在多項式時間內接受,則一定存在多項式 P 使得語言L 被時間複雜度為 O(2P(n)) 的決定型圖靈機程序所接受。這個定理說明了為什麼在證明 P=NP 之前,所有的 NPC 問題都只有指數時間複雜度算法。
決定性圖靈機與非決定性圖靈機的等價
如果語言 L 被非決定型圖靈機 M 在多項式時間內接受,則一定存在多項式 P 使得語言L 被時間複雜度為 O(2P(n)) 的決定型圖靈機程序所接受。這個定理說明了為什麼在證明 P=NP 之前,所有的 NPC 問題都只有指數時間複雜度算法。
決定性圖靈機與非決定性圖靈機的等價
對於任意一個非決定型圖靈機M,存在一個決定型圖靈機M′,使得它們的語言相等,即L(M)=L(M′)。
決定性圖靈機轉非決定性圖靈機:顯然成立,改一下型別即可。
非決定性圖靈機轉決定性圖靈機:改寫方式如下
決定性圖靈機轉非決定性圖靈機:顯然成立,改一下型別即可。
非決定性圖靈機轉決定性圖靈機:改寫方式如下
因為非決定型圖靈機的計算過程就是一棵樹,因此我們只需遍歷該樹就可以模擬其計算過程。採用疊代加深搜索(Iterative deepening search, IDS)遍歷 M 的計算樹。具體證明如下:
對於非決定型圖靈機 M ,構造一個決定型圖靈機 M′ 如下:
枚舉機 (Enumerators)
枚舉機不吃字串,只吐字串,且會一直吐字串直到吐出我們想要的字串,當吐出想要字串的時候就是圖靈機的接受狀態。設 S⊆Σ∗ 為一個語言,E 是一個枚舉器, 若 L(E)=S,則稱 E 枚舉了語言 S。若存在這樣的 E,S 就稱為遞歸可枚舉語言。
遞歸可枚舉語言和圖靈可識別語言的等價
對於任意一個圖靈機M,存在一個枚舉機E,使得它們的語言相等,即L(M)=L(E)。
圖靈機轉枚舉機:
若有枚舉器 E 枚舉語言 S,構造一個圖靈機 M 如下:
M = 對於輸入 ω
注意當 ω∉S 時,M 可能永不停機,但 M 所接受的語言集合恰好是 S,所以 M 識別了 S 。
枚舉機轉圖靈機:
假設我們有圖靈機 M 識別語言 S,構造一個枚舉器 E 如下:
E = 忽略輸入
顯然,這樣構造的枚舉器 E 最終輸出的語言恰好就是 S 。注意 S 中的字符串並沒有在 E 中按字典序輸出,而且同一個串可能會被 E 輸出多次,但根據枚舉器的定義, 這些都是允許的。
References
交大陳穎平教授正規語言講義
wiki
http://zh.wikipedia.org/wiki/非确定型图灵机
http://zh.wikipedia.org/wiki/多带图灵机
http://zh.wikipedia.org/wiki/递归可枚举语言
對於非決定型圖靈機 M ,構造一個決定型圖靈機 M′ 如下:
- 令 k=1;
- 深度優先地模擬 M 的每個分支的計算,但每個分支最多只計算 k 步,如果某個計算分支在 k 步內可以停機,則 M′ 也停機,並將該計算分支的計算結果輸出。
- 令 k 增加 1,跳轉到上一步繼續執行。
枚舉機 (Enumerators)
枚舉機不吃字串,只吐字串,且會一直吐字串直到吐出我們想要的字串,當吐出想要字串的時候就是圖靈機的接受狀態。設 S⊆Σ∗ 為一個語言,E 是一個枚舉器, 若 L(E)=S,則稱 E 枚舉了語言 S。若存在這樣的 E,S 就稱為遞歸可枚舉語言。
遞歸可枚舉語言和圖靈可識別語言的等價
對於任意一個圖靈機M,存在一個枚舉機E,使得它們的語言相等,即L(M)=L(E)。
圖靈機轉枚舉機:
若有枚舉器 E 枚舉語言 S,構造一個圖靈機 M 如下:
M = 對於輸入 ω
- 運行 E,依次生成字符串 s1,s2,...;
- 若遇到某個 si=ω 則進入接受狀態並停機。
注意當 ω∉S 時,M 可能永不停機,但 M 所接受的語言集合恰好是 S,所以 M 識別了 S 。
枚舉機轉圖靈機:
假設我們有圖靈機 M 識別語言 S,構造一個枚舉器 E 如下:
E = 忽略輸入
- 對 i=1,2,3,... 重複下列步驟;
- 設 Σ∗=s1,s2,...,分別將 s1,s2,...,si 作為 M 的輸入,模擬 M 執行 i 步;
- 若某個 sj, 1≤j≤i,在 i 步內可被 M 接受,則將其輸出。
顯然,這樣構造的枚舉器 E 最終輸出的語言恰好就是 S 。注意 S 中的字符串並沒有在 E 中按字典序輸出,而且同一個串可能會被 E 輸出多次,但根據枚舉器的定義, 這些都是允許的。
References
交大陳穎平教授正規語言講義
wiki
http://zh.wikipedia.org/wiki/非确定型图灵机
http://zh.wikipedia.org/wiki/多带图灵机
http://zh.wikipedia.org/wiki/递归可枚举语言