因為工作的原因,重新拾起了資料結構,畢竟它的地位對於一名程式設計師來說舉足輕重,對於即將畢業的自己,也是決定把所有模糊的定義弄明白,為以後打好基礎。所以寫下人生中第一篇原創部落格,作為紀念。
複雜度分為兩種,1)時間複雜度;2)空間複雜度;
一.演算法時間複雜度
1.定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模 n 的函式,進而分析t(n)隨 n 的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法 的時間度量,記作:t(n)=o(f(n))。它表示歲問題規模 n 的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的監禁時間複雜度,簡稱為時間 複雜度。 其中f(n)的增長率相同,成為演算法的監禁時間複雜度,簡稱時間複雜度。其中f(n)是問題規模 n 的某個函式。
2.大o記法:
用大寫的o()來體現演算法時間複雜度的記法,我們稱之為大o記法。
常數階:o(1);
線性階:o(n);
平方階:o(n^2);
對數階:o(log m n);
3.推導大o階方法:
1.用常數 1 取代執行時間中的所有加法常數。
2.在修改後的執行次數函式中,只保留最高端項。
3.如果最高端項存在且不是1,則去除與這個項相乘的常數。
得到的結果就是大o階。
使用上述三條進行推導:1:沒有加法的常數,所以不用考慮;
2:只保留最高端,因此保留n^2/2;
3:去除這個項相乘的常數,也就是去除1/2,最終這段**的時間複雜度為o(n^2)。
常見的時間複雜度:
執行次數
階 數
非正式術語
12o(1)
常數階2n+3
o(n)
線性階3n^2+2n+1
o(n2)
平方階5log2 n+20
o(logn)
對數階n+3nlog2+1
o(nlogn)
nlogn階
n^2+n+4
o(n^2)
立方階2^n
o(2^n)
指數階
o(1)o(n3)
<
o(2^n)
<
o(n!)
<
o(n^n)
時間複雜度分為:1)平均時間複雜度;2)最壞時間複雜度;
二.演算法的空間複雜度
演算法的空間複雜度的計算公式記作:s(n)=o(f(n)),其中,n為問題的規模,f(n)為語句關於 n 所佔儲存空間的函式。
快排時間複雜度詳細解釋
1 快速排序遞迴版 def quick sort arr if len arr 2 return arr 這是基線條件 else a arr 0 smaller i for i in arr 1 if i a bigger i for i in arr 1 if i a return quick s...
演算法的時間複雜度解釋
演算法的時間複雜度分析有兩種方式。一種方式是計算演算法具體的執行時間,最終根據這個時間的長短評價演算法的優劣。這種估計方法比較簡單易 於操作,但是這種方法有乙個缺點 估計時間會隨著計算機的不同而產生變化 不同計算機的配置 同乙個 計算機所處環境不同都會影響 另一種方式是只記錄演算法的關鍵操作。例如這...
時間複雜度的詳細介紹
一 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...