### Definition ![Pasted Graphic 17](https://hackmd.io/_uploads/HJXyxXHvp.jpg) * NPC 是用在講一個 problem 有多難,而非有多簡單 * NPC 並非用在 opt problem(找出某個 optimal solution 的 problem),而是用在 decision problem(判斷是 Y / N 的problem) > 可以想像 decision problem 是一個 function,把 instance set I map 到 {0, 1} --- 通常我們要講一個 opt problem 是 hard 時,我們可以從它的 related decision problem 下手,因為 decision problem 通常比較簡單(至少不會比求 opt 難) >例如: >>一個 opt problem: **shortest path** 它的 related decision problem: **path** *(給定一個 digraph G、 點 u, v、 int k ,是否存在一條 path 從 u 到 v,用至多 k 個 edges)* 從這個例子可以知道為什麼求解 decision problem 比 opt problem 容易: >opt → decision >>如果我們可以解從 u 到 v 的 shortest path,我們就可以在求得最短路徑後,再拿最短路徑長去跟 decision problem 的 k 做比較,即可知是否存在長度為 k 的 path。 如果 opt problem easy → decision problem 也 easy 如果 decision problem 就已經是 hard 了 → opt problem hard 因此,由這個概念可衍伸出 Polynomial Reduction 的意義: ### Polynomial Reduction ![polynomial-time](https://hackmd.io/_uploads/SywDV7BPp.jpg) > By reducing solving problem A to solving problem B, we use the easiness of B to prove the easiness of A >> 用 B 很簡單來證 A 很簡單 :::success #### 證一個 problem 沒有 polynomial time algo 的方法: ::: 假設我們要證一個 problem B 沒有 polynomial time 的 algo - 如果我們有一個已知沒有 polynomial time 的 algo 的 decision problem A - 如果我們也有一個 polynomial time reduction 可以把 A 的problem instance 轉換成 B 的 problem instance 即可證 B 不可能有 polynomial time 的algo :::success #### 證一個 problem 是 NPC 的方法: ::: 類似上方證法,但我們不能假設 A 絕對沒有 polynomial time 的algo,而是改為 assume A 是 NPC,由是 NPC 的 A 來polynomial reduce 到 B,即證 B 是 NPC。