圖靈機和繁忙的海狸

繁忙的海狸是個圖靈機遊戲,這一篇我們就認真的來看看這個可愛的小動物。


圖靈機和繁忙的海狸


停機問題Halting Problem

之前我們介紹過基本的圖靈機,讀寫頭Head可以不停地對紙帶上的數字(0或1)進行讀取,然後再跟進自身狀態State和讀取到的數字來決定下一步動作,以及下一步狀態切換。


圖靈機和繁忙的海狸


但是圖靈機有一個問題,那就是它根據設定好的規則運行,並不一定能夠最終自動停下來,不停下來就代表計算沒有結束,沒結束就代表得不到結果。

一直運行卻永遠得不到結果的圖靈機,是毫無用處的。

所以有效的圖靈機必須確保能夠自身根據規則最終能切換到停機Halt狀態才行。

對於無盡這個事情,《莊 子·天下篇》就講到一尺之棰,日取其半,萬世不竭,這就是一種有規則、能運行,但不能自動停機的圖靈機算法。

繁忙的海狸Busy beaver

圖靈機本質上是能夠自動運行的多個程序指令卡片,如下圖所示:


圖靈機和繁忙的海狸


繁忙的海狸遊戲是一個圖靈機遊戲,它遵循兩個原則:

  1. 必須能夠自動停止Halt。
  2. 儘可能在初始都是0的無限長紙帶上寫出更多的數字1。

在上圖中,左側每個卡片card代表一個指令,也對應一個狀態State,而紙帶上固定只有0或1兩個數字。上圖中那麼就是有5個狀態(4張卡片)2個symbol元素。

1狀態繁忙的海狸 BB-1

默認Halt停機(狀態State 0)的卡片不計,只有一張卡片(狀態State 1)的繁忙海狸,如下圖所示。


圖靈機和繁忙的海狸


上圖中簡化了寫法,下面0和1組成的兩行分別表示讀取的符號為0或者為1執行的動作。而0 101中後面三個數字分別表示把當前位置的數字改寫為1,向左移動(0向左1向右),最後一個數字表示下一狀態為1。0 101即[如果讀取到0],[那麼改寫為1][然後向左移動][再跳轉到狀態1],同樣1 110表示[如果讀取到1],[那麼改寫為1][然後向右移動][再跳轉到狀態0停機]。

實際上由於紙帶數字初始是0,讀到0,寫成1,向左走,狀態不變(還是轉到狀態1),所以永遠讀取不到1,也就永遠不會進入第二行的情況,也永遠不能停下來,會一直向左無限跑過去。

這樣的海狸不符合停機規則。

我們必須把第一行規則改為0 100或者0 110或者0 010,0 000,這樣才能實現停機,但這樣只能走執行一步,只能在紙帶上寫出1個1,如下圖。


圖靈機和繁忙的海狸


有沒有更好的辦法?沒有了。無論是向左還是向右,無論是先改寫再移動還是先移動再改寫,在1state和2Symbol的情況下只能最多寫出一個1。

BB-2和更多

1狀態海狸有多少種可能的走法?答案是64種,當然其中包含了很多無限循環不停機的無效走法。64種走法裡,能停機的最好成績是1.

關於多狀態海狸(多卡片海狸)的走法,有個公式可以套用:

圖靈機和繁忙的海狸

可以推算出2卡片海狸共有

圖靈機和繁忙的海狸

種可能。

而這20736種可能的走法中,有多少會停機?不停機的最好成績是多少?——這些都沒法用特定算法計算,只能把這兩萬多種情況都模擬出來,然後看哪些停住了,再找出其中最好成績。

2卡片海狸即BB-2的最好成績是4,最多寫出4個1,是不是很失望呢?

更失望的是BB-3,它有16777216(1600多萬)種走法,但最好成績是6。

BB-4有256乘以10的8次方那麼多走法,最好成績是13。

BB-5則人類25年來也沒有算出確定的最好成績來,目前的最高紀錄是4098。這是由於走法太多太複雜,計算量太大,超級計算機也算不完。

結語

有些事情看上去簡單,但實際並沒有什麼好的算法可以直接得出結果,只能暴力嘗試,而遇到龐大數字的時候,現代計算機也無能為力。

實際上每件事都會有確切算法嗎?

世上有太多需要模糊算法,或者只能得到一些大約概率,或者什麼也得不到。


每個人的智能新時代

如果您發現文章錯誤,請不吝留言指正;

如果您覺得有用,請點喜歡;


分享到:


相關文章: