非遞迴演算法時間複雜度分析較為簡單,通常是計算演算法中基本語句的執行次數,一般都是乙個關於問題規模n的表示式。
例1:如果演算法的執行時間不隨著問題規模n的增加而增長,它的基本語句執行的次數是固定的,總的時間由乙個常數來限界。
此類演算法的時間複雜度是o(1)。
例2:當有若干個迴圈語句時,時間複雜度是由巢狀層數最多的迴圈語句中的基本語句的執行次數決定。
void fun(int n)}}
}
該演算法的基本語句是x++;所以
遞迴樹是一棵結點帶權值的樹。初始的遞迴樹只有乙個結點,它的權標記為t(n);然後按照遞迴樹的迭代規則不斷進行迭代,每迭代一次遞迴樹就增加一層,直到樹中不再含有權值為函式的結點(即葉結點都為t(1))。
下面以遞迴方程分析遞迴樹的迭代過程。
第一步: 把根結點t(n)用根是cn、左結點為t(n/2)、右結點為t(n/2)的子樹代替 (如a到b)
第二步: 把葉結點按照「第一步」的方式展開;t(n2)用根是cn/2、左節點為t(n4),右結點為t(n4)的子樹代替。(如c所示)
第三步: 反覆按照「第一步」的方式迭代,每迭代一次遞迴樹就增加一層,直到樹中不再含有權值為函式的結點,即葉結點都為t(1))。
遞迴樹層數為h,遞迴樹每層代價均為n,則有
然後將所有層的代價求和,得到所有層次的遞迴呼叫的總代價 。在上圖(d)部分中,完全展開的遞迴樹高度為lgn(樹高為根結點到葉結點最長簡單路徑上邊的數目),所有遞迴樹具有lgn+1層,所以總代價為cn∗(lgn+1),所以時間複雜度為θ(nlgn)。
演算法時間複雜度分析
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...
演算法分析時間複雜度
對乙個演算法的分析,很多時候我們更關心演算法執行的時間複雜度。演算法的時間複雜度中,我們關心演算法執行的時間上界。即大o階分析方法。時間複雜度的分類 1 沒有迴圈遞迴的基本都是常數階。2 有一層迴圈的就是線性階。for int i 0 i dosth 3 對數階 一般類似如下 while i i i...
演算法時間複雜度分析
簡單而言,演算法時間複雜度就是數學裡面的函式,也就是演算法的時間度量,一般記作 t n o f n 演算法分析的分類 1.最壞情況 任意輸入規模的最大執行時間。上界 2.平均情況 任意輸入規模的期望執行時間。3.最好情況 任意輸入規模的最小執行時間,通常最好情況不會出現。下界 情景一 常數階 int...