如何計算演算法的時空複雜度

2022-01-15 19:17:34 字數 1207 閱讀 6046

演算法:

時間複雜度:

時空複雜度:

推薦:時間複雜度o(logn):

o(logn)的出現,一般是採用了分治的思想,演算法體現就是遞迴。logn的底數由演算法的複雜度決定:二分法,底數為2;三分法,底數是3...

但是我們把logxn,,logyn,x!=y,n取正無窮大時,會發現其實不同底數的logn只相差乙個常數,因此我們在演算法裡面極端的認為:logxn = logyn。因此我們在說l演算法為logn時並不帶底數。

有乙個常識:乙個優秀的程式設計師在發現自己的演算法時間複雜度為o(n2)時,立即會想到能否改進到o(logn),乙個原因是o(logn)比o(n2)要快很多;二是一般情況下是可以優化的(不絕對,不要鑽牛角尖)。

附乙個遞迴求最大子項和的演算法以供理解:

#include int

main()

;

int n=sizeof(a)/sizeof(int

);

int maxvalue=maxsubsequnce3(a,0,n-1

); printf(

"%d %d %d

",maxvalue,begin,end);

return0;

}//分治思想:遞迴演算法,時間複雜度:o(nlogn)

int maxsubsequnce3(int a, int left, int

right)

/*接著是右半部分子序列中包含第乙個元素的最大子串行和

*/int maxrightbordersum = a[center + 1], rightbordersum = a[center + 1

];

for (i = center + 2; i <= right; ++i)

/*max3 返回左、右半部分子序列的最大子串行和以及橫跨左、右半部分的最大子串行和中的最大者

*/int theleftright= maxleftbordersum +maxrightbordersum, max;

max= maxleftsum> maxrightsum?maxleftsum: maxrightsum;

max= max> theleftright?max: theleftright;

return

max;

}

view code

這裡講得更詳細:

計算演算法複雜度

演算法的複雜度分為時間複雜度和空間複雜度 1.時間複雜度 在計算演算法複雜度時一般只用到大o符號,landau符號體系中的小o符號 符號等等比較不常用。這裡的o,最初是用大寫希臘字母,但現在都用大寫英語字母o 小o符號也是用小寫英語字母o,符號則維持大寫希臘字母 常見的演算法時間複雜度由小到大依次為...

如何計算演算法的時間複雜度

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

如何計算演算法的時間複雜度

求解演算法的時間複雜度的具體步驟是 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。計算基本語句的執行次數的數量級 只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能...