如何衡量演算法時間複雜度,空間複雜度以及大O表示法

2022-09-19 01:21:15 字數 1811 閱讀 4253

演算法是用來解決特定的問題的一種思想,對於同乙個問題,可以有多種實現方式,最終的結果是一樣的,但是整個過程需要的時間和資源不同,我們就需要在時間和空間上進行衡量。

時間複雜度:當前演算法所需要的執行時間

空間複雜度:當前演算法所需要的記憶體空間

大 o 表示法:也叫做漸進式時間複雜度,公式為 $t(n)=o(f(n))$ 其中 f(n) 表示每行**執行次數之和,而 o 表示正比例關係,這個公式的全稱是:演算法的漸進時間複雜度。舉個例子

大 o 符號表示法並不是用於來真實代表演算法的執行時間的,它是用來表示**執行時間的增長變化趨勢的。

更多前端面經,盡在

用常數 1 取代執行時間中的所有加法常數。

在修改後的執行次數函式中,只保留最高端項。

如果最高端項存在且不是 1,則去除與這個項相乘的常數。

得到的最後結果就是大 o 表示式。

let sum = 0,

n = 100;

console.log("www.1024n**.com");

console.log("www.1024n**.com");

這段**結合第一點,所有加法常數,所以是 $o(1)$

一般含有非巢狀迴圈,線性階就是隨著問題規模 n 的擴大,對應計算次數呈直線增長。

let i,

n = 100,

sum = 0;

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

因為迴圈體中的**需要執行 n 次,所以是 $o(n)$

for (i = 0; i < 100; i++) 

}

外迴圈執行 100 次,內迴圈執行 100 次,所以是 n 的平方 $o(n^2)$,如果內迴圈再巢狀一層,則是 $o(n^3)$

let i = 1,

n = 100;

while (i < n)

迴圈體裡面每次都 *2,具體 n 的值就越來越近,這時可以計算 $2^i = n$,$i = log(2)n$,所以這段程式的時間複雜度是 $o(log n)$

更多前端面經,盡在

例子

時間複雜度

術語1024n**

$o(1)$

常數階$2n + 1$

$o(n)$

線性階$n^2 + 3n + 5$

$o(n^2)$

平方階$3log(2)n + 1024$

$o(log n)$

對數階$2n + 3log(2)n + 1024$

$o(log n)$

nlogn 階

$n^3 + 2n^2 + 3n + 1024$

$o(n^3)$

平方階$2^n + 1024$

$o(2^n)$

指數階空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。

演算法執行期間所需要的儲存空間包括 3 個部分:

演算法的空間複雜度的計算公式記作:$s(n)=o(f(n))$,其中,n 為問題的規模,$f(n)$ 為語句關於 n 所佔儲存空間的函式。

空間複雜度,就是通過空間換取時間的方式來解決問題。具體哪一種好,還是得具體問題具體分析。

更多前端面經,盡在

演算法時間複雜度空間複雜度

演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...

演算法 時間複雜度 空間複雜度

1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...