03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?
目錄
?
為什么需要復雜度分析?
大 O 復雜度表示法
時間復雜度分析
幾種常見時間復雜度
空間復雜度分析
為什么需要復雜度分析?
事后統計法:代碼跑一遍,通過統計、監控,就能得到算法執行的時間和占用的內存大小。這種統計方法有非常大的局限性。
因此,我們需要一個不用具體的測試數據來測試,就可以粗略地估計算法的執行效率的方法。
大 O 復雜度表示法
T(n)表示算法的執行時間,n表示數據規模的大小,f(n)表示每行代碼執行的次數總和。公式中的 O,表示代碼的執行時間 T(n) 與 f(n) 表達式成正比。
大 O 時間復雜度實際上并不具體表示代碼真正的執行時間,而是表示代碼執行時間隨數據規模增長的變化趨勢,所以,也叫作漸進時間復雜度(asymptotic time complexity),簡稱時間復雜度。
時間復雜度分析
如何分析一段代碼的時間復雜度?有三個比較實用的方法
幾種常見時間復雜度
1.、O(1):一般情況下,只要算法中不存在循環語句、遞歸語句,即使有成千上萬行的代碼,其時間復雜度也是Ο(1)。
2、O(logn)、O(nlogn)對數階時間復雜度非常常見,同時也是最難分析的一種時間復雜度。我通過一個例子來說明一下。
3、O(m+n)、O(m*n):代碼的復雜度由兩個數據的規模來決定
空間復雜度分析
空間復雜度全稱就是漸進空間復雜度(asymptotic space complexity),表示算法的存儲空間與數據規模之間的增長關系
我們常見的空間復雜度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 這樣的對數階復雜度平時都用不到。而且,空間復雜度分析比時間復雜度分析要簡單很多。所以,對于空間復雜度,掌握剛我說的這些內容已經足夠了。
?
?
總結
以上是生活随笔為你收集整理的03|复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins教程(Linux版)
- 下一篇: Docker安装Jenkins教程