複雜度分析總結

2021-10-09 01:37:16 字數 1808 閱讀 4714

複雜度的總結概要

最近複習演算法,先總結一下最基本的時間複雜度概念和判斷方法。

常用七種

不考慮常數係數。

判斷: **根據n的情況執行的次數

o(1)

var n =

1000

;console.

log(

'輸出一次:'

+ n )

console.

log(

'輸出二次:'

+ n )

console.

log(

'輸出三次:'

+ n )

不關心常數係數,無論輸出多少次,複雜度都是o(1)

o(n)

var n =5;

for(

var i =

1; i <= n ; i++

)

隨著n的變化執行次數與n成線性關係

另外,兩次for迴圈是並列執行,時間複雜度還是o(n)

o(n^2)

var n =5;

for(

var i =

1; i <= n ; i++

)}

二次迴圈巢狀時間複雜度變為o(n^2)

o(log(n))

var n =4;

for(

var i =

1; i <= n ; i=i*2)

如果n為4,i 執行2次 ,函式體執行次數為 log2(n),所以其時間複雜度為o(log(n))

o(k^n)

var

fib=

function

(n)else

}console.

log(

fib(5)

);

遞迴求斐波那契數列,指數級的時間複雜度;畫樹求解。

遞迴函式的時間複雜度計算原理: 主定理;

常見四種演算法的時間複雜度:

(有序陣列)二分查詢:o(log(n))

二叉樹遍歷: o(n) 每次一分為二,每邊以相等的時間複雜度計算, 每個節點只訪問一次

有序矩陣)二分查詢:o(n)

歸併排序(所有排序中最優的時間複雜度):o(nlogn)

降低時間、空間複雜度,節約計算機資源

例:計算: 1+2+3+…+100

方法一:for迴圈累加 o(n)

var sum =0;

for(

var i =

0; i <=

100; i++

)

方法二: 公式法 求和公式 sum=n(n+1)/2 o(1)

常見面試總結

二叉樹遍歷- 前序、中序、後序:o(n) n表示二叉樹的樹的節點總數。遍歷二叉樹,每個節點都會被訪問,且只被訪問一次。

圖的遍歷: o(n) 每個節點訪問一次

搜尋演算法:dfs深度優先、bfs廣度優先的時間複雜度: o(n) 只訪問一次節點,n為搜尋空間節點總數

空間複雜度

1.陣列的長度:空間複雜度。 一維陣列o(n);二維陣列o(n^2)

2.遞迴的深度

3.兩者結合,取最大值

複雜度分析 時間複雜度分析和空間複雜度分析

其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...

複雜度分析 時間複雜度 空間複雜度

執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...

簡單總結 複雜度分析

執行次數為線性的,t n def eatbread n for i in n print eat bread i 執行次數為對數,t n logn 每一次都是減去一半 def eatbread n i 1while i n i i 2print eat bread 執行次數為常數,t n 1.def...