算法分析與設計——近似算法

一、近似算法的概念

1、爲啥要研究近似算法?

\quad目前大規模的NPC問題我們無法通過計算得到,因此我們需要通過損失一部分精度的做法來找到多項式的近似算法。

2、近似算法精度的評價

\quad用近似算法得到的解與原問題的最優解比值不超過ρρ,則稱該算法是ρρ-近似算法。難點在於在不知道最優解的情況下證明近似解與最優解的近似程度。

二、幾個經典的近似問題

1、負載均衡問題

\quad負載均衡問題:給出mm個機器,nn個任務,設任務jj處理時長爲tjt_j。要求如下:

  • 每個任務只能在一個機器上不間斷的完成
  • 每個機器不能同時處理多個任務

\quadS[i]S[i]表示給機器ii處理的任務集合,則機器ii的處理時長爲L[i]=jS[i]tjL[i]=\sum_{j\in S[i]}t_j。負載均衡問題的目標就是 找到一種任務分配方案使得min(max(L[i]))min(max(L[i])),即讓每個機器處理的任務的時長儘可能均衡。
\quad這個問題是NPC問題,因爲PartitonPPartiton問題 \le_P 負載均衡問題

近似策略1

\quad貪心策略:每次在機器中選出當前處理時長最短的機器處理下一個任務。時間複雜度爲O(nlogm)O(nlogm),對於每個任務都需要從mm個機器中選出處理時長最短的機器,這個用優先隊列維護即可。這個近似算法是2-近似的,證明如下:

  • 引理1:設最優解爲LL^*,則LmaxjtjL^*\geq max_jt_j,因爲至少一個機器要處理一個任務,所有任務中花費時間最長的任務所需時間爲maxjtjmax_jt_j,故得到此不等式。
  • 引理2L1mjtjL^* \geq \frac{1}{m}\sum_jt_j。當每個機器處理任務的時長相同時L=1mjtjL^* = \frac{1}{m}\sum_jt_j,顯然其他情況下L>1mjtjL^* > \frac{1}{m}\sum_jt_j
  • 假設最後一個任務jj給了機器ii,說明在此之前,機器ii的負載時長最小,即L[i]tjL[k](k滿1km)L[i]-t_j\le L[k](對任意k滿足1 \le k \le m)
  • 因爲對任意一個機器kk都滿足L[i]tjL[k]L[i]-t_j\le L[k],因此m(L[i]tj)kL[k]m(L[i]-t_j)\le \sum_kL[k],即L[i]tj1mkL[k]=1mjtjL(2)L[i]-t_j\le \frac{1}{m}\sum_kL[k]=\frac{1}{m}\sum_j t_j \le L^*(引理2)
  • 到這裏,該近似算法求解的結果L=L[i]=(L[i]tj)+tjL+L=2LL=L[i]=(L[i]-t_j)+t_j \le L^*+L^*=2L^*,即L2LL\le 2L^*,該貪心策略是該問題的2-近似算法。

\quad該近似算法能達到最優解的2倍嗎,即上述不等式是緊的嗎?是緊的!

近似策略2

\quad策略2:將任務按照處理時長tjt_j從大到小排序,之後再每次在機器中選出當前處理時長最短的機器處理下一個任務。時間複雜度爲O(nlogn+nlogm)O(nlogn+nlogm)。這個近似算法是32\frac{3}{2}-近似的,證明如下:

  • 引理3:假設有mm個機器,超過mm個任務,這些任務按照處理時長排好序,t1t2tm+1t_1\ge t_2 \ge \cdots \ge t_{m+1} \ge \cdots,則顯然某個機器上至少要處理兩個任務,則最優解L2tm+1L^*\ge 2t_{m+1}
  • 從近似策略1的推導可以得到L=L[i]=(L[i]tj)+tjL=L[i]=(L[i]-t_j)+t_j,假設機器ii上至少有2個任務,則利用引理3可得tj12Lt_j\le \frac{1}{2}L^*,故L32LL\le \frac{3}{2}L^*,該策略是該問題的32\frac{3}{2}-近似算法。

\quad該近似算法能達到最優解的32\frac{3}{2}倍嗎,即上述不等式是緊的嗎?不是緊的!

2、中心點選擇問題

\quad問題描述:給出nn個點s1,,sns_1,\cdots,s_n,從中選出kk個點CC,設每個點到最近的中心點CC的距離爲did_i,問採取何種策略選出這kk個點使得r(C)=max(di)r(C)=max(d_i)最小。這個問題是NPH問題。
\quad貪心策略:初始時隨機選一個點作爲中心點,之後的k1k-1次,每次遍歷除已選做中心點的其他點,找出與該點距離最近的某個中心點計算出距離djd_j。最後在這些點中找出maxjdjmax_j d_j對應的點作爲下一個中心點。這個近似算法是2-近似的,證明如下:

  • CC^*是最優解對應的中心點,CC是用上述貪心算法選出的中心點,則r(C)2r(C)r(C)\le 2r(C^*)

3、帶權頂點覆蓋問題

\quad圖的每個頂點都有權重,找一個圖的頂點集合能覆蓋所有的邊,問如何選擇頂點使得這些頂點的權重和最小。用競價法去近似求解。

  • 對於某個頂點ii,其權重爲wiw_i,與該頂點相連的邊記爲pp,給這些邊賦值權重,使得e=(i,j)pewi\sum_{e=(i,j)}p_e \le w_i
  • SS爲任意一個集合覆蓋,則epeiSe=(i,j)peiSwi=w(S)\sum_ep_e\le \sum_{i\in S}\sum_{e=(i,j)}p_e\le \sum_{i\in S}w_i=w(S),故epew(S)\sum_ep_e\le w(S)
  • 算法流程:對於圖中任意一條邊e=(i,j)e=(i,j),令pe=0p_e=0,當i,ji,j頂點的e=(i,j)pe<wi,e=(i,j)pe<wj\sum_{e=(i,j)}p_e<w_i,\sum_{e=(i,j)}p_e<w_j時,增加pep_e直到滿足e=(i,j)pe=wie=(i,j)pe=wj\sum_{e=(i,j)}p_e=w_i或者\sum_{e=(i,j)}p_e=w_j。這時候相等的那個頂點放入SS中。
    在這裏插入圖片描述
  • 競價法是2-近似算法,證明如下:
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章