定義:
在電腦科學中,時間複雜性,又稱時間複雜度,演算法的時間複雜度是乙個函式,它定性描述該演算法的執行時間。這是乙個代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。
我們都知道,乙個演算法的執行時間大致上等與其所有語句執行時間的總和,而語句的執行時間則為該條語句的重複執行次數合執行一次所需時間的乘積。
ps:一條語句的重複執行次數稱作語句頻度。
ok,既然知道這些理論知識,我們直接切入正題。課本上給出了一條計算時間複雜度的定理:
若f(n)=amnm+am-1nm-1+…+a1n+a0是乙個m次多項式,則t(n)=o(nm)
這條定理說明計算時間複雜度時,可以忽略所有低次冪項合最高次冪的係數(我們稱之為簡化法)。
舉個栗子:
for
(i=1
;i<=n;i++
)//頻度為n+1
}
上面是乙個經典的時間複雜度的計算,這段程式連用了3個for迴圈,然而實際計算的時候並不需要這麼麻煩,我們直接找到最內層迴圈的迴圈體,也就是c[i][j]=0,每個for迴圈都當作頻度為n,三層迴圈就是n3,即最終答案。
通過上述例題我們總結一下計算的基本步驟;
1)找到最後執行的語句
2)計算該語句的頻度
3)取最高次冪項,去除係數
4)得到答案
在實際計算的時候,並不需要死扣每條語句的頻度,比如for語句頻度看作n,我們要找到一種「差不多」的感覺,而這種感覺得到的答案往往就是正確答案。
下面是一些常見時間複雜度的總結:
1)常量階:
//t(n)=o(1)
for
(i=0
;i)//t(n)=o(1)
2)線性階:
for
(i=0
;i)//t(n)=o(n)
3)平方階:
x=
0;y=0;
for(k=
1;k<=n;k++
) x++
;for
(i=1
;i<=n;i++
)//t(n)=o(n^2)
4)立方階:
x=1;
for(i=
1;i<=n;i++
)//t(n)=o(n^3)
}
5)對數階:(比較特殊,但有規律可循,看迴圈條件i,令2^x=n,解得x=log2n)
for
(i=1
;i<=n;i=i*2)
//t(n)=o(log2n)
別著急走,我再安利一篇文章,寫得很nice!!!
點這裡檢視呀!
時間複雜度入門
時間複雜度 常用的時間複雜度有 常數級,對數級,線性級 線性對數級 平方級,立方級別,多項式級別,指數級別,階乘級別 這裡我們主要 對數級,線性級,平方級,指數級 為什麼不討論其他的?別的我也不會啊 囧 f x o n n 這裡指的是f這個函式的增長速度 不會以後n n快 這裡的x指的是特定的輸入 ...
時間複雜度計算
定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 當輸入量n逐漸加大時,時間複雜性的極限情形稱為演算法的 漸近時間複雜性 我們常用大o表示法表示時間複雜性,注意它是某乙個演算法的時間複雜性。大o表示只是說有上界,由定義如...
時間複雜度計算
1,演算法複雜度是在 資料結構 這門課程的第一章裡出現的,因為它稍微涉及到一些數學問題,所以很多同學感覺很難,加上這個概念也不是那麼具體,更讓許多同學複習起來無從下手,下面我們就這個問題給各位考生進行分析。首先了解一下幾個概念。乙個是時間複雜度,乙個是漸近時間複雜度。前者是某個演算法的時間耗費,它是...