推到大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...