時間複雜度和空間複雜度的計算

2021-09-01 11:23:31 字數 1641 閱讀 3014

時間複雜度:執行乙個演算法,**執行的次數和問題規模之間的函式關係,用o()表示。

o(1):常數項,和問題的規模無關。

時間複雜度計算規則:1.只保留最高端項 2.不要係數

空間複雜度:執行乙個演算法,需要額外的輔助空間和問題規模之間的函式關係,用o()表示。

簡單來說,時間複雜度指的是執行次數,空間複雜度指的是浪費了多少記憶體。

有關於時間複雜度與空間複雜度的例子以及計算方法:

例1.

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

for(j=1;j<=n;++j) //2

1:n次 2:n+n+n+n+…+n = n的平方 3:n的平方 ,等同於2

所有的加起來f(n)=n+2n^2 = 2n^2

由於計算機的計算機速度很快就把常量係數丟掉了。

因為隨著n的增大,n的係數就不要了,因為如果n為100萬則係數為1000時,相對於100萬來說,1000就很小了,所以就不要了。

所以例1的時間複雜度為:o(f(n))=o(n^2)

空間複雜度為o(1),因為它除了用自身的陣列外並沒有耗費額外的空間,所以它的空間複雜度為o(1),表示的只是乙個常數項的意思,與其問題的規模無關。

例2:

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

for(j=1;j<=n;++j) //2

例2 的時間複雜度為:o(f(n))=o(n^3)

空間複雜度為:o(1)

1:n次 2:1每進行一次則2為n次 3:2每進行一次則3為n次 4:2每進行一次則4為n次 5:2每進行一次則5為n次

則根據分析 1為單獨n次迴圈,2和3為1每進行一次為n次迴圈,4和5為2每進行一次為n次迴圈 。則時間複雜度為n+n^2+n^3;

只取最高項所以時間複雜度為n^3.

依然沒有用到額外的輔助空間所以空間複雜度為o(1) .

例3:

空間複雜度:o(1)

時間複雜度為:f(n)=2*1=2 o(f(n))=o(1):常數項

例4:

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

for(j=2;j<=i-1;++j)

i為2的時候…0次

i為3的時候…1次

i為4的時候…2次

。。。。。。。。

i為n的時候…n-2次

相當於n*(n-2)! , 2*(1+2+3+…+n-2)=(n-1)*(n-2)=n^2-3n+2

時間複雜度為:n *(n^2) 所以為o(n^3) , 空間複雜度為o(1).

例5:

for(i=1;i例5的時間複雜度為o(log2n) ,2為底數。

分析:該for迴圈的結果為1,2,4,8,16,32…n ,它的運算相當於1 * 2 *2 *2 *…=n 則換算過來就是2^x=n -->也就是x=log2n=logn (2為底數)

遞迴時間複雜度:

int fun(int n)

else

}int main()

這個**執行的時候會發現游標一閃一閃的會讓人以為是形成了死迴圈,但事實上並不是的,只是因為這個用遞迴造成時間複雜度比較大,執行的時間久而造成的。

時間複雜度和空間複雜度計算

時間複雜度 首先要說的是,時間複雜度的計算並不是計算程式具體執行的時間,而是演算法執行語句的次數。當我們面前有多個演算法時,我們可以通過計算時間複雜度,判斷出哪乙個演算法在具體執行時花費時間最多和最少。常見的時間複雜度有 常數階o 1 對數階o log2 n 線性階o n 線性對數階o n log2...

時間複雜度和空間複雜度的計算

時間複雜度 1.一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f n 因此,演算法的時間複雜度記做 t n o f n 分析 隨著模組n的增大,演算法執行的時間的增長率和 f n 的增長率成正比,所以 f n 越小,演算法的時間複雜度越低,演算法的效率越高。2.在計算時間複雜度的時候...

時間複雜度 和空間複雜度的計算

一 演算法的時間複雜度定義 一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n o f n 稱o f n 為演算法的漸進時間複雜度...