【算法设计与分析】14 分治算法的一般描述和分析方法
本文主要描述分治算法的一般描述和分析方法。銜接上一篇文章:【算法設計與分析】13 分治策略的設計思想
文章目錄
- 1 分治算法的一般性描述
- 1.1 分支算法的時間分析
- 1.2 兩類常見的遞推方程與求解方法
- 2 總結
1 分治算法的一般性描述
- 設分治算法為:Divide-and-Conquer§
- 設計要點
原問題可以劃分或者規約為規模較小的子問題。其中子問題之間遵循以下的規則:
1. 子問題與原問題具有相同的性質2. 子問題的求解彼此獨立3. 劃分時,子問題的規模盡可能均衡子問題較小時可以直接求解
子問題的解綜合可以得到原問題的解
算法的實現:迭代或者遞歸
1.1 分支算法的時間分析
時間復雜度函數的遞推方程:
- W(n)=W(∣P1∣)+W(∣P2∣)+...+W(∣Pk∣)+f(n)W(n)=W(|P_1|)+W(|P_2|)+...+W(|P_k|)+f(n)W(n)=W(∣P1?∣)+W(∣P2?∣)+...+W(∣Pk?∣)+f(n)
- W(c)=CW(c)=CW(c)=C
其中
1.2 兩類常見的遞推方程與求解方法
- f(n)=∑inaif(n?i)+g(n),(1)f(n) = \sum_i^n a_i f(n-i)+g(n){, (1)}f(n)=i∑n?ai?f(n?i)+g(n),(1)
- f(n)=af(nb)+d(n),(2)f(n)=af(\frac{n}{b}) + d(n){, (2)}f(n)=af(bn?)+d(n),(2)
例子:
Hanoi塔,W(n)=2W(n?1)+1W(n)=2W(n-1)+1W(n)=2W(n?1)+1
二分檢索,W(n)=W(n/2)+1W(n)=W(n/2)+1W(n)=W(n/2)+1
歸并排序,W(n)=2W(n/2)+n?1W(n)=2W(n/2)+ n-1W(n)=2W(n/2)+n?1
那么這些遞推方程如何求解?
- 方程1:f(n)=∑inaif(n?i)+g(n)f(n) = \sum_i^n a_i f(n-i)+g(n)f(n)=∑in?ai?f(n?i)+g(n)
- 方程2:f(n)=af(nb)+d(n)f(n)=af(\frac{n}{b}) + d(n)f(n)=af(bn?)+d(n)
對于方程2,可以使用主定理,該定理可以很快求解出方程的解,前面的文章已經學習過主定理,這里再次提一下:
- 對于方程T(n)=aT(n/b)+d(n)T(n)=aT(n/b)+d(n)T(n)=aT(n/b)+d(n)
T(n)={O(nlogba),a=?1O(logn),a=1T(n)= \begin{cases} O(n^{log_ba}), & \text {$a \not= 1$} \\ O(logn), & \text{a=1} \end{cases} T(n)={O(nlogb?a),O(logn),?a?=1a=1?
T(n)={O(n),a?<?bO(nlogn),a=bO(nlogba),a>bT(n)= \begin{cases} O(n), & \text {a < b} \\ O(nlogn), & \text{a=b} \\O(n^{log_b{a}}), &\text{a>b} \end{cases} T(n)=??????O(n),O(nlogn),O(nlogb?a),?a?<?ba=ba>b?
注:上述的logbalog_balogb?a中的b是以b為底的意思,但是上面的公式顯示的不明顯。
2 總結
- 想要徹底理解分治算法的思想,還需要多做練習,后面的文章會結合具體的例子,來講解分治算法的思想在具體應用中的使用
總結
以上是生活随笔為你收集整理的【算法设计与分析】14 分治算法的一般描述和分析方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SQLyog创建表
- 下一篇: android 非root app 捕捉