關於時間複雜度:
「o」的定義:若f(n)是正整數n的乙個函式,則o(f(n))表示$m≥0 ,使得當n ≥ n0時,| f(n) | ≤m| f(n0)| 。
表示時間複雜度的階有:
o(1) :常量時間階 o (n):線性時間階
o(㏒n) :對數時間階 o(
n㏒n):線性對數時間階
o (n
k):k≥2,k次方時間階
例1 兩個n階方陣的乘法
for(i=1,i<=n;++i)
for(j=1; j<=n; ++j)
由於是乙個三重迴圈,每個迴圈從1到n,則總次數為:n×n×n=n3時間複雜度為t(n)=o(n3)
例2
將x自增看成是基本操作,則語句頻度為1,即時間複雜度為o(1)。
如果將s=0也看成是基本操作,則語句頻度為2,其時間複雜度仍為o(1),即常量階。
例3for(i=1;i<=n; ++i)
語句頻度為:2n,其時間複雜度為:o(n),即為線性階。
例4for(i=1;i<=n; ++i)
for(j=1;j<=n; ++j)
語句頻度為:2n2,其時間複雜度為:o(n2),即為平方階。
定理:若a(n)=a m nm+a m-1n m-1 +…+a1n+a0是乙個m次多項式,則a(n)=o(n m)
例5 for(i=2;i<=n;++i)
for(j=2;j<=i-1;++j)
語句頻度為: 1+2+3+…+n-2=(1+n-2)×(n-2)/2
=(n-1)(n-2)/2 =n2-3n+2
∴時間複雜度為o(n2),即此演算法的時間複雜度為平方階。
• 乙個演算法時間為o(1)的演算法,它的基本運算執行的次數是固定的。因此,總的時間由乙個常數(即零次多項式)來限界。而乙個時間為o(n2)的演算法則由乙個二次多項式來限界。
以下六種計算演算法時間的多項式是最常用的。其關係為:
o(1)• 指數時間的關係為:
o(2n)當n取得很大時,指數時間演算法和多項式時間演算法在所需時間上非常懸殊。因此,只要有人能將現有指數時間演算法中的任何乙個演算法化簡為多項式時間演算法,那就取得了乙個偉大的成就。
• 有的情況下,演算法中基本操作重複執行的次數還隨問題的輸入資料集不同而不同。
關於時間複雜度
1.演算法複雜度分為 時間複雜度和空間複雜度。作用 時間複雜度是度量演算法執行的時間長短 而空間複雜度是度量演算法所需儲存空間的大小。2.一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f n 因此,演算法的時間複雜度記做 t n o f n 分析 隨著模組n的增大,演算法執行的時間的...
關於時間複雜度和空間複雜度
如何判別乙個演算法的好壞 首先,這個演算法必須是正確的 其次,好的演算法應具有幸福感,便於人們理解和交流,並且是機器可執行的。這個演算法還需要足夠健壯,即當輸入的資料非法或不合理時,也能適當的做出正確的反應或進行相應的處理 最後它還必須擁有高效率和低儲存量要求。也就是時間複雜度和空間複雜度佔的地方越...
關於時間複雜度和空間複雜度
空間複雜度 大o表示法是演算法的漸進時間複雜度,感覺是從數量級?的角度來描述演算法時間複雜度的增長趨勢?大o表達其實表示的不是精確的時間消耗,而是關注其屬於的量級。比如o n n 2 o n 2 而過分糾結o 2n o 3n 和o 2n 3n 是沒有意義的,因為其全可以表達為o n 看該演算法以怎樣...