是指用來運算元據、解決程式問題的一組方法。
不同的演算法能得出相同的結果,但是不同的演算法所需要消耗的時間和空間是不一樣的,所以我們對於演算法優劣的衡量主要是從演算法所占用的「時間」和「空間」兩個維度去考量。
時間維度:是指執行當前演算法所消耗的時間,我們通常用「時間複雜度」來描述。
空間維度:是指執行當前演算法需要占用多少記憶體空間,我們通常用「空間複雜度」來描述。
對於時間維度:
「 大o符號表示法 」,即 t(n) = o(f(n))。
int a=10;
int b=10;
a=a+b;
int sum;
for(int i=0;i target ) r = mid - 1;
else l = mid + 1;
}return -1;
}
對於空間複雜度
乙個程式的空間複雜度是指執行完乙個程式所需記憶體的大小。
乙個演算法所需的儲存空間用f(n)表示。s(n)=o(f(n)),其中n為問題的規模,s(n)表示空間複雜度。
對於乙個演算法而言,時間與空間是可以相互轉換的。比如我們常說的用空間換時間–雜湊表
建立乙個更大的空間去節約時間。所以我們在使用演算法的時候往往需要綜合考慮時間與空間的複雜度,選擇更優的演算法。
複雜度分析 時間複雜度分析和空間複雜度分析
其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
複雜度分析(上)時間複雜度 空間複雜度
為了肉眼 實時 快速地來分析出 的複雜度,我們需要乙個不用具體的測試資料來測試,就可以粗略地估計演算法的執行效率的方法。時間複雜度 空間複雜度 表示演算法的執行時間與資料規模之間的增長關係。每行 對應的 cpu 執行的個數 執行的時間都不一樣,但是,我們這裡只是粗略估計,所以可以假設每行 執行的時間...