圖靈機是由艾倫·麥席森·圖靈在1936年描述的一種抽象機器,它是人們使用紙筆進行數學運算的過程的抽象,它確定了計算機實現的可能性,並給出了計算機應有的主要架構,引入了讀寫與算法與程序語言的概念爲現代計算機的發明打下了基礎。算法
本文將會講解一下圖靈機中的兩種類型:肯定圖靈機和非肯定圖靈機。編程
圖靈機是一種數學計算模型,它定義了一個抽象機器,該抽象機器根據規則表來操縱帶子上的符號。儘管該模型很簡單,可是在任何給定計算機算法的狀況下,均可以構建出模擬該算法邏輯的圖靈機。架構
簡單點說,圖靈機就是一個模擬算法運行的抽象機器。它是這樣定義的:併發
能夠看到整個圖靈機基本上模擬了程序的執行步驟。編程語言
圖靈機雖然能夠表示任意的計算程序,可是由於其極其簡單的設計實際上並不適合進行計算,因此現實世界的現代計算機都是對圖靈機的優化設計。優化
圖靈完備性是指指令系統模擬圖靈機的能力。從理論上講,圖靈完整的一種編程語言能夠表達計算機能夠完成的全部任務。若是忽略有限內存的限制,幾乎全部編程語言都是圖靈完備的。spa
雖然圖靈機能夠表示任何計算任務,可是圖靈機太過於簡單了,在某些複雜的模型中沒法很好的進行使用。好比在現代計算機中的RASP隨機存儲模型,由於RASP能夠在寄存器中引用其餘的寄存器,因此能夠基於內存索引進行優化,這種優化是在圖靈機中沒法實現的。設計
圖靈機的另外一個限制是它們不能很好地進行併發建模。另外,由於在早期的時候,計算機的使用一般僅限於批處理,即非交互式任務,每一個任務都從給定的輸入數據中產生輸出數據。 因此圖靈機在描述現代交互式應用也有一些限制。教程
由於圖靈機是一種假想的設備,它爲計算機算法的概念提供了理論基礎。而且由於圖靈機模型比較簡單,對於複雜問題的描述比較弱,因此出現了不少圖靈機的等效模型,雖然這些模型並不必定比圖靈機強大,可是這些模型是真正存在的,而且使用他們能夠更加容易的解決特定問題。索引
在肯定性圖靈機(DTM)中,其控制規則規定了在任何給定狀況下最多隻能執行一個動做。
肯定性圖靈機具備轉換功能,對於磁帶頭下的給定狀態和符號,該轉換功能指定了三件事:
要寫入磁帶的符號,頭部應移動的方向(向左,向右或都不向),以及有限控制的後續狀態。
例如,狀態3的磁帶上的X可能會使DTM在磁帶上寫Y,將磁頭向右移動一個位置,而後切換到狀態5。
在理論計算機科學中,非肯定性圖靈機(NTM)是一種理論計算模型,其控制規則在某些給定狀況下指定了多個可能的動做。 也就是說,NTM的下一個狀態不是徹底由其動做和它所看到的當前符號決定的(不一樣於肯定性圖靈機)。
例如,狀態3的磁帶上的X可能容許NTM:
輸入Y,向右移動,而後切換到狀態5或者寫一個X,向左移動,並停留在狀態3。
那麼問題來了,對於非肯定圖靈機來講是怎麼進行下一步的選擇的呢?實際上NTM足夠幸運,它老是會選擇那個可以最終指向接受狀態的那一步。
你能夠把NTM的諸多分支當作是許多副本,每一個副本遵循一個可能的轉換。 DTM遵循的是單個「計算路徑」,而NTM則是「計算樹」。 若是樹中至少有一個分支致使接受狀態,那麼NTM就會接受這個輸入狀態。
咱們看下二者的決策圖:
肯定圖靈機和非肯定圖靈機 二者在計算上是等效的,也就是說,儘管它們一般具備不一樣的運行時,但能夠將任何NDTM轉換爲DTM(反之亦然)。 這能夠經過構造來證實。
本文已收錄於 http://www.flydean.com/03-turing-machine/
最通俗的解讀,最深入的乾貨,最簡潔的教程,衆多你不知道的小技巧等你來發現!
歡迎關注個人公衆號:「程序那些事」,懂技術,更懂你!