演算法複雜度分析

2022-07-21 06:36:09 字數 1299 閱讀 4585

推到大o階方法:

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

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

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

得到的結果就是大o階。

常數階如果沒有迴圈和遞迴語句,只是單純的順序結構,那麼演算法複雜度為o(1)。

對於分支分支結構來說,無論真假,執行的次數都是恆定的,不會隨n的改變而發生變化,所以單純的分支結構,其時間複雜度也是o(1)。

線性階線性階的迴圈結構複雜一些,如:

int sum = 0;            //1

for(int i = 1 ; i <= 100 ; i++)  //n+1

sum+= i;          //n

printf("%d",sum);         //1

該演算法共執行了2n+3次,

所以演算法複雜度為o(n)

對數階int count = 1;

while(count < n)

count = count * 2

結果為2^x >= n

則x = log2n

所以複雜度為o(logn)

平方階int i,j;

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

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

則時間複雜度為o(n^2);

如果內外層的迴圈次數不一樣,那麼複雜度就為o(mxn)

常見的時間複雜度

執行次數函式

階非正式術語

12o(1)

常數階2n+3

o(n)

線性階3n^2+2n+1

o(n^2)

平方階5log2n+20

o(logn)

對數階2n+3nlog2n+19

o(nlogn)

nlogn階

6n^3+2n^2+3n+4

o(n^3)

立方階2^n

o(2^n)

指數階常用的時間複雜度所消耗的時間從小到大排序

o(1)對於指數級以上的演算法基本是無效的不可計算的。

最壞執行時間

最壞執行時間就是該演算法在條件下所要執行的最長時間情況,一般說演算法複雜度都指的是最壞時間複雜度。

演算法控制項複雜度

演算法的空間複雜度通過計算演算法所需要的儲存空間實現,演算法空間複雜度的計算公式記做:s(n) = o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存控制項的函式。

指令,常數,變數和輸入資料和演算法本身沒有關係,所以只需要計算演算法額外需要的輔助空間就可以。

演算法複雜度分析

分析非遞迴演算法效率的通用方案 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...