剖析遞迴行為和遞迴行為時間複雜度的估算

2021-08-18 08:07:49 字數 887 閱讀 4028

乙個遞迴行為的例子

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函式,...