本詳解的使用方式 十四張截圖共包含兩份測驗

  • 第一部分(Exercise-1 \(\sim\) 3):不可判定性測驗,共 5 題選擇題,主題對應 Week 10(可判定語言、停機問題、Entscheidungsproblem)。

  • 第二部分(Exercise-4 \(\sim\) 14):綜合測驗,共 11 題,涵蓋 NP 類別、SAT \(\to\) CLIQUE 歸約、主定理、DPLL 演算法、2SAT 蘊涵圖、機率圖靈機、單純形法、TSP 的 2-opt 與近似演算法。

每題的格式為:題目重述 \(\to\) 背景觀念 \(\to\) 逐選項詳細分析(或完整計算過程) \(\to\) 最終答案。建議先自己作答,再對照解析。

Q1:哪些問題已知是不可判定的?

題目(複選,2 分) 下列哪些問題已知(known)是不可判定的?

  1. 布林可滿足性問題(The Boolean Satisfiability Problem, SAT)

  2. 陷阱題!不可判定問題只是被「假設」存在,至今沒有人找到實際例子。

  3. 圖靈機的空語言問題(The emptiness problem for Turing Machines)

  4. 圖靈機的停機問題(The Halting problem for Turing Machines)

  5. 旅行推銷員問題(The Travelling Salesman Problem, TSP)

背景觀念:「很難」與「不可判定」是兩回事 「不可判定(undecidable)」的意思是:數學上證明了不存在任何健全、完備且對所有輸入都會停機的演算法。它跟「需要很久才算得完」(如 NP-hard 問題)完全不同——NP-hard 問題再慢仍然演算法可解,不可判定問題則是根本沒有演算法。

逐選項分析

  • (A) SAT\(\times\) 錯誤。SAT 是可判定的——公式只有有限多個變數 \(n\),把 \(2^n\) 種真值指派全部列出來逐一檢查,必定在有限時間內得到答案。SAT 的著名之處是它是 NP-complete(Cook–Levin 定理),意即「可判定但(目前相信)很難快速解」,這與不可判定是兩個不同層次的概念。

  • (B) 陷阱題選項\(\times\) 錯誤。不可判定問題不是假設,而是被嚴格證明存在。圖靈 1936 年就用對角線論證給出了具體例子(停機問題)。這個選項描述的情境比較像 P \(\ne\) NP 那種「尚未證明的猜想」,但不可判定性早已是定理。

  • (C) 圖靈機的空語言問題\(\checkmark\) 正確。此問題問:「給定圖靈機 \(M\)\(M\) 接受的語言是否為空集合(\(L(M)=\varnothing\))?」它已被證明不可判定:可以把接受問題歸約到它——想知道 \(M\) 是否接受 \(w\),可以造一台新機器 \(M_w\)\(M_w\) 忽略自己的輸入、直接模擬 \(M\) 執行於 \(w\),且唯有 \(M\) 接受 \(w\)\(M_w\) 才接受。於是 \(L(M_w)\ne\varnothing \iff M\) 接受 \(w\)。若空語言問題可判定,接受問題就可判定,矛盾。(更一般地,萊斯定理指出:關於圖靈機語言的任何非平凡性質都不可判定。)

  • (D) 停機問題\(\checkmark\) 正確。這是最經典的不可判定問題:「給定 \(\langle M,w\rangle\)\(M\) 在輸入 \(w\) 上是否會停機?」圖靈用對角線法(自我指涉的唱反調機器)證明不存在判定它的演算法。

  • (E) TSP\(\times\) 錯誤。TSP 是可判定的\(n\) 個城市的走訪順序只有 \((n-1)!/2\) 種,全部列舉、取最短即可——極慢(NP-hard),但保證會停。

答案 (C) 圖靈機的空語言問題(D) 圖靈機的停機問題

Q2:不可判定語言必然具有哪些性質?

題目(複選,2 分)\(L\) 是不可判定語言。下列敘述哪些必然為真

  1. \(L\)\(NP\)-hard。

  2. \(L\) 是無窮語言,即 \(L\) 包含無窮多個字。

  3. 任何對 \(L\) 健全(sound)且完備(complete)的演算法,必在某些輸入上無法終止。

  4. 任何對 \(L\) 健全且完備的演算法,必在所有輸入上無法終止。

  5. \(L\)\(NP\)-complete。

逐選項分析

(A) \(L\) 是 NP-hard\(\checkmark\) 正確。NP-hard 的意思是「至少跟 NP 裡的每一個問題一樣難」。NP 裡的每個問題都是可判定的(頂多用指數時間暴力搜尋所有證書即可判定);而 \(L\) 連「可判定」都做不到,也就是說任何 NP 問題若能解,也遠遠碰不到 \(L\) 的難度天花板——\(L\) 嚴格難於 NP 中的一切問題,因此是 NP-hard。反過來想更清楚:如果 \(L\) 竟然「不比某個 NP 問題難」,那 \(L\) 的難度就被一個可判定問題罩住,與 \(L\) 不可判定矛盾。

(B) \(L\) 是無窮語言\(\checkmark\) 正確。用反證法:若 \(L\)有限的,例如 \(L=\{w_1,\dots,w_m\}\),那就能寫一個超簡單的判定器——把這 \(m\) 個字硬編碼成查詢表,輸入進來逐一比對,符合就輸出 True、否則 False。這個程式健全、完備、永遠停機,於是 \(L\) 可判定,矛盾。所以不可判定語言一定包含無窮多個字。(同理其補集 \(\overline{L}\) 也必是無窮的。)

(C) 健全且完備的演算法必在某些輸入上不終止\(\checkmark\) 正確。這正是不可判定的定義換句話說。判定器 \(=\) 健全 \(+\) 完備 \(+\)所有輸入終止。既然 \(L\) 沒有判定器,那任何做到健全與完備的演算法,就必然在第三個條件上失守——存在至少一個輸入讓它跑不完。

(D) 必在所有輸入上不終止\(\times\) 錯誤。「某些」不能強化成「所有」。例如停機問題的辨識器(用萬能圖靈機直接模擬):對每一個「會停」的輸入它都能終止並輸出 True,只在「不會停」的輸入上卡住。一個在所有輸入上都不終止的程式反而什麼都沒計算,根本稱不上完備。

(E) \(L\) 是 NP-complete\(\times\) 錯誤。NP-complete \(=\) NP-hard \(+\) 屬於 NP。屬於 NP 意味著存在多項式時間的非決定性判定程序,特別地 \(L\) 必是可判定的(確定性地窮舉所有非決定性分支即可,指數時間但有限)。這與 \(L\) 不可判定矛盾。所以 \(L\) 是 NP-hard 卻永遠不可能是 NP-complete——「hard」沒有上限要求,「complete」有。

