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

2021-08-11 09:02:43 字數 1904 閱讀 3626

在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進行分析t(n)隨著n的變化情況並確定t(n)的數量級。

演算法的時間複雜度,也就是演算法的時間度量,記作:t(n) = o( f(n) )。它表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。

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

一般情況下,隨著輸入規模n的增大,t(n)增長最慢的演算法為最優演算法。

如何分析乙個演算法額時間複雜度呢?即如何推導大o階?

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

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

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

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

線性階一般含有非巢狀迴圈設計線性階,線性階就是隨著問題規模n的擴大,對應計算次數呈直線增長。

平方階

從上面我們得出,迴圈的時間複雜度等於迴圈體的複雜度乘以該迴圈執行的次數。

例如:

n +(n-1) +(n-2)+…+1 = n(n+1)/2 = n^2/2 + n/2,

根據前面的分析三部曲,

n^2/2 + n/2–>n^2/2 + n/2–>n^2/2–>n^2

最終我們得到o(n^2)

對數階

由於每次i * 2後,就距離n更近一步。假設有x個2相乘後大於或等於n,則會退出迴圈。

上圖看出,2^x = n, 得到 x = log(2)n ,所以這個迴圈的時間複雜度為o(logn)

我們可以看到,函式體是列印這個函式。

function函式的時間複雜度是o(1)。所以整體的時間複雜度就是迴圈的次數o(n)

如果我們的function是下列這樣:

這個演算法的時間複雜度就是o(n^2)

平均執行時間是期望的執行時間。

最壞執行時間是一種保證。在應用中,這是一種最重要的需求,通常除非特別指定,我們提到的執行時間都是最壞情況的執行時間。

演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n) = o( f(n) ) ,其中n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。

通常,我們都是用「時間複雜度」來指執行時間的需求,「空間複雜度」指空間需求。

顯然對於時間複雜度的追求更是屬於演算法的潮流。

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

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

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

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

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

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...