演算法是指用來運算元據、解決程式問題的一組方法。
衡量不同的演算法之間的優劣要從演算法所占用的時間和空間兩個維度去考量。
程式設計師提出通用的方法進行演算法的時間複雜度分析:t(n)=o(f(n))
n:表示資料規模
o(f(n)):表示執行演算法所需要執行的指令數,和f(n)成正比。
常見的時間複雜度量級進行大o的理解:
大o不是**執行的實際時間,而是執行時間的最大量級。分析一段**的時間複雜度的時候只關注迴圈執行次數最多的那段**。
void
swap
(int
&a,int
&b)
int
sum(
int n)
return ret;
}
void
selsctionsort
(int arr,
int n)
swap
(arr[i]
,arr[minindex]);
}}}
每次迴圈乘以2,當大於n時,迴圈結束。
設迴圈次數為x,則2x>n停止。複雜度為o(log₂n).
int i;
while
(i<=n)
二分查詢法的**中,通過while迴圈,成二倍數的縮減範圍,需要經過 log2^n次可跳出迴圈。
int
binarysearch
(int arr,
int n,
int target)
return-1
;}
相關排序 複雜度分析 時間複雜度分析和空間複雜度分析
其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
複雜度分析(上)時間複雜度 空間複雜度
為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...