答案 (A)、(B)、(C)。記憶口訣:不可判定 \(\Rightarrow\) 難到 NP-hard、多到無窮、任何正確演算法必有跑不完的輸入;但絕不屬於 NP(故非 NP-complete),也不必在所有輸入上失敗。

Q3:為什麼不可判定語言的補集也不可判定?

題目(單選,2 分) 已知 \(L\) 是不可判定語言,為什麼其補集 \(\overline{L}\) 也必然不可判定?

  1. 如果我們能為 \(\overline{L}\) 找到健全、完備且會終止的演算法,只要把輸出的 True 與 False 互換,就能為 \(L\) 構造出健全、完備且會終止的演算法。

  2. 陷阱題!\(L\) 不可判定則必為無窮語言,所以其補集必為有限;而有限語言皆可判定!

  3. 陷阱題!不可判定問題的補集永遠是可判定的,因為「不可判定的相反」就是可判定。

  4. 每個語言都可以多項式歸約到它的補集,反之亦然。

詳細解答

正解是 (A),論證如下(反證法):

假設 \(\overline{L}\) 可判定,即存在判定器 \(\overline{M}\):健全、完備、對所有輸入終止。現在構造新機器 \(M\)

\(M(w)\):執行 \(\overline{M}(w)\);若 \(\overline{M}\) 輸出 True 則輸出 False,若輸出 False 則輸出 True

逐項檢查 \(M\)\(L\) 的判定器:

  • 終止\(\overline{M}\) 對所有輸入都在有限時間內停,\(M\) 只是多做一步「翻轉輸出」,所以 \(M\) 也對所有輸入終止。(這一步是關鍵——翻轉輸出保留了終止性,這在「辨識器」上做不到,因為辨識器可能根本不停,無輸出可翻。)

  • 健全\(M(w)=\) True \(\Rightarrow \overline{M}(w)=\) False \(\Rightarrow w\notin\overline{L} \Rightarrow w\in L\)

  • 完備\(w\in L \Rightarrow w\notin\overline{L} \Rightarrow \overline{M}(w)=\) False(\(\overline{M}\) 健全且終止,對非成員必答 False)\(\Rightarrow M(w)=\) True。

於是 \(L\) 可判定——與前提矛盾。故 \(\overline{L}\) 不可判定。\(\blacksquare\)

其他選項為何錯

  • (B)\(\times\) 錯誤。「無窮語言的補集必有限」是集合論錯誤:\(\Sigma^*\) 本身無窮,無窮集合挖掉一個無窮子集,剩下的完全可以仍是無窮(例如偶數的補集是奇數,皆無窮)。事實上 \(\overline{L}\) 必為無窮(若有限則可判定,翻轉輸出後 \(L\) 也可判定,矛盾)。

  • (C)\(\times\) 錯誤。「不可判定的相反是可判定」是文字遊戲:補集是對語言內容取補,不是對「可判定性」這個屬性取反。實際上可判定性在取補下封閉\(L\) 可判定 \(\iff \overline{L}\) 可判定(正是 (A) 的雙向論證)。

  • (D)\(\times\) 錯誤。「任何語言都可多項式歸約到其補集」並不成立——多項式歸約要求歸約函數在多項式時間內可計算,這對一般語言毫無保證;而且本題的層次是可判定性(用一般歸約即可),扯多項式歸約也文不對題。

答案 (A):把 \(\overline{L}\) 的判定器輸出翻轉,就得到 \(L\) 的判定器;因 \(L\) 無判定器,故 \(\overline{L}\) 亦無。

Q4:只有健全與完備(但不保證終止)的演算法能給我們什麼?

題目(複選,2 分) 假設我們拿到一個對不可判定語言 \(L\) 健全且完備的演算法。下列敘述哪些必然為真?

  1. \(w\notin L\),我們可以確定機器終將輸出 False。

  2. 陷阱題!不可判定問題不可能有健全且完備的演算法。

  3. \(w\in L\),我們可以確定機器終將輸出 True。

  4. 該演算法必定在某些輸入字上不終止。

背景觀念:辨識器(recogniser)的不對稱性 健全 \(+\) 完備但不保證終止的演算法,就是所謂的辨識器。它的行為天生不對稱:

  • \(w\in L\)」這一面有保障:完備性說 \(w\in L \Rightarrow M(w)=1\),而「輸出 \(1\)」隱含「有終止」——所以成員終將得到 True。

  • \(w\notin L\)」這一面沒保障:健全性只說「若輸出 True 則真的屬於 \(L\)」,它允許機器對非成員永遠不給答案。你等不到 False,也永遠不確定是「還沒算完」還是「不會回來了」。

逐選項分析

  • (A)\(\times\) 錯誤。如上所述,對 \(w\notin L\),機器可能輸出 False,也可能永遠跑下去。健全與完備都沒有承諾「非成員會得到答案」。

  • (B)\(\times\) 錯誤。存在具體反例:停機問題不可判定,但它有健全且完備的演算法——用萬能圖靈機模擬 \(\langle M,w\rangle\),一旦 \(M\) 停機就輸出 True。所有會停的實例終將被正確接受(完備),且它說 True 時絕對正確(健全);只是對不停機的實例它會陪著跑到永遠。(附註:並非所有不可判定語言都有辨識器——例如停機問題的補集就沒有;但本題題幹已假設「拿到了」這樣的演算法,且此選項宣稱「不可能有」,一個反例即足以推翻。)

  • (C)\(\checkmark\) 正確。這正是完備性的內容:\(w\in L \Rightarrow\) 機器終將輸出 True。

  • (D)\(\checkmark\) 正確。若它對所有輸入都終止,它就同時滿足健全、完備、終止三條件,成為 \(L\) 的判定器,與 \(L\) 不可判定矛盾。所以必存在讓它跑不完的輸入(而且由健全+完備可知,這些輸入必然都是非成員)。

答案 (C)、(D)。一句話總結:辨識器對「Yes」有交代、對「No」沒交代,而且必有卡住的輸入。

Q5:Entscheidungsproblem 的中譯/英譯是什麼?

題目(單選,2 分) Entscheidungsproblem 翻譯過來是:

  1. 鴨子離婚問題(The Duck Divorce problem)

  2. 停機問題(The Halting problem)

  3. 謂詞可滿足性問題(The Predicate satisfiability problem)

  4. 布林可滿足性問題(The Boolean satisfiability problem)

  5. 判定問題(The Decision problem)

詳細解答

