1_4複雜度

qq_40310710發表於2021-01-04

二分查詢法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(s
nlog(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)

均攤複雜度分析

相關文章