時間複雜度和空間複雜度

2022-09-20 07:24:14 字數 1468 閱讀 7082

簡單理解,為了某種運算而花費的時間,使用大寫o表示。一般來講,時間是乙個不太容易計量的維度,而為了計算時間複雜度,通常會估計演算法的操作單元數量,而假定每個單元執行的時間都是相同的。因此,總執行時間和演算法的操作單元數量一般來講成正比,最多相差乙個常量係數。一般來講,常見時間複雜度有以下幾種:

常數階o(1):時間與資料規模無關,如交換兩個變數值

int i=1,j=2,k

k=i;i=j;j=k;

線性階o(n):時間和資料規模呈線性,可以理解為n的1次方,如單迴圈裡的操作

for(i=1;i<=n;i++)
k次方階o(nk):執行次數是數量的k次方,如多重迴圈,以下為2次方階例項

for(i=1;i<=n;i++)

}

指數階o(2n ):隨著n的上公升,運算次數呈指數增長

對數階o(log2n):執行次數呈對數縮減

線性對數階o(nlog2n):在對數階的基礎上,進行線性n倍乘積

時間複雜度由小到大依次為:ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<...>

與時間複雜度類似,空間複雜度是對乙個演算法在執行過程中占用記憶體空間大小的度量。乙個程式執行時除了需要儲存空間和儲存本身所使用的指令、常數、變數和輸入資料外,還需要一些對資料進行操作的輔助空間。而空間複雜度主要指的是這部分空間的量級。

for(i=1;i<=n;)

for(i=1;i<=2^n;i++)

}同樣,空間複雜度也用大寫o表示,相比時間複雜度場景相對簡單,常見級別為o(1)和o(n),以陣列逆序為例,兩種不同演算法對複雜度影響如下:

o(1):常數階,所佔空間和資料量大小無關。

//定義前後指標,和乙個臨時變數,往中間移動
//無論a多大,佔據的臨時空間只有乙個temp

int a=;

int i=0,j=a.length‐1;

while (i<=j)

o(n):線性階,與資料量大小呈線性關係

//定義乙個和a同等大小的陣列b,與運算量a的大小呈線性關係

//給b賦值時,倒序取a

int a=;

int b=new int[a.length];

for (int i = 0; i 

對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。時間複雜度低可能借助占用大的儲存空間來彌補,反之,某個演算法所佔據空間小,那麼可能就需要占用更多的運算時間。兩者往往需要達到一種權衡。

在特定環境下的業務,還需要綜合考慮演算法的各項效能,如使用頻率,資料量的大小,所用的開發語言,執行的機器系統等。兩者兼顧權衡利弊才能設計出最適合當前場景的演算法。

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

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

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

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

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

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