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

2022-08-01 01:30:17 字數 1145 閱讀 8167

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^d*logn)

(3)log(b,a)複雜度為o(n^d)

2.接下來通過遞迴的方法求出乙個陣列中的最大值

public

class

test2 ;

system.

out.println(getmax(arr,0,arr.length-1

)); }

public

static

int getmax(int arr,int l,int

r)

int mid = (l+r)/2

;

int maxleft =getmax(arr,l,mid);

int maxright= getmax(arr,mid+1

,r);

return

math.max(maxleft,maxright);

}}

3.演算法分析:

(1)主函式:getmax(arr,0,3)。遞迴函式就是系統在幫你壓棧的操作。所謂的遞迴函式就是系統棧。任何遞迴行為都可以改成非遞迴。

(2)t(n)=at(n/b)+o(n^d)  t(n)表示樣本量為n的情況下的時間複雜度。該式是估計遞迴行為時間複雜度的通式。n/b代表的是子過程的樣本量,子問題的樣本量要比原始問題的樣本量要小,對於本問題,所有子過程的樣本量都是n/2,發生了2次,出去遞迴過程之外,剩下的就是進行比對了,所以時間複雜度就是o(1)。於是在b=2,a=2,d=0的時候的式子就是:t(n)=2t(n/2)+o(1)。只要滿足上面式子的,可以通過上述規律求出時間複雜度。這裡的d是0,a是2,b是2,所以時間複雜度是:o(n^log(b,a))=o(n),即時間複雜度是o(n)。

(3)log(b,a)=d  --->複雜度為 o(n^d*logn)

(4)t(n)=2t(n/2)+o(n^2)   即d=2的時候,時間複雜度是:o(n^2)

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

乙個遞迴行為的例子 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...

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

乙個遞迴行為的例子 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...

遞迴行為的實質,以及如何分析遞迴行為(重點)

遞迴就是自己呼叫自己。遞迴函式就是 系統在幫忙壓棧,保護現場 舉乙個例子 題目 如何用遞迴的形式,在整個陣列中 找最大值,即在l到r範圍內找全域性最大值。思路 分別找到左 右面的最大值,然後比較這兩個值的大小。主程式 簡單介紹 先定義了乙個 arr陣列,值為4 3 2 1 然後呼叫getmax函式,...