德文 Entscheidung \(=\) 「決定、判定」,Problem \(=\) 「問題」,所以 Entscheidungsproblem 就是判定問題(The Decision Problem)——正解為 (E)。這是希爾伯特與阿克曼 1928 年提出的問題:找一個演算法,判定任意謂詞邏輯公式是否恆真。1936 年邱奇與圖靈分別證明它不可判定。

易混淆選項辨析

  • (B) 停機問題\(\times\) 錯誤。停機問題是圖靈用來證明 Entscheidungsproblem 無解的工具,兩者密切相關但不是同一個問題,更不是翻譯關係。

  • (C) 謂詞可滿足性\(\times\) 錯誤。很接近但不對——Entscheidungsproblem 問的是恆真性(validity/tautology),不是可滿足性。兩者互為對偶(\(F\) 恆真 \(\iff \lnot F\) 不可滿足),在課堂證明中我們正是透過這個對偶把接受問題歸約過去,但「翻譯」上它是判定問題。

  • (A) 鴨子離婚問題:出題者的幽默,感謝老師。

答案 (E) The Decision problem(判定問題)

第二部分:綜合測驗(11 題)

Q1:證明 SUBSET-SUM 屬於 NP(簡答,10 分)

題目 SUBSET-SUM 問題:輸入一個大小為 \(n\) 的整數集合 \(S=\{a_1,\dots,a_n\}\) 與目標整數 \(k\in\mathbb{Z}\),若存在子集 \(S'\subseteq S\) 使得 \(\sum_{a\in S'}a = k\) 則回傳 True。請用自己的話描述一個多項式時間的非決定性演算法,證明 SUBSET-SUM 屬於 \(NP\)

背景觀念:NP 的兩種等價定義

  1. 非決定性機器觀點:存在非決定性圖靈機,在多項式時間內判定該問題——機器可以在每一步「分岔」,同時探索所有可能,只要任何一條分支接受即算接受。

  2. 驗證者觀點:存在多項式時間驗證器 \(V\),對每個 Yes 實例都有一個多項式長度的證書(certificate)使 \(V\) 接受。

兩者等價:非決定性的「猜測」就等於「拿到證書」。本題用哪個觀點作答都可以。

詳細解答(非決定性演算法)

