演算法複雜度分為:時間複雜度
和空間複雜度
。
度量乙個演算法執行時間的方法有兩種
:
在給出間複雜度的概念之前先來看看什麼是時間頻度
?
計算1到100的和
第一種:使用for迴圈
int sum=0;
int n=
100for
(int i=
1;i<=n;i++
)時間頻度t
(n)=n+
1注意:因為最後還要在判斷一次,所以為n+
1第二種:使用演算法
int sum-=0;
int end=
100;
sum=((
100+1)
*100)/
2;時間頻度t
(n)=
1
1)隨著n的變大可以忽略常數項
例如:n+
20和n+
30隨著n的增大可以忽略常數項20和30
2)隨著n的變大可以忽略低次項
例如:n^2+
3n+10和n^2+
4n+50
隨著n的變大可以忽略3n+
10和4n+
503)隨著n的變大可以忽略係數
4n^2
+3n+
10和2n^2+
4n+50
隨著n的增大首先忽略低次項剩下:4n^
2和2n^
2然後忽略4和2,最後變為n^
2和n^
2
時間複雜度:
如何推導大o記法:
/*執行乙個次數為n的迴圈*/
public
void
function01
(int n)
}public
void
function02()
for(
int i=
0;i}第一步:f
(n)=
1+n+n²+
n(n+1)
/2=3
/2*n²+3/
2*n+
1第二步:o(f
(n))=3
/2*n²第三步:o(f
(n))
=n²時間複雜度為:n²
常見的時間複雜度大小:
常數階《對數階《線性階《線性對數階《平方階《立方階不同時間複雜度案例
int i=1;int j=2;
++i;
++j;
int value=i+j;
int i=1;
while
(i上面的**中的:i=i*
2,展開來說就是1*2
*2*2
*2*2.
...假設有x個2相乘後得到的數為n
也就是:2
^x=n,x=log2^n
for
(int i=
1;i)
平均時間複雜度和最壞時間複雜度
空間複雜度:
如果演算法執行所需要的臨時空間不隨著
某個變數n的大小而變化,即此演算法空間複雜度為乙個常量,可表示為 o(1)
int i =1;
int j =2;
++i;
j++;
int m = i + j;
分析:**中的 i、j、m 所分配的空間都不隨著處理資料量變化,因此它的空間複雜度 s(n) = o(1)
int
arr =
newint
[n]for
(i=1
; i<=n;
++i)
分析:這段**中,第一行new了乙個陣列出來,這個資料占用的大小為n,這段**的2-6行,雖然有迴圈,但沒有再分配新的空間,因此,這段**的空間複雜度主要看第一行即可,即 s(n) = o(n)
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...
時間複雜度 空間複雜度
一 時間複雜度 實際是指程式執行次數,而不是程式執行時間 1.我們一般討論的是最壞時間複雜度,這樣做的原因是 最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的上限,以最壞代表最全。2.時間複雜度的書寫規則 忽略常數項,用o 1 表示 選取最壞時間複雜度即選取增長最快的項 遞迴的時間複雜度 遞...