演算法的複雜度分析

2021-10-04 08:13:22 字數 1346 閱讀 7128

通過統計監控得到的結果稱為事後統計法,受測試環境和資料規模影響較大,這個時候就需要乙個不用具體的測試資料來測試就可以估算出演算法執行效率的方法

代表的是**的執行時間隨資料規模增長的變化趨勢

t

(n)=o(

f(n)

)

n 表示資料規模

f(n) 表示**執行的總次數

t(n) 表示**執行的時間

大o複雜度表示法並不代表真正的執行時間,而是代表變化趨勢,叫做漸進時間複雜度,簡稱時間複雜度

最多:只關注迴圈執行次數最多的一段**

加法:總複雜度等於量級最大的那段**的複雜度

乘法:巢狀**的複雜度等於巢狀內外**複雜度的乘積

1.o(1)

在一般情況下,演算法中不出現迴圈,遞迴,即使有成千上萬行**,其時間複雜度也是o(1)

int i=9;

int j=10;

system.out.

println

(i+j)

;

2.o(logn),o(nlogn)

o(logn)

int n=

1000

;int i=1;

while

(i

以其他為底的都可以通過對數運算換底公式進行運算

o(nlogn)就是logn的演算法執行了n次,歸併演算法,快速排序的時間複雜度都是o(nlogn)

3.o(m+n),o(m*n)

時間複雜度和**的複雜度由兩個資料的規模來決定

o(m+n)

public

void

test

(int n,

int m)

for(

int j=

9;j)}

o(m*n)

for

(int i=

0;i)}

演算法的儲存空間與資料規模之間的增長關係叫做空間複雜度

public

inttest

(int n,

int j)

return-1

;}

最理想的情況下執行這段**的時間複雜度是最好時間複雜度

最糟糕的情況下執行這段**的時間複雜度是最差時間複雜度

即計算數學的期望值,**執行所有情況下執行的時間複雜度

**執行中所有複雜度情況絕大部分是低級別複雜度,個別情況是高階別複雜度且發生具有時序關係時,可以將高階別複雜度均攤到低級別複雜度上。均攤時間複雜度是一種特殊的平均情況時間複雜度

演算法複雜度分析

分析非遞迴演算法效率的通用方案 1.決定用哪個 哪些 引數作為輸入規模的度量 2.找出演算法的基本操作 作為一規律,它總是位於演算法的最內層迴圈中 3.檢查基本操作的執行次數是否只依賴輸入規模。如果它還依賴一些其他的特性,則最差效率 平均效率以及最優效率 如果必要 需要分別研究。4.建立乙個演算法基...

演算法複雜度分析

演算法分析的四個漸進表示法 一般,o裡的,取最小的 一般,裡的,取最大的 一般分析時間複雜度,且常考慮最壞複雜度,常用o分析 三法則 法則一 如果t1 n o f n t2 n0 o g n t1 n t2 n max o f n o g n t1 n t2 n o f n o g n 法則二 如果...

演算法複雜度分析

類別name 名字交換類排序 quicksort 快速排序 交換類排序 bubble sort 氣泡排序 選擇類排序 selection sort 選擇排序 選擇類排序 heapsort 堆排序插入類排序 insertion sort 插入排序 插入類排序 shell sort 希爾排序 bucke...