圖靈機(英語:Turing machine),又稱確定型圖靈機,是英國數學家艾倫·圖靈於1936年提出的一種抽象計算模型,其更抽象的意義為一種數學邏輯機,可以看作等價於任何有限邏輯數學過程的終極強大邏輯機器。
圖靈的基本思想
圖靈的基本思想是用機器來模擬人們用紙筆進行數學運算的過程,他把這樣的過程看作下列兩種簡單的動作:
- 在紙上寫上或擦除某個符號;
- 把注意力從紙的一個位置移動到另一個位置;
而在每個階段,人要決定下一步的動作,依賴於(a)此人當前所關注的紙上某個位置的符號和(b)此人當前思維的狀態。
為了模擬人的這種運算過程,圖靈構造出一台假想的機器,該機器由以下幾個部分組成:
- 一條無限長的紙帶TAPE。紙帶被划分為一個接一個的小格子,每個格子上包含一個來自有限字母表的符號,字母表中有一個特殊的符號{\displaystyle \square }
表示空白。紙帶上的格子從左到右依次被編號為0, 1, 2, ...,紙帶的右端可以無限伸展。
- 一個讀寫頭HEAD。該讀寫頭可以在紙帶上左右移動,它能讀出當前所指的格子上的符號,並能改變當前格子上的符號。
- 一套控制規則TABLE。它根據當前機器所處的狀態以及當前讀寫頭所指的格子上的符號來確定讀寫頭下一步的動作,並改變狀態寄存器的值,令機器進入一個新的狀態。
- 一個狀態寄存器。它用來保存圖靈機當前所處的狀態。圖靈機的所有可能狀態的數目是有限的,並且有一個特殊的狀態,稱為停機狀態。參見停機問題。
注意這個機器的每一部分都是有限的,但它有一個潛在的無限長的紙帶,因此這種機器只是一個理想的設備。圖靈認為這樣的一台機器就能模擬人類所能進行的任何計算過程。
圖靈機的正式定義
一台圖靈機是一個七元有序組{\displaystyle (Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})},其中{\displaystyle Q,\Sigma ,\Gamma }
都是有限集合,且滿足
- {\displaystyle Q}
是非空有窮狀態集合;
- {\displaystyle \Sigma }
是非空有窮輸入字母表,其中不包含特殊的空白符{\displaystyle \square }
;
- {\displaystyle \Gamma }
是非空有窮帶字母表且{\displaystyle \Sigma \subset \Gamma }
;
- {\displaystyle q_{reject}\in \Gamma -\Sigma }
為空白符;
- {\displaystyle \delta :Q\times \Gamma \to Q\times \Gamma \times \{L,R\}}
是轉移函數,其中{\displaystyle L,R}
表示讀寫頭是向左移還是向右移;
- {\displaystyle q_{0}\in Q}
是起始狀態;
- {\displaystyle q_{accept}\in Q}
是接受狀態。{\displaystyle q_{reject}\in Q}
是拒絕狀態,且{\displaystyle q_{reject}\neq q_{accept}}
。
圖靈機{\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})}將以如下方式運作:
開始的時候將輸入符號串 {\displaystyle \omega =\omega _{0}\omega _{1}\ldots \omega _{n-1}\in \Sigma ^{*}} 從左到右依此填在紙帶的第{\displaystyle 0,1,\ldots ,n-1}
號格子上,其他格子保持空白(即填以空白符{\displaystyle \square }
)。 {\displaystyle M}
的讀寫頭指向第0號格子, {\displaystyle M}
處於狀態{\displaystyle q_{0}}
。機器開始運行后,按照轉移函數{\displaystyle \delta }
所描述的規則進行計算。例如,若當前機器的狀態為{\displaystyle q}
,讀寫頭所指的格子中的符號為{\displaystyle x}
,設{\displaystyle \delta (q,x)=(q',x',L)}
,則機器進入新狀態{\displaystyle q'}
,將讀寫頭所指的格子中的符號改為{\displaystyle x'}
,然后將讀寫頭向左移動一個格子。若在某一時刻,讀寫頭所指的是第0號格子,但根據轉移函數它下一步將繼續向左移,這時它停在原地不動。換句話說,讀寫頭始終不移出紙帶的左邊界。若在某個時刻{\displaystyle M}
根據轉移函數進入了狀態{\displaystyle q_{accept}}
,則它立刻停機並接受輸入的字符串; 若在某個時刻{\displaystyle M}
根據轉移函數進入了狀態{\displaystyle q_{reject}}
,則它立刻停機並拒絕輸入的字符串。
注意,轉移函數{\displaystyle \delta }是一個部分函數,換句話說對於某些{\displaystyle q}
,{\displaystyle x}
,{\displaystyle \delta (q,x)}
可能沒有定義,如果在運行中遇到下一個操作沒有定義的情況,機器將立刻停機。
圖靈機的基本術語
設{\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})}是一台圖靈機,
- {\displaystyle M}
的帶描述(tape description)是一個函數{\displaystyle F:\mathbb {N} \to \Gamma }
,其中{\displaystyle F(i)}
表示{\displaystyle M}
的帶上第{\displaystyle i}
個格子中的符號;
- {\displaystyle M}
的格局(configuration)是一個三元組{\displaystyle (F,q,e)}
,其中{\displaystyle F:\mathbb {N} \to \Gamma }
是當前的帶描述,{\displaystyle q\in Q}
是當前的狀態,{\displaystyle e\in \mathbb {N} }
是當前讀寫頭所處的位置;
- 設{\displaystyle C_{1}=(F_{1},q_{1},e_{1})}
, {\displaystyle C_{2}=(F_{2},q_{2},e_{2})}
是{\displaystyle M}
的格局,設{\displaystyle \delta (q_{1},F_{1}(e_{1}))=(q,x,d)}
,若滿足{\displaystyle q_{2}=q}
,
{\displaystyle e_{2}={\begin{cases}e_{1}-1&d=L\\e_{1}+1&d=R\end{cases}}}
{\displaystyle F_{2}(i)={\begin{cases}F_{1}(i)&i\neq e_{1}\\x&i=e_{1}\end{cases}}}
從格局{\displaystyle C_{1}}
產生格局{\displaystyle C_{2}}
,記作{\displaystyle C_{1}\to _{M}C_{2}}
。
- 設{\displaystyle C=(F,q,e)}
為{\displaystyle M}
的格局,若{\displaystyle q=q_{accept}}
則稱{\displaystyle C}
為接受格局;若{\displaystyle q=q_{reject}}
則稱{\displaystyle C}
為拒絕格局;接受格局和拒絕格局統稱為停機格局。
設{\displaystyle M}是一台圖靈機,將字符串 {\displaystyle \omega =\omega _{0}\omega _{1}\ldots \omega _{n-1}}
作為其輸入,若存在格局序列{\displaystyle C_{1},C_{2},\ldots ,C_{k}}
,使得
- {\displaystyle C_{1}}
是{\displaystyle M}
在輸入{\displaystyle \omega }
上的起始格局,即{\displaystyle C_{1}=(F,q_{0},0)}
,其中
{\displaystyle F_{1}(i)={\begin{cases}\omega _{i}&0\leq i\leq n-1\\\square &{\mbox{otherwise}}\end{cases}}}
- {\displaystyle C_{i}\to _{M}C_{i+1}}
,其中{\displaystyle i=1,2,\ldots ,k-1}
;
- {\displaystyle C_{k}}
是接受格局。
則稱{\displaystyle M} 接受字符串{\displaystyle \omega }
,且{\displaystyle C_{1},C_{2},\ldots ,C_{k}}
稱為圖靈機{\displaystyle M}
在輸入{\displaystyle \omega }
上的接受計算歷史。同理,若{\displaystyle C_{k}}
是拒絕格局,則稱{\displaystyle M}
拒絕{\displaystyle \omega }
,且{\displaystyle C_{1},C_{2},\ldots ,C_{k}}
稱為圖靈機{\displaystyle M}
在輸入{\displaystyle \omega }
上的拒絕計算歷史。{\displaystyle M}
所接受的所有字符串的集合稱為{\displaystyle M}
的語言,記作{\displaystyle L(M)}
。
圖靈機的例子
設{\displaystyle M=(\{0,1,10,11\},\{0,1\},\{0,1,\square \},\delta ,0,,)}和{\displaystyle \delta :\{0,1,10,11\}\times \{0,1\}\to \{0,1,10,11\}\times \{0,1\}\times \{R,L,E,S\}}
. 比如做一個以1的個數表示數值的加法運算,在磁帶上的數據是0000001110110000,就是3+2的意思。程序{\displaystyle \delta }
如下:
- 0,0 -> 0,0R
- 0,1 -> 1,1R
- 1,0 -> 10,1R
- 1,1 -> 1,1R
- 10,0 -> 11,0L
- 10,1 -> 10,1R
- 11,0 -> E
- 11,1 -> 0,0S
第一行程序0,0->0,0R意思就是如果機器讀到0,就將其變成0,狀態變為0,讀寫頭向右移動一格. R就是向右移動一格,L就是向左移一格,E是錯誤,S是停機. xx,y -> aa,b中xx是當前狀態, y是當前格子的值, aa是程序下一步的狀態, b是當前格的修改值。
雖然這里給出與上面不同形式的定義,但兩者是等價的,這里的定義能完成的工作並不比上面的定義多。
步數 | 狀態 | 磁帶 | 步數 | 狀態 | 磁帶 | |
---|---|---|---|---|---|---|
1 | 0 | 0000001110110000 | 9 | 1 | 0000001110110000 | |
2 | 0 | 0000001110110000 | 10 | 1 | 0000001110110000 | |
3 | 0 | 0000001110110000 | 11 | 10 | 0000001111110000 | |
4 | 0 | 0000001110110000 | 12 | 10 | 0000001111110000 | |
5 | 0 | 0000001110110000 | 13 | 10 | 0000001111110000 | |
6 | 0 | 0000001110110000 | 14 | 11 | 0000001111110000 | |
7 | 0 | 0000001110110000 | 15 | 0 | 0000001111100000(停機) | |
8 | 1 | 0000001110110000 | -- 停機 -- |
通用圖靈機
對於任意一個圖靈機,因為它的描述是有限的,因此我們總可以用某種方式將其編碼為字符串。我們用{\displaystyle \langle M\rangle }表示圖靈機{\displaystyle M}
的編碼。
我們可以構造出一個特殊的圖靈機,它接受任意一個圖靈機{\displaystyle M}的編碼{\displaystyle \langle M\rangle }
,然后模擬{\displaystyle M}
的運作,這樣的圖靈機稱為通用圖靈機(Universal Turing Machine)。現代電子計算機其實就是這樣一種通用圖靈機,它能接受一段描述其他圖靈機的程序,並運行程序實現該程序所描述的算法。
圖靈機的變體
圖靈機有很多變種,但可以證明這些變種的計算能力都是等價的,即它們識別同樣的語言類。證明兩個計算模型{\displaystyle A}和{\displaystyle B}
的計算能力等價的基本思想是:用{\displaystyle A}
和{\displaystyle B}
相互模擬,若{\displaystyle A}
可模擬{\displaystyle B}
且{\displaystyle B}
可模擬{\displaystyle A}
,顯然他們的計算能力等價。注意這里我們暫時不考慮計算的效率,只考慮計算的理論上“可行性”。
首先我們可以發現,改變圖靈機的帶字母表並不會改變其計算能力。例如我們可以限制圖靈機的帶字母表為{\displaystyle \{0,1\}},這並不會改變圖靈機的計算能力,因為我們顯然可以用帶字母表為{\displaystyle \{0,1\}}
的圖靈機模擬帶字母表為任意有限集合{\displaystyle \Gamma }
的圖靈機。
另一個要注意的是,如果我們允許圖靈機的紙帶兩端都可以無限伸展,這並不能增加圖靈機的計算能力,因為我們顯然可以用只有紙帶一端能無限伸展的圖靈機來模擬這種紙帶兩端都可以無限伸展的圖靈機。
如果我們允許圖靈機的讀寫頭在某一步保持原地不動,那也不會增加其計算能力,因為我們可以用向左移動一次再向右移動一次來代替在原地不動。
其它的常見圖靈機變種包括:
圖靈可計算性
其它等價的計算模型
除了圖靈機以外,人們還發明了很多其它的計算模型。包括:
然而這些模型無一例外地都和圖靈機的計算能力等價,因此邱奇,圖靈和哥德爾 提出了著名的邱奇-圖靈論題:一切直覺上能計算的函數都可用圖靈機計算,反之亦然。
參考文獻
- Turing, A., On Computable Numbers, With an Application to the Entscheidungsproblem, Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David(ed.), The Undecidable, Hewlett, NY: Raven Press, 1965;
- Michael Sipser, Introduction to the Theory of Computation, PWS Publishing, 1997. ISBN 0-534-94728-X
外部鏈接
- Visual Turing, a Turing machine interactive simulator/IDE(free software for Windows)。
- Suzanne Brittons Turing Machine Simulator(java applet)。
- C++ Simulator of a Nondeterministic and Deterministic Turing Machine(free software)。
- Citations from CiteSeer
- 顧森講解圖靈機
|
|