NP、NP 完全性與歸約

應對 NP 完全(coping with NP-completeness)

證明你的問題是 NP 完全,感覺像撞上一堵牆,但這不是路的盡頭,而是該換策略的訊號。NP 完全只說:很可能沒有「又快、又精確、又通用」的演算法。實務上你幾乎從不需要這三者同時兼備。「應對 NP 完全」這個領域,就是你改而採用的那一整箱工具,而真實軟體每天都在解 NP 困難問題。

有好幾條已驗證的脫身路線,訣竅在於知道該用哪條。第一,「近似演算法」快速給出可證明接近最優的答案,例如度量版 TSP 中不超過最優 1.5 倍的路線,或不超過 2 倍的頂點覆蓋。第二,「啟發式」與工業級「求解器」(SAT 求解器、整數規劃求解器)沒有最壞情況保證,卻能例行地輾壓龐大的真實實例,因為真實輸入很少長得像人為構造的最壞情況。第三,「參數化」或固定參數可解演算法,在某個參數(如頂點覆蓋大小 k)很小時跑得快,把指數爆炸孤立到那個參數身上。第四,許多問題有「可解的特例」:2-SAT、二部圖的著色、限制在樹或平面輸入上的問題。第五,「平均情況」分析與隨機化能讓典型實例變容易,即使最壞情況很難。

誠實的框定是:NP 完全使工程問題更鋒利,而非終結它。它告訴你放棄為一般情形追求多項式時間的精確演算法(因為找到一個就解決了 P 對 NP),改而刻意選擇:放寬精確性、放寬通用性、利用結構、或接受一個機率性保證。所以知道一個問題是 NP 完全,確實是有用的資訊:它讓你不再把力氣浪費在不可能上,並指向那箱真正管用的工具。

面對 NP 困難的路線規劃,一家配送公司不會放棄。它跑一個快速啟發式(最近鄰再加局部改進)得到夠好的路線,或把實例餵給整數規劃求解器,為數千個站點找出可證明最優的路線,因為真實道路網遠比理論警告的最壞情況溫馴得多。

NP 完全是換工具的訊號:近似、用求解器/啟發式、利用小參數或特例,而非死路。

近似與固定參數可解並非免費午餐:許多問題甚至「難以近似」(經 PCP 定理證明),而固定參數可解只在所選參數確實很小時才幫得上忙。

又称
dealing with NP-hard problemswhat to do when a problem is NP-hard面對 NP 困難