時間複雜度與空間複雜度

2021-09-29 11:54:35 字數 1689 閱讀 2393

int n=

100;

sout

("this is n ="

+" n");

//執行了一次 這裡的時間複雜度為o(1)

int n=

100;

sout

("this is n ="

+" n");

sout

("this is n1 ="

+" n");

sout

("this is n2 ="

+" n");

//執行了3次 這裡的時間複雜度為o(3)

不論執行了幾次,只要是個常數,就可以統一將常數的時間複雜度為o(1),即常數複雜度

for

(int i =

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

for

(int i =

1; i <= n; i++

)

因為執行了n次,所以它的時間複雜度為o(n);

for

(int i =

1; i <= n; i++

)for

(int j =

1; j <= n; j++

)

雖然執行了2n次,但是它的時間複雜度也為o(n);即o(2n)去掉前面的係數2;

for

(int i =

1; i <= n; i++

)}

因為執行了n^2次, 所以它的時間複雜度為o(n^2);即為雙層巢狀迴圈

注意:在考慮複雜度的時候,不考慮前面的係數。

計算:1 + 2 + 3 + … + n

y =

0for i =

1 to n:

y += i

空間複雜度:o(1)

y = n *

(n +1)

/2

空間複雜度:o(n)

所以對於能用公式的,用公式。

遞迴

0, 1, 1, 2, 3, 5, 8, 13, 21, …

f(n) = f(n - 1) + f(n - 2)

如果直接用遞迴:

int fib

(int n)

用遞迴,會用很多冗餘的操作。

以6為例,它要運算2^6次,非常多。

在面試中,盡量不要這樣寫。

二叉樹遍歷 - 前序、中序、後序:時間複雜度是多少?

每個節點訪問且僅訪問一次,所以為時間複雜度線性與二叉樹的節點總數為o(n) ,

圖的遍歷:時間複雜度是多少?

圖裡面每個節點訪問且僅訪問一次,所以時間複雜度為o(n),n為圖裡面的節點總數。

搜尋演算法:dfs、bfs 時間複雜度是多少?

dfs深度優先,bfs廣度優先,不管是dfs還是bfs,因為訪問的節點是訪問一次,所以時間複雜度為o(n),n為搜尋空間裡面的節點總數。

二分查詢:時間複雜度是多少?

o(log(n))

時間複雜度與空間複雜度

空間複雜度 space complexity 是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s n o f n 比如直接 插入排序 的時間複雜度 是o n 2 空間複雜度是o 1 而一般的 遞迴演算法就要有o n 的空間複雜度了,因為每次遞迴都要儲存返回資訊。乙個演算法的優劣主要從演算法...

時間複雜度與空間複雜度

本文是對時間複雜度以及空間複雜度的乙個理解 時間複雜度 由於環境的不同,同樣的 執行所需要的時間是不同的,所以是不能拿來比較的 而函式中執行的次數確實一樣的 所以時間複雜度就是 程式每個迴圈中的語句總共會執行的次數 時間複雜度的表示方法 大o漸進表示法 o f n 這裡的f n 是什麼呢?void ...

時間複雜度與空間複雜度

本文部分取自搜狗百科 在求演算法效率時,通常有事前分析和事後分析兩種方法,事後分析因為必須實際檢驗過後才能得出答案,且可能由於硬體方面等外部原因影響結果而不被推廣,事前分析的主要就是在考量乙個演算法的基本執行次數,這就是時間複雜度。時間複雜度 一般情況下,演算法中基本操作重複執行的次數是問題規模n的...