求效率函式的一般方法
big-o 表示式
演算法的複雜度分析包括空間複雜度分析和時間複雜度分析。
對於現代計算機,記憶體已經比較足夠,對演算法效率影響最大的是時間複雜度。
在時間複雜度的分析中,拋開具體機器,我們主要研究的是執行的語句數量。
執行的語句數量取決於需要處理的元素個數和演算法的迴圈結構。
引入函式f(n
)f(n)
f(n)
來表示乙個演算法的效率,其中n
nn表示要處理的資料量。
效率分析我們主要關注迴圈結構,現就幾種典型的迴圈結構**它的演算法效率公式:
線性迴圈(linear loops)
對數迴圈(logarithmic loops)
巢狀迴圈(nested loops)
線性迴圈
在這個結構中,應用**會執行n次。i=0;
while
(i
執行的語句數量與處理的資料量成正比。
這一部分的效率函式可以表示為:f(n
)=
nf(n)=n
f(n)=n
。同理:
這一部分的效率函式可以表示為:f(ni=0;
while
(i
)=n/
2f(n)=n/2
f(n)=n
/2。對數迴圈
在這個結構中,應用**會執行logi=0;
while
(i
2(n)
log_2(n)
log2(
n)次。這一部分的效率函式可以表示為:f(n
)=lo
g2(n
)f(n)=log_2(n)
f(n)=l
og2
(n)。
同理:
這一部分的效率函式可以表示為:f(ni=n;
while
(i>=1)
)=lo
g2(n
)f(n)=log_2(n)
f(n)=l
og2
(n)。
線性對數迴圈
內層迴圈為對數迴圈,應用**執行次數為logi=1;
while
(ii=i+1;
}
2(n)
log_2(n)
log2(
n)。外層迴圈為線性迴圈,內層**執行次數為n
nn,因此對數迴圈總共執行n
nn次。
應用**執行總次數為 n∗l
og2(
n)
n*log_2(n)
n∗log2
(n)
。這一部分的效率函式可以表示為:f(n
)=n∗
log2
(n
)f(n)=n*log_2(n)
f(n)=n
∗log
2(n
)。多項式迴圈
對於內層迴圈,應用**執行ni=1;
while
(ii=i+1;
}
nn次;對於外層迴圈,內部結構執行n
nn次。
應用**總共執行n
2n^2
n2次。因此,這一部分的效率函式可以表示為:f(n
)=n2
f(n)=n^2
f(n)=n
2。依賴多項式迴圈
對於內層迴圈,應用**的執行次數取決於外層迴圈,平均執行次數為(n+i=1;
while
(ii=i+1;
}
1)/2
(n+1)/2
(n+1)/
2。外層迴圈的執行次數為nnn。
應用**總共執行n∗(
n+1)
/2
n*(n+1)/2
n∗(n+1
)/2次。
因此,它的效率函式可以表示為:f(n
)=n∗
(n+1
)/
2f(n)=n*(n+1)/2
f(n)=n
∗(n+
1)/2
。
對於巢狀的迴圈結構,執行次數為外層迴圈次數乘以內層迴圈次數;對於並列的迴圈結構,執行次數為將兩個迴圈的次數相加。上述**的演算法效率公式為f(ni=1;
while
(ii=i+1;
}k=n;
while
(k>=1)
)=n2
+log
2(n)
f(n)=n^2+log_2(n)
f(n)=n
2+lo
g2(
n)。表示某一演算法的效率處在哪乙個檔次。
計算方法:
保留演算法效率公式f(n
)f(n)
f(n)
的最高次項(演算法複雜程度最高的項),攝取其餘項。
將其係數設為1。
項的複雜程度由低到高分別為: log
2(n)
log_2(n)
log2(
n), n
nn, n∗l
og2(
n)
n*log_2(n)
n∗log2
(n)
, n
2n^2
n2, n
3n^3
n3, …, n
kn^k
nk, 2
n2^n
2n, n !n!
n!。
例如:f(n
)=4∗
n3+n
∗log
2(n)
+50∗l
og2(
n)
f(n)=4*n^3+n*log_2(n)+50*log_2(n)
f(n)=4
∗n3+
n∗lo
g2(
n)+5
0∗lo
g2(
n)最高次項為:4∗n
34*n^3
4∗n3
係數設為1:n
3n^3
n3因此,這個演算法的big-o表示式為:o(n
3)
o(n^3)
o(n3
)
時間效率分析
也許對於學過資料結構的同胞來說,這是乙個再簡單不過的問題,但對於剛起步的菜鳥來說,這是個很寶貴的資源,在各大oj過題,時有超時現象出現,苦逼的我只能換思路,換 但自從有了時間效率分析,媽媽再也不用擔心我會超時了,那麼接下來,我便用最菜鳥的語言譜寫較完善的時間效率分析。演算法的時間效率分析主要在於計算...
排序演算法效率分析
目錄 排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性氣泡排序 o n2 o n2 o n o 1 穩定選擇排序 o n2 o n2 o n2 o 1 不穩定插入排序 o n2 o n2 o n o 1 穩定希爾排序 o n1.3 o n2 o n o 1 不穩定快...
演算法分析 演算法的漸進效率分析
一般用於界定函式集合的上界,漸進表示式o g n 的含義就是,c為正常數,函式集合o中的元素的最大值不會超過c.g n f n o g n 的含義是,函式f n 的屬於集合o g n 因為函式集合o中的最大值為c.g n 所以f n 的最大值為c.g n 由於只是漸進的上界,所以當函式g n 的階數...