《算法導論》-- 分治策略

1. 步驟:
  • 分解:將問題劃分為一些子問題,子問題的形式和原問題一樣,只是規模更小;
  • 解決:遞歸的求解出子問題,如果子問題規模足夠小,則停止遞歸,直接求解;
  • 合并: 將子問題的解組合成原問題的解;
2. 遞歸式
  • 代入法:我們猜測一個界,然后用數學歸納法證明這個界是正確的
    Ex:
    T(n) = 4T(n/2) + n
    --Guess: T(n) = O(n2)
    --Assume :T(k)<=ck2 for k <n
    --T(n) = 4T(n/2) + n<=4c(n/2)2+n = cn2+n

--Guess: T(n) = O(n2)
--Assume :T(k)<=c1k2-c2k for k <n
--T(n) = 4T(n/2) + n<=4c1(n/2)2-c2(n/2)+n=c1n2+(1-2c2)n=c1n2-c2n-(-1+c2)n need (-1+c2)>0則有c2>1
and T(1) <= c1-c2 so c1 > c2

  • 遞歸樹法: 將遞歸式轉換為一棵樹,其結點表示不同層次的遞歸產生的代價,然后采用邊界和技術來解遞歸式
    Ex: T(n)=T(n/4)+T(n/2)+n2
    遞歸樹展開:


    image.png

    image.png

    葉節點(即最后一層節點)數小于n,這個很容易理解,完全二叉樹的葉節點是n,這棵樹的遞歸速度更快,每一層的節點更少。


    image.png

這是個幾何級數求和,即 1+5/16n2+25/256n2+...(5/16)(k次方)*n2
由 1+1/2+1/4...+1/n(k次方) <2得 上式<2n2。

  • 主方法:可求解形如下面公式的遞歸式的界:
    T(n) = aT(n/b) + f(n)
    其中 a>= 1,b>1,f(n)是一個給定的函數。這種形式的遞歸式很常見,它刻畫了這樣一個分治算法:生成a個子問題,每個子問題的規模是原問題的規模的1/b,分解和合并步驟共花費的時間為f(n)。

有三種情況:


image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容