解決乙個問題的方法可能有很多,但能稱得上演算法的,首先它必須能徹底解決這個問題(稱為準確性),且根據其編寫出的程式在任何情況下都不能崩潰(稱為健壯性)。
程式和演算法是完全不同的概念。演算法是解決某個問題的想法、思路;而程式是在根據演算法編寫出來的真正可以執行的**。例如,要依次輸出一維陣列中的資料元素的值,首先想到的是使用迴圈結構,在這個演算法的基礎上,我們才開始編寫程式。
資料結構中,每條語句的執行次數,又被稱為該語句的頻度。
資料結構推出了大 o 記法(注意,是大寫的字母 o,不是數字 0)來表示演算法(程式)的執行時間。
大 o 記法的格式為:o(頻度)
下面是幾種常用的時間複雜度:
o(1)常數階 < o(logn)對數階 < o(n)線性階 < o(n2)平方階 < o(n3)(立方階) < o(2n) (指數階)
注意:而在某些實際場景中,還可以用最好情況下的頻度和最壞情況下的頻度的平均值來作為演算法的平均時間複雜度。
和時間複雜度類似,乙個演算法的空間複雜度,也常用大 o 記法表示。
要知道每乙個演算法所編寫的程式,執行過程中都需要占用大小不等的儲存空間,例如:
對演算法的空間複雜度影響最大的,往往是程式執行過程中所申請的臨時儲存空間。不同的演算法所編寫出的程式,其執行時申請的臨時儲存空間通常會有較大不同。
在多數場景中,乙個好的演算法往往更注重的是時間複雜度的比較,而空間複雜度只要在乙個合理的範圍內就可以。
資料結構 時間複雜度與空間複雜度
演算法效率分兩種,時間效率和空間效率,即時間複雜度和空間複雜度,前者衡量演算法執行速度,後者衡量演算法所需要的額外空間 2.1基本概念 演算法中的時間複雜度是乙個函式,定量描述了演算法執行時間 總結下來就是 演算法種基本操作的執行次數 關注點 操作的數量級 基本操作的執行次數 執行時間和硬體資源強相...
資料結構與演算法 時間複雜度和空間複雜度
一 階數比較 時間複雜度判斷理論 o 1 o log2 n o n o n log2 n o n 2 o n k o 2 n 二 計算方法 用常數1代替執行時間中的所有加法常數 修改後的執行次數中只保留最高端項 去除最高端項的係數 三 常見的求時間複雜度例子 1 常數階 int a 1 int b ...
資料結構 時間與空間複雜度
安裝了乙個搜狗輸入法 安裝依賴項 sudo apt install libopencc1 fcitx libs fcitx libs qt 包目錄下 sudo dpkg i sogoupinyin 2.0.0.0078 amd64.deb dpkg dpkg 是debian package的簡寫,為...