如何計算遞推式的效率--引例合併排序

首先認識一個遞推式: 算法

T(n) = aT(n/b)+f(n)     (1.0) spa

這就是通用分治遞推式了,其中 排序

T(n)表示算法的運行時間,這樣aT(n/b)就不難理解爲把規模爲n的實例劃分b個規模爲n/b的實例,其中有a個須要求解的實例,f(n)表示將分解的結果合併起來所消耗的時間,聽起來拗口的話,那就先看個實例先吧. 效率

爲了方面後面的求解,咱們先了解一下下面的定理先吧,具體證實過程就略過啦,之後有機會再補上。 im

主定理 :若是在式(1.0)f(n)O(nd),其中d0,那麼: 時間

當a《bd時,T(n)=O(nd) ; a=bd時,T(n)=O(ndlogn) ;a>bdT(n)=O(nlogba). 實例

合併排序情景分析:

當n>1時,C(n) = 2C(n/2)+Cm(n) ,C(1) = 0;

C(n)就是要求的時間效率,2C(n/2)表示把原問題分解成兩個子問題(b=2),這兩個子問題都要求解(a=2),Cm(n)就是要把左右兩個有序序列合併的效率(f(n)).

在最壞的狀況下,Cm(n) = n-1.

根據主定理,由d=1,a=2,b=2,能夠得出T(n) = O(nlogn)。 

相關文章
相關標籤/搜索