乙個遞迴行為的例子
master公式的使用
t(n) = a*t(n/b) + o(n^d)
t(n)是樣本量為n時的時間複雜度,n/b是劃分成子問題的樣本量,子問題發生了a次,後面o(n^d)是除去呼叫子過程之外的時間複雜度。
比如要求乙個陣列的最大值:
public static int getmax(int arr, int l, int r)
int mid = (l + r) >>> 1;
int maxleft = getmax(arr, l, mid);
int maxright = getmax(arr, mid + 1, r);
return math.max(maxleft, maxright);
}t(n) = 2*t(n/2) + o(1);
這裡劃分成的遞迴子過程的樣本量是n/2,這個相同的樣本量發生了2次,除去呼叫子過程之外的時間複雜度是o(1),因為求最大值和判斷if複雜度是o(1),所以n^d=1,所以d=0.
那麼根據如下公式判斷
1) log(b,a) > d -> 複雜度為o(n^log(b,a))
2) log(b,a) = d -> 複雜度為o(n^d * logn)
3) log(b,a) < d -> 複雜度為o(n^d)
這裡log(b, a)(以b為底a的對數) = log(2, 2)=1 > d=0
所以複雜度為o(n^log(2, 2))===>o(n),因此也就可以解釋為什麼歸併排序的時間複雜度為nlogn了
****************************************talk is cheap, show me the code***********************************====
剖析遞迴行為和遞迴行為時間複雜度的估算
乙個遞迴行為的例子 master公式的使用 t n a t n b o n d t n 是樣本量為n時的時間複雜度,n b是劃分成子問題的樣本量,子問題發生了a次,後面o n d 是除去呼叫子過程之外的時間複雜度。比如要求乙個陣列的最大值 public static int getmax int a...
剖析遞迴行為實質和遞迴行為時間複雜度的估算
1.遞迴演算法的時間複雜度 master公式的使用 t n a t n b o n d master公式的適用範圍 劃分的子過程規模是一樣的情況下,只是發生了a次,這種情況下才能運用master來求解。1 log b,a d 複雜度為o n log b,a 2 log b,a d 複雜度為 o n ...
遞迴行為的實質,以及如何分析遞迴行為(重點)
遞迴就是自己呼叫自己。遞迴函式就是 系統在幫忙壓棧,保護現場 舉乙個例子 題目 如何用遞迴的形式,在整個陣列中 找最大值,即在l到r範圍內找全域性最大值。思路 分別找到左 右面的最大值,然後比較這兩個值的大小。主程式 簡單介紹 先定義了乙個 arr陣列,值為4 3 2 1 然後呼叫getmax函式,...