如果沒有接觸過相關領域或專業知識,相信很多人對圖靈——這位出生於1912年的英國大數學家的了解更多的來源於著名的電影《模仿遊戲》。最近幾年人工智慧話題很火熱,從圖靈「人工智慧之父」的稱號,我們似乎就嗅到了這位大神不一般的意味,不過今天要聊的不是圖靈在人工智慧方面的貢獻,要知道圖靈還有一個稱號是「計算機科學之父」,為什麼呢,這就要從圖靈提出的一個有趣的概念——「圖靈機」說起了。
圖靈成長、生活於二戰時期,這時候第二次工業革命早就將歐洲帶入了電氣時代,同時,二戰倒逼了很多的科技進步發展,當時的歐洲的機械化也很普及了,車間和路上都有機器在轟鳴,圖靈身為一位數學家,也想讓數學計算機械化一下,試想一下:有那麼一臺機器,把任意一道問題送進去,然後隨著火光蒸汽沖天,機器叮叮噹噹一頓執行,最後在機器出口,出來的不是什麼螺釘、布料,而是精確的數學題答案,這簡直太朋克了。
說幹就幹,不過大神就是大神,他沒有立刻抄起螺絲刀和扳手,而是坐在窗前,先來了個靈魂發問:要設計的這臺機器能夠計算哪些問題?或者說,哪些問題是能夠被機器計算的?有的朋友現在可能覺得莫名其妙,這個問題很重要嗎?試想一下,圖靈說了,我的機器就是用來計算一切可以計算的問題的,那就必須得回答一下,哪些問題可以被計算,才好進一步設計機器啊。
事實上,這涉及到一個概念即「可計算性」,圖靈直接一擊必殺終結了這個問題,他給出了什麼叫可計算問題以及什麼叫算法。在這裡呢,我們可以先不那麼嚴謹地介紹一下:如果一個問題,使用有限的幾種操作,進行有限的操作步驟就能得出結果,那它就是一個可計算問題(PS:其實可計算理論涉及到第三次數學危機和停機問題,是個很重要的概念)。
什麼意思呢?例如現在允許你使用加減乘除操作,然後給你一個四則運算問題,你一頓計算能得出結果來,這就是一個可計算問題,不過如果允許你使用加減乘除,但是讓你解一道微積分的問題,你一頓操作也算不出來,然後把桌子掀了,這就不是可計算問題。再例如,讓你可以使用足夠數學計算方法,問你圓周率小數點第三位是什麼,這個顯然是可以計算得到的,你也能寫出來,這是可計算問題,但是同樣的條件,直接問你圓周率是多少,你拿著筆算到海枯石爛也寫不完,這就不算是可計算問題。所以你注意到了嗎,圖靈說了,判斷一個問題是否可計算,不僅要看問題本身,還要看解決問題所能夠使用的基本操作(或者叫基本算法步驟),而且還得是一頓操作能結束的,算起來沒完沒了也不行(事實上,圖靈在描述可計算問題時,特意強調計算的結果最終要能被機器明確輸出)。
看到這裡是不是有點累還有點奇怪啊,不是要說圖靈的機器嗎?前面說這麼多可被計算之類的概念有什麼用?其實,如果你差不多明白上面說的內容,你已經可以和圖靈一起設計這個機器了。
既然本來就想讓機器代替人來計算,不妨回頭想想如果給一個可計算問題,人是怎麼樣解決的,我們拿到題目,首先得能看到題目吧?那我們的機器也要有輸入的地方。那計算完了,總得把結果給出來吧,很顯然機器也得有輸出。對一個複雜的問題,我們一般把它拆解成一步一步的計算,每一步的結果打個草稿記一下,以便下一步繼續用,那麼我們設計的機器得能有一個類似草稿紙臨時存儲的地方,這個臨時存儲的結果能拿來下一步繼續用,就叫寄存器吧,就這樣計算完最後一步或者計算結果達到我們的要求,這個問題就算解決完了。
感覺差不多了對吧?那好,我們來看看圖靈的機器,
圖靈設想的機器是把每一步的操作指令寫在一條紙帶上的,紙帶上劃分了一個一個小格子,每一格是帶編號的,裡面記錄的就是一個操作指令,這些操作指令都是這臺機器能夠認識的、有限種的基本操作(如果指令機器不認識,那就停機操作)。機器每次讀一個格子,根據格子裡面的指令進行操作。紙帶有多長?圖靈說了,你甭管它有多長,反正前面規定了我只處理可計算問題,所以你步驟理論上得是有限的,那這紙帶保證你夠用就行,要多長有多長,有無限長。
那我們就來試試吧,我們先做一臺圖靈1.0,我們給這臺圖靈1.0安裝上一把錘子,然後讓它能夠識別兩個指令:
A指令:砸一下,跳轉到下一格紙帶
B指令: 輸出,停機
我們開始用這臺機器,在紙帶裡面寫上三萬六千格的A指令,最後寫一個B指令。把紙帶輸入。眼看著機器開始咣咣咣運行,每讀一個格子,錘子就落下,然後跳轉到下一格。就這樣經過了三萬六千錘,恭喜你,圖靈1.0成功為你輸出了一口章丘鐵鍋。
等一下,感覺有什麼不對的地方,圖靈1.0砸了三萬六千錘,豈不是就得寫三萬六千格紙帶?坑爹呢這是,除了省了一點力氣,還是要人一步一步執行的,感覺意義不大啊。
顯然,這種問題大神第一時間就想到了。所以圖靈說,重點還在於機器本身能夠識別的基本操作上(不妨叫機器預置的指令集)上。剛才設計的機器預置的指令太少了,不滿足我的要求,這種機器我不承認它是我的機器(所以這種模型稱之為圖靈不完備),我要求機器不僅能夠向下一格移動,還能返回向上一格移動,而且還能夠根據每一格執行前或者執行後的數據狀態判斷一下向前移動還是向右移動。那我們再簡單改造一下指令集裡面的內容:
A指令:錘一下,轉向下一格命令;
B指令:檢查一下有沒有錘夠三萬六千次,沒有就返回上一格,否則就進行下一格指令;
C指令:輸出,停機
那麼好了,僅僅是添加了一下邏輯判斷,現在我們重新編輯我們的紙帶,僅有ABC這三個指令,然後機器開始執行,讓我們看看發生了什麼,首先機器讀取指令A,進行一次錘擊操作,轉向下一個格子,發現次數沒有夠,轉回上一格,如此循環往復,發現了嗎,我們僅需要合理安排這三個指令,就可以完成一個可計算問題,所以,圖靈機還有一個重要屬性就是能夠完成指令的循環執行,按照通俗的說法,如果你能夠使用某臺機器模擬出上面的執行效果,就可以說是這個機器是圖靈機,或者稱之為圖靈完備的。上面只是列舉的一個非常簡單的例子,實際上,即使是一個非常複雜的數學問題,只要它滿足圖靈的可計算定義,就可以按照圖靈機的思想進行設計出一臺對應的自動化運算的機器,看到這裡,相信已經對圖靈機有一個感性的認識了,在前面的描述中,其實有心的朋友意會識到很多不嚴謹的地方,這僅僅是為了便於理解而已,實際上,圖靈身為一個數學家,對問題的定義和描述是十分嚴格精確的,不妨給大家體會一下維基上的專業描述
我們也能感受到,圖靈機模型已經不僅僅是可以用來設計數學計算機器的,而是一種對此類問題的高度抽象的方法,大神果然是大神,處理和考慮問題高度就是不一樣,能夠提綱挈領。處在資訊時代的我們,已經有意無意地接觸了很多信息計算機知識,理解圖靈機已經容易很多,在圖靈的時代,雖然已經有了一些類似問題的討論背景,但是作為一個時代的開創者,圖靈憑藉自己的天才在思維殿堂中為我們搭建了這個現代計算機的理論模型(馮諾依曼則完成了物理模型,當然這又是另一個話題了),直至今天,我們使用的計算機、手機等等信息處理設備都沒有跳出圖靈機的範疇。
最後,圖靈機的相關內容發表在圖靈的《論可計算數及其在判定性問題上的應用》,而且圖靈大神的一生也很傳奇,有興趣可以自己了解一下。
最後膜拜大神本尊