第六章 近似算法
一. 近似算法的基本概念
首先什么是NP-完全問題(這部分參考博文:http://blog.csdn.net/xueyong4712816/article/details/6509592):NP=Non-deterministic Polynomial,也就是多項式復雜程度的非確定性問題。要了解NP問題,先從P問題開始,P就是Polynomial(多項式)的意思。P類問題就是所有復雜度為多項式時間的問題的集合。多項式就是n^k+n^(k-1)+……等等其中k為任意整數(一般不會很大)。這個數看起來很大,其實人類計算機相對都能接受。就怕遇到指數方增長的問題。
接下來探討非確定性問題。什么是非確定性問題呢?有些計算問題是確定性的,比如加減乘除之類,你只要按照公式推導,按部就班一步步來,就可以得到結果。但是,有些問題是無法按部就班直接地計算出來。比如,找大質數的問題。有沒有一個公式,你一套公式,就可以一步步推算出來,下一個質數應該是多少呢?這樣的公式是沒有的。再比如,大的合數分解質因數的問題,有沒有一個公式,把合數代進去,就直接可以算出,它的因子各自是多少?也沒有這樣的公式。這種問題的答案,是無法直接計算得到的,只能通過間接的“猜算”來得到結果。這也就是非確定性問題。而這些問題通常有個算法,它不能直接告訴你答案是什么,但可以告訴你,某個可能的結果是正確的答案還是錯誤的。這個可以告訴你“猜算”的答案正確與否的算法,假如可以在多項式時間內算出來,就叫做多項式非確定性問題。而如果這個問題的所有可能答案,都是可以在多項式時間內進行正確與否的驗算的話,就叫完全多項式非確定問題。
完全多項式非確定性問題可以用窮舉法得到答案,一個個檢驗下去,最終便能得到結果。但是這樣算法的復雜程度,是指數關系,因此計算的時間隨問題的復雜程度成指數的增長,很快便變得不可計算了。
了解了上述的概念之后,我們便可以理解ppt中的第二點:求解NP-完全問題很難,若輸入規模小倒是可以窮舉,否則用多項式算法近似,這也是本章的主題。
怎么理解那個Ratio Bound呢?第一點明白OPT是最優解,我們的近似解不可能優於它,所以對於最大化問題,A一定比OPT小而對於最小化問題A一定比OPT大,所以上面的連個max取了不同的值。注意這里的Ratio Bound指的是那個B(n),即是max{A/OPT, OPT/A}的上界。
結論:只要求出了Ratio Bound,就求出了相對誤差。
二. 一些經典問題
1. 頂點覆蓋問題
問題:給定一個N個點M條邊的無向圖G(點的編號從1至N),問是否存在一個不超過K個點的集合S,使得G中的每條邊都至少有一個點在集合S中。簡而言之就是在一無向圖中找一個點集,滿足:最小點集&&圖中的每條邊至少有一個點在這個點集中。這里一開始疑惑為什么頂點覆蓋問題是NP-完全問題。。。 ,百度了下之后發現。。。。我了個擦。。。 Np問題這么難,等我把我那本算法導論NP完全性啃完再來分析下這里,現在的重點在近似算法上。