1_4複雜度
二分查詢法O(logn) 所需執行指令數(a*logn)
尋找陣列中的最大最小值O(n)
二分查詢法O(logn) | 所需執行指令數(a*logn) |
---|---|
尋找陣列中的最大最小值O(n) | 所需執行指令數(b*n) |
歸併排序法O(nlogn) | 所需執行指令數(c*nlogn) |
選擇排序法O(n^2) | 所需執行指令數(d*n^2) |
問題:有一個字串陣列,將陣列中的每一個字串按照字母序排序,之後再講整個字串陣列按照字典序排序,整個操作的時間複雜多是多少?
假設 最長的字串長度是s,陣列中有n個字串
對每個字串排序:O(slogs)
將陣列中的每一個字串按照字母序排序:O(nslog(s))
將整個字串陣列按照字典順序排序:O(snlog(n))
整體複雜度:
O(n * slog(s)+s * nlog(n)) = O(n*s(log(s)+log(n)))
插入排序 最差是O(n2) 最好O(n) 平均O(n2)
快速排序 最差O(n2) 最好O(nlogn) 平均O(nlogn)
如果想在1s內解決問題:
O(n2)的演算法可以處理大約10^4級別的資料
O(n)的演算法可以處理大約10^8級別的資料
O(nlogn)的演算法可以處理大約10^7級別的資料
空間複雜度
多開一個輔助的陣列 O( n)
多開一個輔助的二維陣列O(n2)
多開一個常數空間O(1)
複雜度分析:
雙重迴圈不一定都是O(n2)
複雜度實驗:
實驗觀察趨勢:
每次將資料規模擴大十倍,觀察時間,來判斷該演算法的時間複雜度
將相鄰資料規模進行除法,可以判斷演算法大約是O(n^2)的時間複雜度
O(log(n))級別的演算法,在資料特別大的時候,基本不會增加額外的耗時。
增大資料規模,時間增加的並不是很多
O(nlogn)也不錯,但是如果是O(n2)就完全不能接受
不是有遞迴的演算法就是nlogn
遞迴中進行一次遞迴呼叫的複雜度分析
如果遞迴函式中,只進行一次遞迴呼叫,遞迴深度為depth
在每個遞迴函式中,時間複雜度為T,
則總體的時間複雜度為O(T*depth)
均攤複雜度分析
相關文章
- DDD之理解複雜度、尊重複雜度、掌控複雜度複雜度
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 複雜度分析複雜度
- 時間複雜度O(n)和空間複雜度時間複雜度
- 複雜度分析的套路及常見的複雜度複雜度
- 淺析程式碼圈複雜度及認知複雜度複雜度
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 演算法複雜度演算法複雜度
- 演算法--複雜度演算法複雜度
- Shell排序複雜度分析排序複雜度
- dijkstra 複雜度證明複雜度
- 122 演算法的時間複雜度和空間複雜度詳解演算法時間複雜度
- 圖解時間複雜度圖解時間複雜度
- 淺談時間複雜度時間複雜度
- 第一講 複雜度分析複雜度
- dfs時間複雜度分析時間複雜度
- 時間複雜度(詳解)時間複雜度
- 演算法複雜度分析演算法複雜度
- PHP 演算法基礎----時間複雜度和空間複雜度(轉載)PHP演算法時間複雜度
- 那些年忽略的知識:時間複雜度和空間複雜度詳解時間複雜度
- 時間複雜度的計算時間複雜度
- 演算法複雜度分析(下)演算法複雜度
- 面試中的複雜度分析面試複雜度
- 演算法複雜度分析(上)演算法複雜度
- 網路流複雜度證明複雜度
- AAAI 2021 | 投票的平滑複雜度AI複雜度
- 演算法的複雜度分析演算法複雜度
- 降低程式碼的圈複雜度——複雜程式碼的解決之道複雜度
- 易被忽略的知識點之 ---- 各種時間複雜度和空間複雜度時間複雜度
- 演算法的時間複雜度演算法時間複雜度
- 時間與空間複雜度分析複雜度
- JavaScript 演算法之複雜度分析JavaScript演算法複雜度
- 演算法(一)時間複雜度演算法時間複雜度
- 資料結構:時間複雜度資料結構時間複雜度
- 氣泡排序時間複雜度分析排序時間複雜度
- 常用的時間複雜度分析方法時間複雜度