資料結構與演算法之美 04 複雜度分析 下

2022-05-08 23:27:09 字數 1095 閱讀 7135

本章講解:

最好情況時間複雜度: **在最理想情況下執行的時間複雜度

最壞情況時間複雜度: **在最壞情況下執行的時間複雜度

平均情況時間複雜度: **在所有情況下執行的次數的加權平均值

均攤時間複雜度: **在執行的所有複雜度情況中絕大部分是低階別的複雜度,

個別情況是高階別複雜度且發生具有時序關係時,可以將這個高階別

複雜度均攤到低級別複雜度上,基本上均攤結果就等於低級別複雜度

最好、最壞情況時間複雜度

示例**:

func find(array int, n, x int) (pos int)

}return pos

}func main()

fmt.println(find(a, len(a), 2))

}最好情況時間複雜度為o(1)

最壞情況時間複雜度為o(n)

這段**的加權平均時間複雜度仍然是 o(n)

均攤時間複雜度

示例**:

func insert(val int)

var count = 0

if count == len(array)

array[0] = sum

count = 1

}array[count] = val

count ++

}最好情況時間複雜度為o(1)

最壞情況時間複雜度為o(n)

那平均時間複雜度是多少? 答案是o(1)

為什麼要引入這4個概念?

1、同一段**在不同情況下時間複雜度會出現量級差異,為了更全面、更準確的描述**的時間複雜度。

2、**複雜度在不同情況下出現量級差別時才需要區別這四種複雜度,大多數情況不需要。

如何分析平均、均攤時間複雜度?

1、平均時間複雜度

**在不同情況下複雜度出現量級差別,則用**所有可能情況下執行次數的加權平均值表示

2、均攤時間複雜度

兩個條件滿足時使用:

1、**在絕大多數情況下是低級別複雜度,只有在極少情況下是高階別複雜度

2、低級別和高階別複雜度出現具有時序規律,均攤結果一般都等於低級別複雜度

資料結構與演算法之美 複雜度分析

因為我們需要乙個不用具體的測試資料來測試,就可以粗略估計演算法的執行效率的方法。演算法的執行效率,粗略地講,就是演算法 執行的時間。舉個例子 int cal int n 首先,所有 的執行時間 t n 與每行 的執行次數成正比。我們依舊假設每個語句的執行時間是 unit time。那這段 的總執行時...

資料結構與演算法之美(二) 複雜度分析

資料結構和演算法解決的問題是 如何讓計算機更快時間 更省空間地工作 更快 更省的效能需要有東西來衡量,複雜度分析就是分別從執行時間和占用空間兩個維度來評估資料結構和演算法的效能 分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。複雜度描述的是演算法執行時間 或占用空間 與資料規模...

演算法與資料結構之演算法複雜度

常用演算法的時間複雜度和空間複雜度 平時在聊天談論演算法時候,發現很多人並不清楚演算法的時間複雜度怎麼計算,一些稍微複雜的演算法時間複雜度問題,就無法算出時間複雜度。那麼我在今天的文章裡去解答這些問題 執行這個演算法所需要的計算工作量 隨著輸入資料的規模,時間也不斷增長,那麼時間複雜度就是乙個演算法...