資料結構中複雜度問題
複雜度問題想必是很多人最頭疼的問題,下面就對其進行一些總結
複雜度分為:時間複雜度與空間複雜度
空間複雜度:演算法執行時,占用多少記憶體,包括指令空間、資料空間和環境棧空間;
時間複雜度:執行程式所使用的時間量級,包括編譯時間和執行時間。
評價乙個演算法的好壞,一般兩種複雜度呈現線性增長是最好的。
常見的時間複雜度:
常數階:o(1)
對數階:o(log2n)
線性階:o(n)
線性對數階:o(nlog2n)
平方階,立方階:o(n^2),o(n^3)
k次方階:o(n^k)
指數階:o(2^n)
時間複雜度的計算方法:
1.去掉執行時間中的所有加法常數。
2.只保留最高端項。
3.如果最高端項存在且不是1,去掉與這個最高端相乘的常數得到時間複雜度
舉個簡單的例子:
int a=0
for(int i=1;ia++;
該例子中共執行了n-1次,去掉加法常數-1(因為n取較大時,常數對時間複雜度影響較小),進而可得知時間複雜度為n,用o(n)表示
再舉例,若乙個程式的複雜度為n^2/2+3顯然先去掉常數項3,再保留最高項n^2/2,去掉最高項想成的常數1/2就可得時間複雜度o(n^2)
呀吼,是不是很簡單,豁然開朗的趕腳。
下面給出一些經典演算法複雜度的總結:
排序法最差時間分析
平均時間複雜度
空間複雜度
氣泡排序
o(n2
)o(n2
)o(1)
快速排序
o(n2
)o(n*log2
n)o(log2
n)~o(n)
選擇排序
o(n2
)o(n2
)o(1)
二叉樹排序
o(n2
)o(n*log2
n)o(n)
插入排序
o(n2
)o(n2
)o(1)
堆排序o(n*log2
n)o(n*log2
n)o(1)
希爾排序oo
o(1)
最後希望可以幫到大家~
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
問題 A 複雜度分析
一 任務描述 有如下 段 n為正整數 i 1 while i 1 while j 1 while k printf n 問printf語句共執行了幾次?這段 執行完以後i j k值為多少?粗略分析可知,3層迴圈時間複雜度大概在n 2 n 3之間 設為 式 最開始著手解決,按照經驗應該去打表人工找規律...
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...