(1)時間頻度:乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t(n),n稱為問題的規模,當n不斷變化時,時間頻度t(n)也會不斷變化。
(2)時間複雜度:若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
①常數階 o(1)
int sum =
0, n =
100;
printf
(「i love you.com\n」)
;printf
(「i love you.com\n」)
;printf
(「i love you.com\n」)
;printf
(「i love you.com\n」)
;printf
(「i love you.com\n」)
;printf
(「i love you.com\n」)
;sum =(1
+n)*n/
2;
②線性階 o(n):一般含有非巢狀迴圈涉及線性階,線性階就是隨著問題規模n的擴大,對應計算次數呈直線增長。
int i , n =
100, sum =0;
for( i=
0; i < n; i++
)
③平方階 o(n^2)
int i, j, n =
100;
for( i=
0; i < n; i++
)}
int i, j, n =
100;
for( i=
0; i < n; i++
)}
由於當i=0時,內迴圈執行了n次,當i=1時,內迴圈則執行n-1次……當i=n-1時,內迴圈執行1次,所以總的執行次數應該是:
n+(n-1)+(n-2)+…+1 = n(n+1)/2
n(n+1)/2 = n^2/2+n/2
用我們推導大o的攻略,第一條忽略,因為沒有常數相加。第二條只保留最高項,所以n/2這項去掉。第三條,去除與最高項相乘的常數,最終得o(n^2)。
④對數階 o(logn)
int i =
1, n =
100;
while
( i < n )
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n)=o(f(n)),其中n為問題的規模,f(n)為語句關於n所佔儲存空間的函式,也是一種「漸進表示法」
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括:
演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種演算法是「就地"進行的,是節省儲存的演算法,如這一節介紹過的幾個演算法都是如此;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元。
時間複雜度 空間複雜度
時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...
時間複雜度 空間複雜度
演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...
時間複雜度 空間複雜度
一 時間複雜度 實際是指程式執行次數,而不是程式執行時間 1.我們一般討論的是最壞時間複雜度,這樣做的原因是 最壞情況下的時間複雜度是演算法在任何輸入例項上執行時間的上限,以最壞代表最全。2.時間複雜度的書寫規則 忽略常數項,用o 1 表示 選取最壞時間複雜度即選取增長最快的項 遞迴的時間複雜度 遞...