如何理解時間複雜度和空間複雜度

2021-08-28 05:18:17 字數 897 閱讀 2479

演算法是一種解決問題的方法,對於同乙個問題,往往有很多解決辦法,可是如何來評價解決方案的好壞呢?公認的好方法往往效率高,用時短。要合理的給乙個演算法衡量方式,往往需要從兩個方面入手:時間複雜度和空間複雜度。

時間複雜度即通常所說的演算法執行所需要耗費的時間,時間越短,演算法越好。但是,乙個演算法的執行時間往往無法精確估計。通常需要在實際的計算機執行才知道具體的執行時間。但是,也可以大致進行估計,得到演算法的時間複雜度。演算法的執行時間往往和演算法**中語句執行的數量有關。由於一段**中,每條語句的執行都需要時間,因此,可以這麼認為,**執行次數越多,程式耗費的時間越長,效率越差。因此,我們需要多寫一些短小精悍的**來提高**的執行效率。

在研究一些排序演算法中,我們經常會看到這樣一些時間複雜度的引數: 

例如插入排序:平均情況下,時間複雜度為o(n^2),類似的還有線性階o(n), 對數階o(log2 n), 線性階o(n), 線性對數階o(n log2 n), 平方階o(n^2),指數階o(2^n)。那麼這些複雜度應該如何去運算呢?

首先舉幾個小例子: 

乙個簡單的for迴圈

for(int i = 0;i<6;i++)
上述**中,總共執行了6次,對於這種常數的複雜度,經常會用o(1)來表示。

接下來,看這個**:

for(int i=0;i<2; i++){

for(int j = 0; j 這段**是兩個for迴圈巢狀,它的時間複雜度很容易看出是2n,通常這種我們用o(n)進行表示,表明它是線性變化的。

從上面舉的兩個例子可以看出,時間複雜度就是整個語句在執行過程中,根據所給的條件,在整個**執行過程中所執行的次數,這個執行次數與所給的新增和執行引數的大小息息相關。

空間複雜度通常指的是演算法程式在計算機只想中只想所需要的儲存空間。空間複雜度可從以下兩個方面去描述:

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...

演算法複雜度 時間複雜度和空間複雜度

演算法的時間複雜度是指執行演算法所需要的計算工作量。n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間複雜度概念。一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t n 表示,若有某個輔助函式f n 存在乙個正...