作者 | fcamel (飛啊!起舞的小駱駝) | 看板 | P_fcamel |
標題 | [formal] 背包問題的DP is pseudo polynomial time |
時間 | Tue Jan 4 18:47:55 2005 |
背包問題眾所皆知是NP complete,
但它有DP的解法, 若有 N 個item, 背包能裝的max weight是W,
需要O(N*W)的時間
看起來很像polynomial time,
使我一度搞不清楚input size的定義
今天去找老師確認觀念,
其實很簡單, 像是求質數的笨方法需要N^(0.5)的時間 (N是數字的值),
它不是polynomial time, 而是exponential time,
因為input size是log(N), 所以 N^(0.5) = (2^log(N))^(0.5)
同樣地, O(N*W), W是個值, 應該表示成2^log(W), log(W)是W的size,
所以即使是DP解仍是exponential time, 非polynomial
理論上這樣說沒錯啦, 但algorithm或是解題時又是另一回事了,
所以和別人討論complexity時要分清楚是用什麼角度分析 :p
個人的感覺是,
當我在想algo時, 可能寫出個O(k*n), 並且表示這個做法快多了,
如果有個傢伙跳出來說,
"不不不, 你那個n要用size去算, 其實是exponential的"
我會覺得這樣的討論很蠢, 很沒意思,
但在討論NP, formal language, 計算理論(*1)時,
對方這麼說的話, 就很有道理了
PS
*1
今天sctsai宣傳了一下計算理論, 聽起來很有趣的樣子,
在更高深莫測的地方做更抽象的思考, 嗯, 有什麼用是另一回事
但他建議課不涼的人別去修, 不然會爆的
|