乙個時間複雜度問題

2021-08-19 03:19:44 字數 955 閱讀 1589

有乙個字串陣列,將陣列中的每乙個字串按照字母序排序;之後再將整個字串陣列按照字典序排序。整個操作的時間複雜度是多少?

假設最長的字串長度為 s(為什麼要假設最長字串呢?因為通常求的時間複雜度是上界,所以我們假象這個字串陣列中所有字串的長度都是最長的 s ,這樣計算得出來的時間複雜度就是上界,包含了最壞的情況);陣列中有 n 個字串

我們將計算分為兩部分:一部分是計算每個字串按照字母序排序的時間複雜度;另一部分是計算將整個字串陣列按照字母序排序的時間複雜度

因為對每個單獨的字串排序:o(slogs),所以將陣列中的每乙個字串都按照字母序排序:o(n * slog(s))

將整個字串陣列按照字典序排序:o(s * nlog(n))

注意這裡比較的是字串,所以在按照字典序排序的時候還需要消耗每個字串的長度將這兩部分的計算結果合併:o(n * slog(s)) + o(s * nlog(n)) = o(n * s * logs + s * b * logn)

通常,乙個演算法如果由兩部分組成,那麼整個演算法的時間複雜度應取複雜度最大的那個。

e.g. o(nlogn + n) = o(nlogn)

這麼計算的前提是這兩部分處理的規模 n 是一樣的,如果對於 o(aloga + b) 這種情況,因為 a 和 b 沒有關係,我們就沒有辦法確認 a 和 b 誰的規模大,所以不能確認以哪個為主。

比較常見的乙個例子就是對鄰接表實現圖的遍歷的情況,其時間複雜度為 o(v + e),v 和 e 沒有必然聯絡,所以彼此不能替換。除非是乙個完全圖 or 稠密圖,此時 e 近乎是 v^2 級別,此時時間複雜度就是 o(v^2) ,這也是用鄰接矩陣實現圖的遍歷時的複雜度,但是通常用鄰接表處理的都是一些稀疏圖。總之,就是 v 和 e 是兩個不同的規模,不能混為一談,在考慮時間複雜度時需要考慮類似這樣的情況。

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...

時間複雜度和空間複雜度(一)

如何度量演算法的效率?效率一般指演算法的執行時間。那麼如何度量演算法的執行時間?事後統計方法 可以把演算法跑若干次,用計時器計時 通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率高低。缺陷 必須依據演算法,事先編制好測試程式,大量耗費時間精力。...

時間複雜度 空間複雜度

時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...