如何計算時間複雜度

2021-07-23 12:01:18 字數 2033 閱讀 2408

一. 概念
時間複雜度描述的是程式的執行時間,時間複雜度越低,執行效率越高
時間複雜度是總運算次數表示式中受n的變化影響最大的那一項(不含係數)
影響從大到小: 不考慮係數
n! >  2^n (指數階) > n^3 (立方階)> n^2 (平方階)> nlog2n(線性對數階) > n (線性階) > log2n (對數階) > 1 (常數階)
二. 計算方法
找到迴圈裡的最基本的操作,把每個最基本操作的執行次數相加,找對n最大影響的那一項
其實就是找最深層迴圈裡的基本操作的執行次數就可以了
最常用的迴圈方法的時間複雜度
(1)  for(i=1;i<=n;i++)  // 外迴圈執行了n次

for(j=1;>j<=n;j++) // 內迴圈執行了n次

s++; //基本操作,一共迴圈了n*n次,當然是o(n^2)

(2) 

for(i=1;i<=n;i++) //外迴圈執行了n次for(

j=i;j<=n;j++) // 內迴圈每次的執行次數不一樣,i=1,執行n次,i=2,執行n-1次,依次遞減

s++; //迴圈了(n+n-1+n-2+...+1)≈(n^2)/2,因為時間複雜度是不考慮係數的,所以也是o(n^2)

1+2+3+... + n = (n^2)/2
推導:
s = 1+2+3+... +n;
s = n+n-1+... +2+1
2個公式相加,每一項都是n+1,一共n項,則2s=n(n+1);  s= n(n+1)/2, 取最高端,不考慮係數就是

o(n^2)

簡單點:2重迴圈一般就是n2
(3)
for(i=1;i<=n;i++)     //迴圈了(1+2+3+...+n)≈(n^2)/2,當然也是o(n^2)

for(j=1;

j<=i

;j++)

s++;

和上面的2是反著的。上面內迴圈每次迴圈的開始值是i,最大值固定是n,迴圈次數逐漸遞減
這個內迴圈每次迴圈的開始值固定是1,最大值是i,迴圈次數逐漸遞加
簡單點:2重迴圈一般就是n2
(4)
for(i=1;i<=n;i++)

for(j=1;

j<=i

;j++) // j與i相關,迴圈次數不固定

for(k=1;

k<=j

;k++) // k與j相關,迴圈次數不固定

x=x+1;
迴圈了(1^2+2^2+3^2+...+n^2)=n(n+1)(2n+1)/6(這個公式要記住哦)≈(n^3)/3,不考慮係數,自然是

o(n^3)

簡單點:三重迴圈一般就是n3

i=1時,二層迴圈1次,三層迴圈一次, 總共1次
i=2時,二層迴圈2次,三層迴圈二次,總共4次
i=3時,二層迴圈3次,三層迴圈分別執行1+2+3次共6次 ,總共9次
(5)
for(i=1;i<=n;++i)

}則有 t(n)= n^2+n^3,

則該演算法的 時間複雜度:t(n)=o(n^3)

總結:
簡單的計算的話,看看有幾重for迴圈,只有一重則時間複雜度為o(n),二重則為o(n^2),依此類推,如果有二分則為o(logn),二分例如

快速冪、二分查詢,如果乙個for迴圈套乙個二分,那麼時間複雜度則為o(nlogn)。

如何計算時間複雜度

求解演算法的時間複雜度的具體步驟是 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能...

如何計算時間複雜度

定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...

如何計算時間複雜度

一 概念時間複雜度是總運算次數表示式中受n的變化影響最大的那一項 不含係數 比如 一般總運算次數表示式類似於這樣 a 2 n b n 3 c n 2 d n lg n e n f a 0時,時間複雜度就是o 2 n a 0,b 0 o n 3 a,b 0,c 0 o n 2 依此類推eg 1 for...