JS 演算法時間複雜度分析

2021-10-12 05:21:33 字數 1912 閱讀 6650

語句頻度:設n為求解的問題的規模,基本操作(或語句)執行次數總和稱為語句頻度,記做f(n)

時間複雜度:演算法(或程式)中基本操作(或語句)重複執行的次數總和稱為時間複雜度,記做t(n),且有t(n) = o(f(n)) 。

求時間複雜度步驟:

1. 去掉f(n)中所有加法常數

2. 只保留最高端項

舉例:

function

plus1

(num)

語句頻度: f(n) = 1 + 1 + 1 = 3

時間複雜度:t(n) = o(f(n)) = o(3) = o(1)

o(1)稱為常量數量級

function

sum(arr)

console.

log(s)

;// 1

}

語句頻度: f(n) = 1 + 1 + n + n + 1 = 2n + 3

時間複雜度:t(n) = o(f(n)) = o(2n+3) = o(n)

o(n)稱為線性數量級

function

square

(n)}

console.

log(s)

;// 1

}

語句頻度: f(n) = 1 + n + n2 + n2 + 1 = 2n2 + n + 2

時間複雜度:t(n) = o(f(n)) = o(2n2 + n + 2) = o(n2)

o(n2)稱為平方數量級

常見的時間複雜度:

o(1)2n)2n)2)3)n)

log2n:

以2為底,n的對數,

對數是對求冪的逆運算,

即 2 的多少次方結果為 n,

如log21 = 0,log22 = 1,log24 = 2, log28 = 3等。

以氣泡排序為例:

function

sort

(arr)}}

console.

log(arr)

// 1

}

語句頻度:

最好情況:f(n) = 2 + (n-1) + n(n-1) + 1 = n2 + 2

最壞情況:f(n) = 2 + (n-1) + 5n(n-1)/2 + 1 = 5n2/2-3n/2+3

時間複雜度:

最好情況: t(n) = o(f(n)) = o(n2 + 2) = o(n2)

最壞情況:t(n) = o(f(n)) = o(5n2/2 - 3n/2 + 3) = o(n2)

最好最壞情況時間複雜度相同,都是o(n2)。

// 優化冒泡演算法

// 通過haschanged標記判斷是否已經排序完成來避免無效操作

function

sort

(arr)

} i++

;// 1到n-1

} console.

log(arr)

// 1

}

語句頻度:

最好情況:f(n) = 8 + 2(n-1) + 2 = 2n + 6

最壞情況:f(n) = 4 + 3(n-1) + 3n(n-1) + 1 = 3n2+2

時間複雜度:

最好情況: t(n) = o(f(n)) = o(2n + 6) = o(n)

最壞情況:t(n) = o(f(n)) = o(3n2+2) = o(n2)

最好情況的時間複雜度得到提公升,但是乙個演算法的時間複雜度有最壞情況決定,因此仍然是o(n2)。

演算法時間複雜度分析

定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式 t n 稱為這一演算法的 時間複雜性 求解演算法的時間複雜度的具體步驟是 1 找出演算法中的基本語句 演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。2 計算基本語句的執行次數的數量級 ...

演算法分析時間複雜度

對乙個演算法的分析,很多時候我們更關心演算法執行的時間複雜度。演算法的時間複雜度中,我們關心演算法執行的時間上界。即大o階分析方法。時間複雜度的分類 1 沒有迴圈遞迴的基本都是常數階。2 有一層迴圈的就是線性階。for int i 0 i dosth 3 對數階 一般類似如下 while i i i...

演算法時間複雜度分析

簡單而言,演算法時間複雜度就是數學裡面的函式,也就是演算法的時間度量,一般記作 t n o f n 演算法分析的分類 1.最壞情況 任意輸入規模的最大執行時間。上界 2.平均情況 任意輸入規模的期望執行時間。3.最好情況 任意輸入規模的最小執行時間,通常最好情況不會出現。下界 情景一 常數階 int...