停機問題的理解

2021-06-21 21:57:58 字數 722 閱讀 6019

關於停機問題維基百科給出的定義是:

停機問題(halting problem)是邏輯數學中可計算性理論的乙個問題。通俗的說,停機問題就是判斷任意乙個程式是否會在有限的時間之內結束執行的問題。該問題等價於如下的判定問題:給定乙個程式

這個問題的結論是乙個可以解決停機問題的通用演算法是不存在的。問題倒是很好理解,關鍵在於怎麼證明它的結論——很簡單,利用兩個方法構成乙個悖論。

證明如下:

設停機問題有解,即:存在過程h(p, i)可以給出程式p在輸入i的情況下是否可停機。假設若p在輸入i時可停機,h輸出「停機」,反之輸出「死迴圈」(就是一直在執行)。

再設有乙個過程k(p)可以給出在某個輸入p下k是否可以停機。

偽**如下:

int h(procedure,input); // 這裡的h函式有兩種返回值,死迴圈(1) 或 停機(0)

int k(p)

else // 這裡會死迴圈}}

現在假設h的輸入為k,則h變為h(k,k),k的輸入為它自己,即k(k)。

假設h(k,k)==1,即如果輸入k時程式k一直執行,則返回0,表示k停機,產生矛盾。

假設h(k,k)!=1,即如果輸入k時程式k停機,則執行死迴圈,表示k一直執行,產生矛盾。

證明完畢,也就是說如果存在h(p,i)則會產生上述悖論,所以不存在解決停機問題的方法。

停機問題 The Halting Problem

看停機問題時,覺得它跟我國的 以子之矛攻子之盾 的想法很相似 也跟c語言的struct內不能包含自身很相似 停機問題描述 是否存在這樣的一段 h,這段 h以任意的 p作為輸入,它判斷 p在執行的過程中是否會停止。如果 p在執行的過程中會一直執行下去,不會停止,則程式h輸出 loop 反之,如果 p在...

停機問題的誤解

停機問題 halting problem 是否存在這樣乙個程式,他能判斷任意程式在輸入確定的情況下是否為死迴圈。可以用while true 表示死迴圈,構造例子如下 判斷 輸入 假設有兩個程式 a b 那麼 判斷 a 停機 判斷 b 死迴圈現在問題就是 是否存在這樣乙個判斷程式?先構造乙個相反函式,...

停機問題 哥德爾定理

今天讀 哥德爾 艾舍爾 geb 集異璧之大成 看到 自指 的論述,突然想起以前學自動機理論時的 停機問題 該問題上課前看書就看明白了,考試完了又忘了,後來又想起來看過一次,現在又忘了 可見,我是不懂裝懂。我之前其實沒搞明白 怎麼這麼乙個程式h2,當作 輸入p給另乙個h2後,它的存在性還受到另乙個它的...