語句總的執行次數t(n)是關於問題規模的n的函式
t(n) = o(f(n))
表示隨著問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
隨著輸入規模n的增大,t(n)增長越慢的演算法,演算法越優
判斷乙個演算法的效率時,僅關注函式的最高項的階數即可
用常數1代替所有與問題規模n無關的執行語句
在修改後的執行次數函式中,只保留最高端項
若最高端項存在且係數不為1,去掉該最高端項的常係數
常數階o(1)
**中的所有語句與問題規模n無關
int n =1;
system.out.
print
("* ");
system.out.
print
("* ");
system.out.
print
("* "
);
線性階o(n)
一層迴圈
int sum =0;
for(
int i =
0;i < n;i++
)
平方階o(n2)
雙層迴圈
執行次數:n+(n-1)+(n-2)+…+1=(1/2)n2+(1/2)n
o(n2)
for
(int i =
0;i < n;i++
) system.out.
println()
;}
對數階o(logn)
x個2最後得到n
2x=n
x=log2n
int i =
1,n =
100;
while
(i
nlogn階o(nlogn)
立方階o(n3)
指數階o(2n)
迴圈的時間複雜度等於迴圈體的複雜度乘以該迴圈執行的次數
一般來說,時間複雜度從小排列到大的順序
o(1) < o(logn) < o(n)2)
3)n)n)
判斷乙個演算法的效率時,僅關注函式的最高項的階數即可
o(1) < o(logn) < o(n)2)
空間換時間
演算法複雜度分析
分析非遞迴演算法效率的通用方案 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...