分析時間複雜度和空間複雜度
1.演算法選用的策略
2.問題的規模
3.編寫程式的語言
4.編譯程式產生的機器**的質量
5.計算機執行指令的速度
演算法的時間複雜度取決於問題的規模和待處理資料的初態
1.基本語句:基本語句是執行次數與整個演算法的執行次數成正比的語句,基本語句對演算法執行時的貢獻最大
2.語句頻度:語句重複執行的次數
3.乙個演算法中所有語句頻度之和構成了該演算法的執行時間
例如: for(j=1;j<=n;++j)
for(k=1;k<=n;++k)
++x;
語句「++x、k<=n、++k」的頻度是n2,
語句「 j=1」的頻度是1,
語句「j<=n;++j 、k=1」的頻度是n。
演算法執行時間為:3*n2+3n+1
1.執行時間不是時間複雜度
2.乙個演算法中的語句執行次數稱為語句頻度或時間頻度,表示為t(n),n表示問題的規模
3.時間複雜度就是時間頻度去掉低階項和首項常數。
比如某個演算法的時間頻度時t(n)=10000nn+10n+3
但是時間複雜度時t(n)=o(nn)
非遞迴演算法分析
1.僅依賴於「問題規模」的時間複雜度
例1:交換i和j的內容。
temp = i; i = j; j = temp;
t(n)=o(1);
執行時間不隨著演算法規模n的增長而增大,只是乙個常數
2.變數計數之一。
(1) x=0;y=0;
(2) for(k=1; k<=n; k++)
(3) x++;
(4) for(i=1; i<=n; i++)
(5) for(j=1; j<=n; j++)
(6) y++;
該演算法段的時間複雜度為t(n)=o(n2)。
結論:當有若干個迴圈語句時,演算法的時間複雜度是由巢狀層數最多的迴圈語句中最內層語句的頻度f(n)決定的。
3.變數計數之二。
(1) x=1;
(2) for(i=1; i<=n; i++)
(3) for(j=1 ; j<=i; j++)
(4) for(k=1; k<=j; k++)
(5) x++;
該演算法頻度最大語句是5,按5計算複雜度
o(n^3)
4.演算法的平均複雜度是對t(n,k)的加權平均值
遞迴演算法分析
1.猜測技術
2.擴充套件遞迴技術
遞迴方程為:t(n)=t(n-1)+o(1),其中o(1)為一次乘法操作。
迭代求解過程如下:
3.通用分治遞推式
常見關係
o(1)
o(2n)
《演算法設計與分析》 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多...
複雜度分析 時間複雜度分析和空間複雜度分析
其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...
時間複雜度和空間複雜度分析
演算法是指用來運算元據 解決程式問題的一組方法。對於同乙個問題,使用不同的演算法,也許最終得到的結果是一樣的,但在過程中消耗的資源和時間卻會有很大的區別。那麼我們應該如何去衡量不同演算法之間的優劣呢?主要還是從演算法所占用的 時間 和 空間 兩個維度去考量。接下來主要介紹時間複雜度和空間複雜度的計算...