在分析根據遞迴方程分析演算法的時間複雜度時,常見到如下形式的方程,
t(n) = a * t(n/b) + f(n)
a >= 1,b > 1,f(n)一般是個簡單函式
這時可以有2種方法,來計算時間複雜度:
一是用遞迴樹,逐層代入原式,最終形成乙個級數,然後用乙個函式來表達,得到t(n)。
二是應用主項定理master method 。其實,主項定理也就是對遞迴樹方法的一種歸納,形成了固定的計算方式,並分三種情形來計算:
logb a 是以b為底
nlogb a :logb a為n的冪數
1.若對於某常數ε>0,有f(n) = o(nlogb a-ε ),則t(n) = o(nlogb a ) (取較大者,較大者變化得快)
2.若f(n) = o(nlogb a ),則t(n) = o(nlogb a *logn)
3.若f(n) = o(nlogb a+ε ),且對於某常數c>1和所有充分大的正整數n,有af(n/b)≤cf(n),則t(n)=o(f(n))(取較大者)
注意:大小比較是在多項式的意義上的大於和小於
t(n) = 2t(n/2) + nlgn 這樣的是不能用主方法的,不是多項式的意義上的比較,對於任何正整數都滿足。
t(n) = 2t(n/2) + nlogn = o(nlogn*logn)(由遞迴法得)
遞迴式時間複雜度的計算
寫給自己!遞迴式的時間複雜度很難人為的計算出來,根據演算法導論知道乙個應用公式 使用時主要思路如下 首先根據自己的遞迴 寫出t n t n 為遞迴所用的總時間,其中,n為輸入的規模,a為分解成子問題的個數,n b為子問題輸入的子規模,f n 是乙個漸進正的函式。a個子問題被分別遞迴的解決,時間各為t...
演算法複雜度計算 學習
1.1 大o表示法 上學的時候就學習了大o表示法表示乙個演算法的效率,也大概明白怎麼回事,知道如果沒有迴圈的一段程式的複雜度是常數,一層迴圈的複雜度是o n 兩層迴圈的複雜度是o n 2 我用 2表示平方,同理 3表示立方 但是一直對於嚴格的定義和用法稀里糊塗。1.1.1 定義 設乙個程式的時間複雜...
演算法複雜度計算學習
尊重原創,源博主位址 前面學習過好多次,都是得過且過一直沒有學會 lll 這次下定決心 演算法的效率主要有以下兩個複雜度開評估 時間複雜度 評估執行程式所需要的時間,可以估算出程式對處理器的使用程度 空間複雜度 評估程式執行所需要的儲存空間,可以估算出對計算機記憶體的實用程度 設計程式演算法的時候,...