演算法時間複雜度

2021-07-22 20:18:13 字數 1640 閱讀 1616

一、定義

在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

二、舉例說明:

第一種演算法(線性階):

int i, sum = 0, n = 100;          /*執行一次*/

for(i = 1; i <= n; i++)

第一種演算法執行了1+(n+1)+n=2n+2次,時間複雜度為o(n);

第二種演算法(常數階):

int sum = 0, n = 100; /*執行一次*/

sum = (1 + n) * n/2; /*執行一次*/

第二種演算法執行了兩次,時間複雜度為o(1);

第三種演算法(平方階):

int i, j, x = 0, sum = 0, n = 100;          /*執行一次*/

for(i = 1; i <= n; i++)

}

第三種演算法執行了n*n+1次,時間複雜度為o(n*n);

第四種演算法(對數階):

int count = 1, n = 100;

while(count < n)

由於每次count乘以2之後,就距離n更近了一步,也就是有多少個2相乘後大於n則退出迴圈,所以迴圈的時間複雜度為o(logn)。

最後總結出如何推導大o階:

1)用常數1取代執行時間中的所有加法常數項。

2)在修改後的執行次數函式中,只保留最高端項。

3)如果最高端項存在且不是1,則去除與這個項相乘的常數。

得到的結果就是大o階。

常見時間複雜度:

執行次數函式

非正式術語

12o(1)

常數階2n+3

o(n)

線性階3n2+2n+1

o(n2)

平方階5log2n+20

o(log2n)

對數階2n+3nlog2n+19

o(nlog2n)

log2n階

6n3+2n2+3n+4

o(n3)

立方階2n

o(2n)

指數階常用的時間複雜度所耗費的時間從小到大依次是:

o(1) < o(log2n) < o(n) < o(nlogn) < o(n2) < o(n3) < o(2n) < o(n!) < o(nn)

三、補充兩個演算法特性與設計要求

演算法的特性:有窮性、確定性、可行性、輸入、輸出

演算法設計的要求:正確性、可讀性、健壯性、高效率和低儲存量需求

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...