演算法描述

  1. 猜測階段(非決定性):對每個 \(i=1,2,\dots,n\),非決定性地選擇「\(a_i\) 放入 \(S'\)」或「\(a_i\) 不放入 \(S'\)」。這一步讓計算樹分岔成 \(2^n\) 條分支,每條分支對應一個候選子集 \(S'\)

  2. 驗證階段(決定性):在自己這條分支上,計算 \(\Sigma=\sum_{a\in S'}a\)(至多 \(n\) 次整數加法),檢查 \(\Sigma = k\) 是否成立;成立則接受,否則拒絕。

正確性

  • 若答案為 Yes(存在和為 \(k\) 的子集),則計算樹上「恰好猜中那個子集」的分支會接受 \(\Rightarrow\) 非決定性機器接受。(完備)

  • 若答案為 No,任何分支算出來的和都 \(\ne k\),所有分支都拒絕 \(\Rightarrow\) 機器拒絕。(健全)

時間複雜度:關鍵在於 NP 只要求每一條分支是多項式時間,不管分支總數。每條分支做 \(n\) 次二選一、至多 \(n\) 次加法、一次比較;若每個整數用 \(m\) 位元表示,一次加法花 \(O(m)\),整條分支 \(O(nm)\)——是輸入長度的多項式。\(\blacksquare\)

為什麼「暴力列舉 \(2^n\) 個子集」不行,非決定性卻可以? 決定性機器要依序檢查 \(2^n\) 個子集,總時間指數;非決定性機器把這 \(2^n\) 個檢查「攤平」到平行的分支上,每條分支只做自己那一份 \(O(nm)\) 的工作。官方參考答案正是這樣說的:「有 \(2^n\) 個可能子集,這不是多項式;但用非決定性機器 \(M\) 可以平行地檢查每個子集,每個平行處理器最多只需做 \(n\) 次加法,花多項式時間。」

Q2:SAT \(\to\) CLIQUE 歸約——哪條公式對應這張圖?(單選,5 分)

題目 CLIQUE 問題:輸入圖 \(G=(V,E)\) 與整數 \(k>2\),若 \(G\) 含大小為 \(k\) 的團(clique,兩兩相鄰的 \(k\) 個頂點)則回傳 True。圖中給定一個 9 頂點的圖,頂點標記為(上方群)\(P,\ R,\ \lnot Q\)、(左側群)\(Q,\ \lnot R,\ P\)、(下方群)\(\lnot P,\ Q,\ R\),並圈成三組。依課堂上的多項式歸約,下列哪條公式可滿足 \(\iff\) 該圖含大小 \(k=3\) 的團?

  1. \(F=(P\lor\lnot Q\lor R)\land(P\lor Q\lor\lnot R)\land(\lnot P\lor Q\lor R)\)

  2. \(F=(P\lor\lnot Q\lor R)\land(\lnot P\lor\lnot Q\lor\lnot R)\land(P\lor Q\lor R)\)

  3. \(F=(\lnot P\lor\lnot Q\lor\lnot R)\land(\lnot P\lor Q\lor\lnot R)\land(\lnot P\lor Q\lor R)\)

  4. \(F=(P\lor Q\lor R)\land(P\lor\lnot Q\lor\lnot R)\land(P\lor\lnot Q\lor\lnot R)\)

背景觀念:課堂上的 SAT \(\to\) CLIQUE 歸約 給定 CNF 公式 \(F=C_1\land C_2\land\cdots\land C_k\)(每個 \(C_j\) 是若干文字的析取),構造圖 \(G\)

  • 頂點:每個子句裡的每個文字出現(literal occurrence)各設一個頂點——所以子句就是圖上圈起來的「群」。

  • :兩頂點相鄰 \(\iff\)(1)它們屬於不同子句,且(2)它們不互相矛盾(不是 \(X\)\(\lnot X\) 的組合)。

  • 參數\(k=\) 子句數。

\(F\) 可滿足 \(\iff G\)\(k\)-團。直覺:一個 \(k\)-團必須從每個子句各挑一個文字(同子句不相鄰),且挑出的文字互不矛盾,恰好構成「每個子句都被滿足」的一致指派。

詳細解答

反向操作即可:從圖讀回公式。圖上的三個圈就是三個子句,圈內的文字就是子句的文字

方法一(比對頂點多重集,最快):數一數圖上 9 個頂點的標籤: \[\{P,\ P,\ Q,\ Q,\ R,\ R,\ \lnot P,\ \lnot Q,\ \lnot R\}\]\(P,Q,R\) 各出現兩次、\(\lnot P,\lnot Q,\lnot R\) 各出現一次。逐一檢查選項的文字多重集:

  • (A)\(\{P,\lnot Q,R\}\cup\{P,Q,\lnot R\}\cup\{\lnot P,Q,R\}\) \(=\) \(P{\times}2,\ Q{\times}2,\ R{\times}2,\ \lnot P,\ \lnot Q,\ \lnot R\)\(\checkmark\) 正確 完全吻合!

  • (B):含 \(\lnot Q\) 兩次(第一、二子句各一),但圖上只有一個 \(\lnot Q\) 頂點。\(\times\) 錯誤

  • (C):含 \(\lnot P\) 三次,圖上只有一個 \(\lnot P\)\(\times\) 錯誤

  • (D):含 \(P\) 三次、且 \(\lnot Q,\lnot R\) 各兩次,皆與圖不符。\(\times\) 錯誤

方法二(比對分組):圖上三個圈分別是 \(\{P,R,\lnot Q\}\)\(\{Q,\lnot R,P\}\)\(\{\lnot P,Q,R\}\),直接寫出 \[F=(P\lor R\lor\lnot Q)\land(Q\lor\lnot R\lor P)\land(\lnot P\lor Q\lor R),\] 調整文字順序即為選項 (A)。也可以抽查邊來驗證:例如上群的 \(P\) 與下群的 \(\lnot P\) 之間該有邊(矛盾文字)、同群的 \(P\)\(R\) 之間該有邊(同子句),而上群 \(P\) 與左群 \(Q\) 之間該有邊——與圖一致。

答案 (A)\(F=(P\lor\lnot Q\lor R)\land(P\lor Q\lor\lnot R)\land(\lnot P\lor Q\lor R)\)

Q3:為什麼 3-團的文字構成 \(F\) 的滿足指派?(簡答,10 分)

題目 請用自己的話解釋:為什麼 \(G\) 中任何 3-團所含的文字,構成 \(F\) 的一個滿足指派(satisfying assignment)?

詳細解答

\(C\)\(G\) 的一個 3-團(三個兩兩相鄰的頂點)。逐步論證:

第一步:\(C\) 必然「每個子句恰取一個文字」。 歸約的建圖規則裡,同一子句內的頂點之間沒有邊。所以團裡不可能同時包含同一子句的兩個文字(它們不相鄰,違反團的定義)。\(C\) 有 3 個頂點、圖上恰有 3 個子句,由鴿籠原理,\(C\) 恰好從每個子句各取一個文字。

第二步:\(C\) 中的文字互不矛盾。 建圖規則同時規定矛盾文字(\(X\)\(\lnot X\))之間沒有邊。團中任兩頂點都相鄰,所以 \(C\) 不可能同時含 \(X\)\(\lnot X\)

第三步:由 \(C\) 讀出一個合法的真值指派。\(C\) 中出現的每個文字設為真:若 \(X\in C\)\(X=\) True,若 \(\lnot X\in C\)\(X=\) False(\(C\) 中未提及的變數任意設定)。由第二步,這個規則不會對同一變數下達矛盾指令,所以它是一個良定義(一致)的指派。

第四步:這個指派滿足 \(F\) 由第一步,每個子句 \(C_j\) 都有一個文字被選入 \(C\)、並在第三步被設為真;子句是「或」,一個文字為真即整個子句為真。三個子句皆真,故合取式 \(F\) 為真。\(\blacksquare\)

對照官方參考答案 官方答案濃縮成兩點,正是上述第一、二步:「\(C\) 必須從每個子句各含一個文字,因為同子句的文字不相連;\(C\) 不可能包含互相矛盾的文字(那會使指派不合法),因為矛盾文字也不相連。」寫作答案時,建議像上面那樣補上第三、四步(指派良定義、每個子句被滿足),論證才完整。

Q4:主定理——哪些遞迴關係的解是 \(\Theta(n^3)\)?(複選,8 分)

題目 利用主定理(Master Theorem),判斷下列哪些遞迴關係描述的函數成長速率為 \(\Theta(n^3)\)。所有情況下皆假設 \(T(1)=1\)

  1. \(T(n)=9\,T(n/3)+(n^2-n-1)\)

  2. \(T(n)=2\,T(n/2)+\tfrac{1}{6}n(n+1)(2n+1)\)

  3. \(T(n)=5\,T(n/32)+\log_2(n^2+1)\)

  4. \(T(n)=8\,T(n/2)+n\)

  5. 以上皆非。

背景觀念:主定理三情況\(T(n)=a\,T(n/b)+f(n)\)\(a\ge1\), \(b>1\)),令臨界指數 \(d^*=\log_b a\),把 \(f(n)\)\(n^{d^*}\) 比大小:

  1. 情況 1(遞迴主導)\(f(n)=O(n^{d^*-\varepsilon})\)\(f\) 嚴格較小)\(\Rightarrow T(n)=\Theta(n^{d^*})\)

  2. 情況 2(平手)\(f(n)=\Theta(n^{d^*})\Rightarrow T(n)=\Theta(n^{d^*}\log n)\)

  3. 情況 3(\(f\) 主導)\(f(n)=\Omega(n^{d^*+\varepsilon})\) 且滿足正則條件 \(a\,f(n/b)\le c\,f(n)\)(某 \(c<1\)\(\Rightarrow T(n)=\Theta(f(n))\)

逐選項計算

(A) \(a=9,\ b=3\)\(d^*=\log_3 9=2\),即 \(n^{d^*}=n^2\)。而 \(f(n)=n^2-n-1=\Theta(n^2)\)——與 \(n^{d^*}\) 同階,情況 2\[T(n)=\Theta(n^2\log n).\] \(n^2\log n\)\(n^3\) 慢(\(\log n = o(n)\)),\(\times\) 錯誤

(B) \(a=2,\ b=2\)\(d^*=\log_2 2=1\)\(n^{d^*}=n\)。注意 \(f(n)=\tfrac16 n(n+1)(2n+1)\) 正是平方和公式 \(\sum_{i=1}^n i^2\),展開最高次項為 \(\tfrac{2n^3}{6}=\tfrac{n^3}{3}\),故 \(f(n)=\Theta(n^3)\)\(n^3\) 遠大於 \(n^{d^*}=n^1\)(取 \(\varepsilon=2\)),檢查正則條件: \[a\,f(n/b)=2\cdot\tfrac16\cdot\tfrac n2\left(\tfrac n2+1\right)\left(n+1\right)\approx \tfrac{n^3}{12}\le c\cdot\tfrac{n^3}{3}\quad(\text{取 }c=\tfrac12<1)\ \text{$\checkmark$}\] 情況 3\(T(n)=\Theta(f(n))=\Theta(n^3)\)\(\checkmark\) 正確

(C) \(a=5,\ b=32\)\(d^*=\log_{32}5=\frac{\ln 5}{\ln 32}\approx\frac{1.609}{3.466}\approx 0.464\)\(f(n)=\log_2(n^2+1)=\Theta(\log n)\)。對數成長慢於任何正冪次:\(\log n = O(n^{0.464-\varepsilon})\)(例如取 \(\varepsilon=0.2\)),情況 1\[T(n)=\Theta\!\left(n^{\log_{32}5}\right)\approx\Theta(n^{0.464}).\]\(n\) 都不到,離 \(n^3\) 差得遠,\(\times\) 錯誤

(D) \(a=8,\ b=2\)\(d^*=\log_2 8=3\)\(n^{d^*}=n^3\)\(f(n)=n=O(n^{3-\varepsilon})\)(取 \(\varepsilon=1\)),情況 1\[T(n)=\Theta(n^3),\] \(\checkmark\) 正確。(這正是普通矩陣乘法分治的遞迴形狀。)

答案 (B) 與 (D)。兩條達到 \(\Theta(n^3)\) 的路徑恰好相反:(B) 靠「每層做的工 \(f(n)=\Theta(n^3)\) 主導」,(D) 靠「分支數 \(8\) 使葉子數量 \(n^{\log_2 8}=n^3\) 主導」。

Q5:DPLL 應該先套用哪條規則?(單選,5 分)

題目 考慮下列命題子句集: \[(\lnot Q\lor\lnot R\lor T),\quad (\lnot P\lor Q\lor R\lor S),\quad (P\lor Q\lor\lnot S),\quad (\lnot Q\lor T),\quad (\lnot P\lor R\lor\lnot S)\] 對此子句集執行 DPLL 演算法時,應最先套用下列哪條規則?(選項:對 \(T\) 分支/其他皆非/以 \(\lnot T\) 做純文字消去/以單元子句 \(S\) 做單元傳播/以 \(T\) 做純文字消去/以單元子句 \(\lnot S\) 做單元傳播/矛盾,回溯)

背景觀念:DPLL 的規則優先順序 DPLL(Davis–Putnam–Logemann–Loveland)在每一步依下列優先序選擇動作:

  1. 單元傳播(Unit Propagation):若存在只含一個文字的子句(單元子句),該文字被迫為真,立即指派並化簡。

  2. 純文字消去(Pure Literal Elimination):若某變數在整個子句集中只以一種極性出現(只出現 \(X\) 或只出現 \(\lnot X\)),直接把該文字設為真,刪除所有包含它的子句。

  3. 分支(Branching):以上皆不可用時,挑一個變數猜真值,之後可能回溯。

詳細解答

第一步:找單元子句。逐一檢查五個子句的長度:\(3,4,3,2,3\)——最短的是 \((\lnot Q\lor T)\),有兩個文字,沒有單元子句,單元傳播不可用(所以「以 \(S\)\(\lnot S\) 做單元傳播」都錯,\(S\)\(\lnot S\) 出現的子句都不是單元子句)。

第二步:逐變數檢查純文字。列出每個變數出現的極性:

變數 正出現 負出現 判定
\(P\) 子句 3 子句 2, 5 兩種極性都有,不純
\(Q\) 子句 2, 3 子句 1, 4 不純
\(R\) 子句 2, 5 子句 1 不純
\(S\) 子句 2 子句 3, 5 不純
\(T\) 子句 1, 4 —— 只有正出現:純文字!

\(T\) 是純文字(\(\lnot T\) 從未出現),所以正確動作是以文字 \(T\) 做純文字消去:令 \(T=\) True,刪除子句 1 與子句 4(它們已被滿足)。注意「以 \(\lnot T\) 做純文字消去」是錯的——純的是 \(T\) 這個文字。

其他選項排除:不需要分支(還有更便宜的規則可用);也沒有空子句,不需回溯。

答案 以文字 \(T\) 做純文字消去(Pure Literal Elimination with literal \(T\)

Q6:對 \(Q\) 做純文字消去的結果(單選,5 分)

題目 考慮下列子句集: \[(P\lor R\lor\lnot S\lor\lnot T),\quad (P\lor Q),\quad (Q\lor R\lor\lnot S),\quad (\lnot R),\quad (P\lor Q\lor\lnot R\lor\lnot T)\] 對文字 \(Q\) 執行純文字消去後,結果為何?

詳細解答

確認 \(Q\) 是純文字\(Q\) 出現在子句 2、3、5,全部是正出現;\(\lnot Q\) 不出現。\(\checkmark\) 純文字。

規則的效果:純文字消去令 \(Q=\) True。凡是包含 \(Q\) 的子句都因此被滿足,可整句刪除;不包含 \(Q\) 的子句完全不動(注意 \(\lnot Q\) 不存在,所以沒有任何子句需要「刪掉其中一個文字」)。

逐句處理

子句 \(Q\) 處理
\((P\lor R\lor\lnot S\lor\lnot T)\) 保留
\((P\lor Q)\) 刪除
\((Q\lor R\lor\lnot S)\) 刪除
\((\lnot R)\) 保留
\((P\lor Q\lor\lnot R\lor\lnot T)\) 刪除

剩下的子句集為: \[(P\lor R\lor\lnot S\lor\lnot T),\qquad(\lnot R).\]

常見錯誤:選到「\((R\lor\lnot S\lor\lnot T),\ (Q),\ \dots\)」那種把 \(Q\) 從子句裡拿掉的選項——那是把純文字消去跟單元傳播的化簡動作搞混了。純文字消去是整句刪除含該文字的子句,絕不會把文字從子句中剔除,也不會產生新單元子句。

答案 \((P\lor R\lor\lnot S\lor\lnot T)\)\((\lnot R)\) 兩句。

Q7:2SAT 蘊涵圖的強連通分量(複選,6 分)

題目 考慮 2SAT 實例: \[(\lnot P\lor S)\land(P\lor\lnot R)\land(\lnot Q\lor S)\land(\lnot Q\lor\lnot S)\land(\lnot R\lor\lnot S)\land(R\lor\lnot S)\] 下列哪些文字集合是其蘊涵圖(implication graph)的強連通分量(SCC)?選項:\(\{R\}\)\(\{P,R,S\}\)\(\{\lnot P,P,\lnot Q,\lnot R,R,S,\lnot S\}\)\(\{\lnot Q\}\)\(\{Q\}\)\(\{\lnot P\}\)、以上皆非。

背景觀念:蘊涵圖的建法 每個子句 \((a\lor b)\) 等價於兩條蘊涵:\(\lnot a\to b\)\(\lnot b\to a\)(「其中一個必須真:若 \(a\) 假則 \(b\) 真」)。蘊涵圖以全部 \(2n\) 個文字為頂點、以這些蘊涵為有向邊。強連通分量 \(=\) 彼此可互相到達的最大頂點集。著名結論:公式可滿足 \(\iff\) 沒有變數 \(X\) 使 \(X\)\(\lnot X\) 落在同一個 SCC。

第一步:列出全部 12 條邊

子句 蘊涵一 蘊涵二
\((\lnot P\lor S)\) \(P\to S\) \(\lnot S\to\lnot P\)
\((P\lor\lnot R)\) \(\lnot P\to\lnot R\) \(R\to P\)
\((\lnot Q\lor S)\) \(Q\to S\) \(\lnot S\to\lnot Q\)
\((\lnot Q\lor\lnot S)\) \(Q\to\lnot S\) \(S\to\lnot Q\)
\((\lnot R\lor\lnot S)\) \(R\to\lnot S\) \(S\to\lnot R\)
\((R\lor\lnot S)\) \(\lnot R\to\lnot S\) \(S\to R\)

第二步:找環(環上的點屬於同一 SCC)

正文字側\(P\to S\)(子句 1)、\(S\to R\)(子句 6)、\(R\to P\)(子句 2)——三條邊構成環 \[P\ \to\ S\ \to\ R\ \to\ P,\] 所以 \(\{P,R,S\}\) 兩兩互達,屬於同一個 SCC。

負文字側(鏡像)\(\lnot S\to\lnot P\)(子句 1)、\(\lnot P\to\lnot R\)(子句 2)、\(\lnot R\to\lnot S\)(子句 6)構成環 \(\lnot S\to\lnot P\to\lnot R\to\lnot S\),故 \(\{\lnot P,\lnot R,\lnot S\}\) 也是一個 SCC。(這不是巧合:蘊涵圖有「斜對稱」性——把每條邊 \(u\to v\) 對映成 \(\lnot v\to\lnot u\) 仍是圖中的邊,所以 SCC 總是成對出現。)

\(Q\)\(\lnot Q\):檢查 \(Q\) 的入邊——邊 \(\dots\to Q\) 只會來自含正文字 \(Q\) 的子句,但沒有任何子句含正的 \(Q\),所以 \(Q\) 沒有入邊(只有出邊 \(Q\to S\)\(Q\to\lnot S\)),它自成單點 SCC \(\{Q\}\)。同理 \(\lnot Q\) 沒有出邊(只有入邊 \(\lnot S\to\lnot Q\)\(S\to\lnot Q\)),自成單點 SCC \(\{\lnot Q\}\)

第三步:逐選項判定

  • \(\{R\}\)\(\times\) 錯誤\(R\) 屬於較大的 SCC \(\{P,R,S\}\);SCC 是「極大」集合,真子集不算。

  • \(\{P,R,S\}\)\(\checkmark\) 正確(上述環)。

  • 全部七個文字一組:\(\times\) 錯誤。例如 \(Q\) 無入邊,別的點到不了 \(Q\),不可能與其他點同屬一個 SCC。

  • \(\{\lnot Q\}\)\(\checkmark\) 正確(單點 SCC)。

  • \(\{Q\}\)\(\checkmark\) 正確(單點 SCC)。

  • \(\{\lnot P\}\)\(\times\) 錯誤\(\lnot P\) 屬於 SCC \(\{\lnot P,\lnot R,\lnot S\}\)(選項中沒有列出這一組,但這不影響 \(\{\lnot P\}\) 單獨成立與否的判定)。

加碼:這個公式可滿足嗎? 四個 SCC 為 \(\{Q\}\)\(\{\lnot Q\}\)\(\{P,R,S\}\)\(\{\lnot P,\lnot R,\lnot S\}\),沒有任何變數與自己的否定同組,故可滿足。例如 \(P=R=S=\) True、\(Q=\) False 即為一組解(可逐子句驗證)。

答案 \(\{P,R,S\}\)\(\{\lnot Q\}\)\(\{Q\}\)

Q8:機率圖靈機——拒絕機率與期望終止時間(填空,16 分)

題目 給定機率圖靈機 \(M\) 在輸入字 \(w\) 上的組態樹(configuration tree):

(i)\(M\) 拒絕 \(w\) 的機率 \(\mathrm{Prob}(M(w)=0)\) 是多少?
(ii)\(M\) 在輸入 \(w\) 上的期望終止時間 \(\mathbb{E}[T_M(w)]\) 是多少?

背景觀念:怎麼讀組態樹 每個內部節點是機器的一個組態,每條邊標注該步隨機轉移的機率(同一節點的出邊機率和為 1)。一條「根到葉」的路徑就是一次可能的執行:其機率是沿路邊機率的乘積,其執行步數是路徑的邊數。

第一步:列出所有根到葉的路徑

路徑(葉節點) 機率計算 機率 步數
\(q_{\mathrm{accept}}\ (\sqcup bba\),捷徑\()\) \(0.25\) \(0.25\) 1
\(q_{\mathrm{accept}}\ (\sqcup baa)\) \(0.75\times0.33\times0.2\) \(0.0495\) 3
\(q_{\mathrm{reject}}\ (\sqcup aaa)\) \(0.75\times0.33\times0.8\) \(0.198\) 3
\(q_{\mathrm{accept}}\ (\sqcup bba)\) \(0.75\times0.67\times0.2\) \(0.1005\) 3
\(q_{\mathrm{reject}}\ (\sqcup aba)\) \(0.75\times0.67\times0.8\) \(0.402\) 3
合計 \(1.000\) \(\checkmark\)

(機率總和為 1,這是很好的驗算習慣。)

(i)拒絕機率

把兩條落在 \(q_{\mathrm{reject}}\) 的路徑機率相加: \[\mathrm{Prob}(M(w)=0)=0.75\times0.33\times0.8+0.75\times0.67\times0.8 =0.75\times0.8\times(0.33+0.67)=0.75\times0.8=\boxed{0.6}\] (提出公因數 \(0.75\times0.8\) 後括號恰為 1,可以少算很多。相應地接受機率 \(=0.25+0.0495+0.1005=0.4\),兩者和為 1 \(\checkmark\)。)

(ii)期望終止時間

終止時間 \(T_M(w)=\) 該次執行的步數(路徑邊數)。只有兩種深度:捷徑接受路徑 1 步(機率 \(0.25\)),其餘四條路徑都是 3 步(總機率 \(0.75\)): \[\mathbb{E}[T_M(w)]=1\times 0.25+3\times 0.75=0.25+2.25=\boxed{2.5}\]

答案 (i)\(\mathrm{Prob}(M(w)=0)=0.6\);(ii)\(\mathbb{E}[T_M(w)]=2.5\) 步。

Q9:單純形法——樞軸行列與一次迭代(10 分)

題目 考慮下列單純形表(tableau): \[T_1=\ \begin{array}{|cccccc|c|} \hline x & y & s_1 & s_2 & s_3 & C & \\ \hline -9 & -5 & 1 & 0 & 0 & 0 & 9\\ 2 & -6 & 0 & 1 & 0 & 0 & 8\\ -3 & 10 & 0 & 0 & 1 & 0 & 7\\ \hline -9 & -7 & 0 & 0 & 0 & 1 & 0\\ \hline \end{array}\] (a)樞軸(pivot column)是哪一欄?(b)樞軸(pivot row)是哪一列?(c)執行一次單純形迭代得到 \(T_2\),讀出指定位置的值 \(X\)(第 3 列 \(x\) 欄)、\(Y\)(目標列 \(y\) 欄)、\(Z\)(第 1 列 \(s_2\) 欄)、\(W\)(第 2 列最右端常數)。

背景觀念:單純形法一次迭代的三個步驟

  1. 選樞軸行:看最底下的目標函數列,挑最負的係數所在欄(改善目標最快的方向)。

  2. 選樞軸列:對樞軸行中係數為正的每一列做比值檢定(ratio test):\(\dfrac{\text{最右端常數}}{\text{樞軸行係數}}\),取比值最小的列(走最遠又不違反任何限制式)。係數 \(\le 0\) 的列不參加。

  3. 列運算:把樞軸元素縮放成 1,再用列運算把樞軸行的其他元素全消成 0。

(a)樞軸行

目標列係數:\(x:-9\)\(y:-7\)(其餘非負)。最負的是 \(-9\),故樞軸行為 \(x\)

(b)樞軸列

檢查 \(x\) 欄各列係數:第 1 列 \(-9\)(負,跳過)、第 2 列 \(2\)(正 \(\checkmark\))、第 3 列 \(-3\)(負,跳過)。唯一可用的是第 2 列,比值 \(=8/2=4\)。故樞軸列為第 2 列,樞軸元素為 \(2\)

(c)一次迭代的完整列運算

記三條限制列為 \(R_1,R_2,R_3\),目標列為 \(R_4\)

步驟 1\(R_2\leftarrow R_2/2\)(樞軸化為 1): \[R_2'=\begin{pmatrix}1 & -3 & 0 & 0.5 & 0 & 0 & \big| & 4\end{pmatrix}\]

步驟 2:消去其他列的 \(x\) 欄:

  • \(R_1\leftarrow R_1+9R_2'\)\((-9{+}9,\ -5{-}27,\ 1,\ 0{+}4.5,\ 0,\ 0\mid 9{+}36)=(0,\,-32,\,1,\,4.5,\,0,\,0\mid 45)\)

  • \(R_3\leftarrow R_3+3R_2'\)\((-3{+}3,\ 10{-}9,\ 0,\ 0{+}1.5,\ 1,\ 0\mid 7{+}12)=(0,\,1,\,0,\,1.5,\,1,\,0\mid 19)\)

  • \(R_4\leftarrow R_4+9R_2'\)\((-9{+}9,\ -7{-}27,\ 0,\ 0{+}4.5,\ 0,\ 1\mid 0{+}36)=(0,\,-34,\,0,\,4.5,\,0,\,1\mid 36)\)

得到第二張表: \[T_2=\ \begin{array}{|cccccc|c|} \hline x & y & s_1 & s_2 & s_3 & C & \\ \hline 0 & -32 & 1 & \mathbf{4.5}\,(Z) & 0 & 0 & 45\\ 1 & -3 & 0 & 0.5 & 0 & 0 & \mathbf{4}\,(W)\\ \mathbf{0}\,(X) & 1 & 0 & 1.5 & 1 & 0 & 19\\ \hline 0 & \mathbf{-34}\,(Y) & 0 & 4.5 & 0 & 1 & 36\\ \hline \end{array}\]

對照題目模板的位置:\(Z\) 在第 1 列 \(s_2\)\(=4.5\)\(W\) 是第 2 列最右端常數 \(=4\)\(X\) 在第 3 列 \(x\)\(=0\)\(Y\) 在目標列 \(y\)\(=-34\)

答案 (a)\(x\) 欄;(b)第 2 列;(c)\(X=0,\ Y=-34,\ Z=4.5,\ W=4\)

Q10:TSP 的 2-opt 演算法(作答題,15 分)

題目 考慮五個城市的 TSP 實例(下圖),邊上數字為距離,粗線為最小生成樹(MST)。以 MST 的前序走訪(preorder traversal)作為初始路線,套用 2-opt 演算法求出(局部)最佳路線。第一行寫初始路線,之後每套用一次 2-opt 交換寫一行,最後一行是(局部)最佳路線;路線以 \(A\) 開頭並回到 \(A\)

(邊權整理:\(AB=5,\ AC=16,\ AD=7,\ AE=19,\ BC=9,\ BD=4,\ BE=11,\ CD=17,\ CE=3,\ DE=20\);MST \(=\{AB,BC,BD,CE\}\),總重 \(5+9+4+3=21\)。)

背景觀念:2-opt 交換 2-opt 是 TSP 的局部搜尋法:從目前路線中挑兩條不相鄰的邊拆掉,把中間的一段路線反轉後重新接起來(這是唯一能重新接回一條迴路的方式)。若新路線更短就採用,重複直到沒有任何 2-opt 交換能再改善——此時稱為(局部)最佳。

第一步:由 MST 前序走訪取得初始路線

MST 的邊為 \(\{AB,\ BC,\ BD,\ CE\}\)。以 \(A\) 為根畫出樹:\(A\) 的子節點是 \(B\)\(B\) 的子節點是 \(C\)\(D\)\(C\) 的子節點是 \(E\)。深度優先前序走訪(子節點按字母序): \[A\ \to\ B\ \to\ C\ \to\ E\ (\text{回溯})\ \to\ D\] 得初始路線 \(\textbf{A,B,C,E,D,A}\),成本: \[AB+BC+CE+ED+DA = 5+9+3+20+7 = 44.\]

第二步:第一次 2-opt 交換

檢視目前路線的五條邊 \(\{AB,BC,CE,ED,DA\}\),最貴的是 \(ED=20\)。嘗試拆掉 \(ED\)\(AB\)(成本合計 \(25\)):反轉中段 \(B,C,E\),新路線為 \(A,E,C,B,D,A\)——同一條迴路也可寫成 A,D,B,C,E,A。新邊為 \(AD=7\)\(EB\)…逐邊列出: \[AD+DB+BC+CE+EA=7+4+9+3+19=42\quad(\text{改善 }44\to 42\ \text{$\checkmark$ 採用})\] (等價的看法:拆 \(\{AB=5,\ ED=20\}\) 換成 \(\{AE=19,\ BD=4\}\)\(25\to 23\),總成本下降 2。)

第三步:第二次 2-opt 交換

目前路線 \(A,D,B,C,E,A\),五條邊為 \(AD=7\)\(DB=4\)\(BC=9\)\(CE=3\)\(EA=19\)。最貴的是 \(EA=19\)。拆掉 \(EA\)\(BC\)(合計 \(28\)),反轉中段 \(C,E\),新路線 \(A,D,B,E,C,A\)——同一條迴路即 A,C,E,B,D,A\[AC+CE+EB+BD+DA=16+3+11+4+7=41\quad(\text{改善 }42\to 41\ \text{$\checkmark$ 採用})\]

第四步:驗證已達(局部)最佳

對路線 \(A,C,E,B,D,A\)(邊集 \(\{AC,CE,EB,BD,DA\}\))檢查全部 \(5\) 種合法的 2-opt 交換:

拆掉的兩邊 得到的新路線 新成本
\(AC,\ EB\) \(A,E,C,B,D,A\) \(19+3+9+4+7=42\)
\(AC,\ BD\) \(A,B,E,C,D,A\) \(5+11+3+17+7=43\)
\(CE,\ BD\) \(A,C,B,E,D,A\) \(16+9+11+20+7=63\)
\(CE,\ DA\) \(A,C,D,B,E,A\) \(16+17+4+11+19=67\)
\(EB,\ DA\) \(A,C,E,D,B,A\) \(16+3+20+4+5=48\)

全部 \(\ge 42 > 41\),沒有任何交換能改善——\(A,C,E,B,D,A\)(成本 41)是 2-opt 局部最佳。(事實上把 12 條相異迴路全列出來可驗證 41 就是全域最佳,與官方說明「此題設計成全域最佳可從任何合法初始路線在 2–3 步內到達」一致。)

答案(依題目要求逐行書寫) A,B,C,E,D,A(初始路線,成本 44)
A,D,B,C,E,A(第一次 2-opt,成本 42)
A,C,E,B,D,A(第二次 2-opt,成本 41,局部=全域最佳)

Q11:Metric TSP 是 2-approximable 是什麼意思?(簡答,10 分)

題目 說 Metric TSP(滿足三角不等式的 TSP)是 2-approximable,是什麼意思?

詳細解答

定義:Metric TSP 是 2-approximable,意思是——

存在一個多項式時間的近似演算法 \(M\),對每一個問題實例,\(M\) 回傳的路線長度至多是該實例全域最佳解長度的兩倍 \[\mathrm{cost}(M(I))\ \le\ 2\cdot\mathrm{OPT}(I)\qquad\text{對所有實例 }I.\]

作答時必須涵蓋的三個要點(官方答案特別點名):

  1. 存在性:只要求「存在」這樣一個演算法即可(不是說每個演算法都達標)。

  2. 上界為兩倍最佳:回傳解 \(\le 2\times\) 全域最佳。它是保證的上界,實務上往往更好;且注意是與「最佳解」比,不是與其他演算法比。

  3. 對所有輸入實例成立:這個保證是最壞情況保證,不能只對某些實例成立、也不是平均而言。

另外隱含的重要條件是多項式時間——如果允許指數時間,直接窮舉就能拿到最佳解,「近似」就沒有意義了。

加碼:為什麼 Metric TSP 做得到 2 倍?(經典 MST 演算法)

  1. 求最小生成樹 MST(多項式時間)。注意 \(\mathrm{cost}(\mathrm{MST})\le\mathrm{OPT}\):把最佳迴路拿掉一條邊就是一棵生成樹,而 MST 是最便宜的生成樹。

  2. 沿 MST 做深度優先走訪,每條邊來回各走一次,得到成本 \(\le 2\cdot\mathrm{cost}(\mathrm{MST})\) 的封閉巡行。

  3. 用「抄捷徑」跳過重複造訪的城市(前序走訪的順序)。三角不等式保證抄捷徑不會變長——這正是需要 Metric 假設的地方。

合計:回傳路線 \(\le 2\cdot\mathrm{cost}(\mathrm{MST})\le 2\cdot\mathrm{OPT}\)。(這也解釋了上一題為何用「MST 前序走訪」當 2-opt 的初始路線——它本身就已是不錯的 2-近似起點。)順帶一提:一般(非 Metric)TSP 則不存在任何常數倍近似演算法(除非 P \(=\) NP)。

答案(範例作答) 「存在一個多項式時間的近似演算法 \(M\),使得對此問題的每一個實例,\(M\) 回傳的解之長度至多為該實例全域最佳解長度的兩倍。」——關鍵字:存在這樣的演算法、兩倍最佳解的上界、對所有可能輸入實例皆成立。

附錄:本卷重點速查表

主題 一句話重點
不可判定的例子 停機問題、圖靈機空語言問題(皆已被證明);SAT、TSP 只是「難」,仍可判定。
不可判定 \(\Rightarrow\) 無窮語言、NP-hard、任何健全完備演算法必有卡住的輸入;但絕非 NP-complete。
補集的不可判定性 判定器輸出可翻轉且保留終止性,故可判定性對取補封閉。
辨識器的不對稱 \(w\in L\) 終將得到 True;\(w\notin L\) 可能永遠沒有答案。
Entscheidungsproblem 德文直譯「判定問題」;問謂詞邏輯公式是否恆真;不可判定。
NP 成員證明 非決定性「猜」一個解(證書),再用多項式時間「驗」。
SAT \(\to\) CLIQUE 子句 \(=\) 頂點群;跨群且不矛盾才連邊;\(k=\) 子句數。
主定理 比較 \(f(n)\)\(n^{\log_b a}\):小 \(\Rightarrow\) 葉子主導;平 \(\Rightarrow\)\(\log\);大 \(\Rightarrow\) \(f\) 主導。
DPLL 優先序 單元傳播 \(>\) 純文字消去 \(>\) 分支;純文字消去是「整句刪除」。
2SAT 蘊涵圖 \((a\lor b)\leadsto \lnot a\to b,\ \lnot b\to a\)\(X\)\(\lnot X\) 同 SCC \(\iff\) 不可滿足。
機率圖靈機 路徑機率 \(=\) 邊機率乘積;期望時間 \(=\sum(\text{步數}\times\text{機率})\)
單純形法 樞軸行取目標列最負;樞軸列取正係數中比值最小;列運算清空樞軸行。
-opt 拆兩條不相鄰邊、反轉中段重接;無法再改善即局部最佳。
-approximable 存在多項式時間演算法,對所有實例回傳 \(\le 2\cdot\)OPT 的解。