乙個演算法的好壞,是從兩方面進行衡量的,乙個是時間複雜度,乙個是空間複雜度。下面我將分別介紹這兩個概念。時間複雜度,指的是演算法的執行時間,但是這個時間並不是程式執行的時間,而是演算法執行語句的次數。
常見的時間複雜度有:
常數階o(1
)o(1)
o(1)
,對數階o(l
og2n
)o(log_n)
o(log2
n),
線性階o(n
)o(n)
o(n)
,線性對數階o(n
log2
n)o(nlog_n)
o(nlog
2n)
,平方階o(n
2)o(n^2)
o(n2),
立方階o(n
3)o(n^3)
o(n3
),…, k次方階o(n
k)o(n^k)
o(nk),
指數階o(2
n)o(2^n)
o(2n
)隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。
整個演算法的執行時間與基本操作重複執行的次數成正比。
基本操作重複執行的次數是問題規模n的某個函式f(n),於是演算法的時間量度可以記為:t(n) = o(f(n))
計算時間複雜度的方法:
(1) 如果演算法的執行時間不隨著問題的規模n的增長而增長,即使演算法中有上千條語句,執行時間也只是乙個比較大的常數。此類演算法的時間複雜度為o(1);
i = 100000;
while(i--)
該演算法中的第三行是基本操作,執行次數為100000次,是常數,因此時間複雜度為o(1(2) 當有多個迴圈巢狀時,演算法的時間複雜度是由巢狀層數最多的迴圈語句的語句頻度決定的)o(1)
o(1)
for (i = 0; i < n; i++)
}
該演算法for迴圈,最外層迴圈每執行一次,內層迴圈都要執行n次,執行次數是根據n所決定的,時間複雜度是o(n(3) 還有的演算法需要考慮迴圈的條件,初始狀態等等。2)o(n^2)
o(n2)。
空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。
空間複雜度(spacecomplexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。空間複雜度的計算方法:(1)通常來說,只要演算法不涉及到動態分配的空間,以及遞迴、棧所需的空間,空間複雜度通常為0(1)演算法本身所占用的儲存空間取決於演算法本身的長短,輸入輸出資料所占用的空間取決於要解決的問題,是通過參數列呼叫函式傳遞而來,只有輔助變數是演算法執行過程中臨時占用的儲存空間,與空間複雜度相關
(2)遞迴演算法的空間複雜度=遞迴深度n*每次遞迴所要的輔助空間
對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...
演算法複雜度 時間複雜度和空間複雜度
演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...