Hi~,我是一碗周,一個在舒適區(qū)垂死掙扎的前端,如果寫的文章有幸可以得到你的青睞,萬分有幸~ 寫在前面
在上一篇文章中介紹了算法和數(shù)據(jù)結構的基本概念,這篇文章來介紹一下時間復雜度和空間復雜度。
時間復雜度和空間復雜度是衡量一個算法是否優(yōu)秀的標準,通常我們比較兩個算法時會用到以下兩種方法:
通常情況下我們都會采用第一種方式進行對比,因為第二種在不同環(huán)境、不同語言、不同計算機下的運行結果是有差異的,而且第二種的工作量也要比第一種要大。
時間復雜度
所謂的時間復雜度就是用于定性描述算法所運行需要花費的時間,所謂的定性就是大概進行描述一下運行時間的趨勢,不會去具體到運行需要多少秒;時間復雜度通常用大O來表示,例如O(1)、O(n)、O(logn)等。
接下來我們通過具體的代碼來展示一下時間復雜度,這樣更方便去理解:
let i = 0
console.log(i)
因為在這個代碼中,這兩行代碼永遠只執(zhí)行一次,所以時間復雜度是`O(1)`
for (let i = 0; i < n; i++) {
console.log(i)
}
在上面的代碼中,運行時間取決與`n`,所以時間復雜度是`O(n)`。
let i = 1
while (i < n) {
console.log(i)

i *= 2
}
如果是下面這種情況:
let i = 0
console.log(i)
for (let i = 0; i < n; i++) {
console.log(n)
}
它的時間復雜度是O(1) + O(n),它最終的時間復雜度是O(n),兩個時間復雜度相加的話一般會忽略較小的那個。
如果是兩個時間復雜度相乘的話,例如下面這段代碼:
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
console.log(j)
}
}
這段代碼的時間復雜度是O(n^2)算法的時間復雜性tn,如果是相乘的話會將兩個時間復雜度進行相乘。
空間復雜度
空間復雜度與時間復雜度差不多,表示的是算法在運行過程中臨時占用存儲空間的大小的一個計量單位,現(xiàn)在我們來看一下幾個例子:
let i = 0
console.log(i)
因為在這個代碼中,僅僅定義了一個臨時變量,所以空間復雜度是`O(1)`
const arr = []
for (let i = 0; i < n; i++) {
arr.push(i)

}
在上面的代碼中,我們聲明了一個數(shù)組,每循環(huán)一次都要往數(shù)組中存儲一個變量,所以時間復雜度是`O(n)`
let i = 1
while (i < n) {
console.log(i)
i *= 2
}
寫在最后
本篇文章介紹了時間復雜和空間復雜度的概念,全文內容相對較少;如果覺得有幫助,可以點贊支持一下~
本專欄采用作為編程語言,從前端的角度去介紹數(shù)據(jù)結構與算法算法的時間復雜性tn,如果對你所有幫助,可以點個關注支持一下啊~