時間複雜度和空間複雜度(二)

2021-07-24 18:37:32 字數 2105 閱讀 4313

演算法的時間複雜度的定義:在進行演算法分析時,語句總的執行次數t(

n)是關於問題規模

n的函式,進而分析

t(n)隨n

的變化情況並確定t(

n)的數量級。演算法的時間複雜度就是演算法時間量度,記作

t(n)=o(f

(n))。它表示隨問題規模

n的增大,演算法執行時間的增長率和

f(n)

的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。

這樣用大寫o()來體現演算法時間複雜度的記法,我們稱之為大

o演算法。

一般情況下,隨著輸入規模n的增大,

t(n)

增長最慢的演算法稱之為最優演算法。

那麼如何分析乙個演算法的複雜度呢?一般性的規則總結如下:

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

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

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

4)得到的最後結果就是大o階

簡單舉個例子:

這部分的程式的效率時o(1),雖然有

8個語句。

2、線性階

這部分**的執行效率時o(n),因為迴圈體重的次數需要執行n次。

3、平方階

這部分**為o(n^2)

【擴充套件】:

分析:當i = 0時,內迴圈執行

n次;當

i = 1

時,內迴圈執行了

n-1次

......

當i = n-1

時,內迴圈執行了

1次,所以總的執行時間為n+(

n-1)+(

n-2)

+......+1 = n(n+1)/2

。按照我們上面的規則,最後的大o階為

o(n^2)。

4、對數階

分析:假設有x個

2迴圈之後正好為n,即

2^x= n

,x = log(n),

所以時間複雜度為

o(logn)。

4、函式呼叫的時間複雜度分析

這裡面有兩個巢狀的迴圈,所以最後的時間複雜度為o(n^2)。

常用的時間複雜度所耗費時間從小到大一次是:

o(1)!)

二、演算法空間複雜度

寫**時,用空間來換取時間

比如說:判斷那一年是否為閏年?除了用編演算法來判斷那一年是閏年之外,還可以建立乙個2050 的陣列,如果是閏年就置為

1,不是就為

0,這樣就變成了去這個陣列裡找陣列裡儲存的值是1還是

0。

兩種演算法比起來,第一種演算法明顯很耗費cpu的時間,第二種演算法雖然節省時間,但是建立了乙個

2050

的陣列,浪費了空間。

具體哪個演算法好,要看具體情況,若是微控制器的話,還是第一種演算法比較好。

時間複雜度和空間複雜度 二

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

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

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

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

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...