組員 : 林士恆 許嘉宏
12.4 不可計算函數
不可計算函數 根據 12.2 的 Church-Turing 命題,當我們找到一個杜林不 可計算的函數時,一般就相信它是個不可計算的函數。 簡單來說,就是一個計算超出今日電腦能力的函數。
停止問題 一個程式在某特定條件下啟動後是否會終止的問題。 例如: while X not 0 do; incr X; end;
自我參用 簡單來說,就是參用本身的觀念 此觀念運用在數學上,產生許多令人嘆為觀止的成果 例如 : 1.“This statement is false” 2.“Does the set of all sets contain itself?” 因此我們即將要做到的是,為進行類似於 “If it does, then it doesn’t; but, if it doesn’t, then it does.” 這種推理過程,做好基礎的準備工作。
在實例當中,自我參用是以指定一個代表程式本身的 值,給一個程式的變數方式來達成。 在每一個用精簡語言所寫的程式,可以一個字符接一 個字符方式,使用 ASCII 碼將之編碼程單一長串的位元 圖樣。 讓我們考量如果對以下的簡單程式 while X not 0 do; incr X; end; 參考下圖
While x not 0; incr x; End; Wh…………………………..d … Encode the program as one bit pattern using ASCll. Assign this pattern to X and execute the program.
現在來比較一下 以下面的程式 clear X; while X not 0 do; incr X; end; 這個程式會終止,因為當 while-end 結構被執行時,不 論其初始值是多少,變數 X 的值都會是0
自我終止 (self-terminating) 定義 : 一個以精簡程式語言撰寫的程式,如果執行該程 式時,將其所有的變數初始設定為該程式自身的編碼, 而導致其執行結果會終止。 注意到一個程式是否自我終止可能與該程式撰寫的目 的無關。它僅只是每個以精簡程式語言所寫的程式有 或沒有的一項特質。 我們可以用較精確的方式來敘述停止問題,其主要問 題是決定精簡程式是否自我終結。總括來講,沒有一 個演算法能回答這個問題。
停止問題的不可解本質 現在要證明停止問題超出機器的能力。 方法是證明要解決此問題需要一個能計算出一個不可 計算函數的演算法。 精確的說,我們定義一個函數,使得一個自我終結程 式輸入之後,會產生輸出值1,而一個非自我終結程 式輸入之後,會產生輸出值0。為了精確緣故,我們 稱此函數為停止函數 (halting function)
12.5 問題的複雜度
衡量一個問題的複雜度 如果一個問題的所有解決方法都需要耗費很多時間,那它 就可被視為是複雜的。這種概念常被稱為時間複雜度 ( time complexity )。 研究一個演算法的效率就是研究演算法的時間複雜度。 big O 符號( bigΘ 符號的變形)被用來表示問題的複雜 度。 排序問題的較佳解法的一個實例是合併排序法。 合併排序演算法歸類為 O(n 1g n) 。
★ ★圖 12.8 合併兩個清單的 MergeLists 程式
★ ★圖 12.9 實作合併排序演算法的 MergeSort 程式
★ ★圖 合併排序演算法所產生的階層式子問題
多項式問題相較於非多項式 假設 F(N) 跟 G(N) 都是數學式子,如果 G(N) 受限於 F(N) , 換言之,表示 F(N) 圖形都在 G(N) 上方。 例如 :lgn 這個式子受限於式子 n ,而 nlgn 受限於
a. n versus lg n b. versus n lg n y=n y=lg n y n y n y= y=n lg n 常用數學式之圖形
多項式時間 多項式時間 : 這個問題是屬於 O(f(n)) ,其中 f(n) 本身是一 個多項式或受限於某一個多項式。通常以大寫 P 來表 示所有多項式問題的集合。 當稱某個問題是多項式問題時,意指解決此問題所需的 時間有關或稱為多項式時間。
例 : 假設一個群體有 N 人,想要列出這 N 個人所有可能 組成的小組委員會。其可能解會有 2 的 N 次方 -1 個 ( 空集合不算 ) ,那麼可以解決的這個問題至少需要 2 的 N 次方 -1 個步驟。因此非常耗時。
NP 問題 一個能以非既定演算法在多項式時間內解決問題,稱為 非既定多項式問題 (nondeterministic polynomial problem) 簡稱NP問題。
既定與非既定比較 在許多情況下介於既定的「演算法」之間只是一線之 隔,但是其差別則是相當清楚而且重要。一個既定的 演算法並不依賴執行該演算法的機制的創造力,而一 個非既定的「演算法」則可能會。
例如,比較指令走到下個交叉路口向右或向左轉及走到 下個交叉路口,視站在路口的人告訴你怎麼做而向右 或向左轉。 在此兩者中任一種情況下,依指示行動的人所作的動作 並不是在實際執行指令之前決定的。但是,第一個指 令會需要依指示做動作的人基於自己的判斷做決定, 因此是非既定的。第二個指令被數個不同的人遵循, 有些人可能會向右轉,而有些人則會向左轉。 如果數個人遵循第二條指令而且接到相同資訊,他們就 會都轉向相同的方向。
因此,其中意涵一個在既定演算法及非既定「演算法」 之間的重大差異。如果一個既定演算法以相同的輸入 重複執行數次,則每次都會執行相同的動作。但是一 個非既定的演算法在相同條件下重複執行則會產生不 同動作。
NP 問題的完整性 為了解決 NP 與集合 P 是否相同的疑問所投入的努力引導 出另一類屬於 NP 問題中的特殊問題,稱為 NP 問題的 完整性問題 (NP-complete problems) 。 例 : 旅行推銷員問題( Travelling Salesman Problem) 是一個多局部最優的最優化問題:有 n 個城市,一個推 銷員要從其中某一個城市出發,唯一走遍所有的城市, 再回到他出發的城市,求最短的路線。是最難的 NP 問 題
Polynomial problems 多項式問題 Nonpolynomial problems 非多項式問題 Solvable problems 可解決問題 Unsolvable problems 不可解決問題 NP problems ? 問題分類圖