[英]Time Complexity of an algorithm : How to decide which algorithm after calculated the time
今天,我在msdn中遇到了一個博客,我注意到了如何計算算法的時間復雜度。 我完全理解如何計算算法的時間復雜度,但最后作者提到了以下幾行
加起來我得到的一切
(N + 4)+(5N + 2)+(4N + 2)= 10N + 8
因此,上述代碼的漸近時間復雜度為O(N),這意味着上述算法是線性時間復雜度算法。
因此,作者怎么說它是基於線性時間復雜度算法的。 博客鏈接
他說,因為10N + 8是線性方程。 如果您繪制該方程式,則會得到一條直線。 嘗試在此網站上鍵入10 * x + 8
( 功能圖 ),然后親自看看。
作者只是基於他在選擇最合適的方面的經驗。 您應該知道,計數算法的復雜性幾乎總是意味着要找到一個Big-Oh函數,而這又僅僅是給定函數的上限 (在您的情況下為10N + 8 )。
只有幾種眾所周知的復雜度類型: 線性復雜度, 二次復雜度等 。 因此,計算時間復雜度的最后一步包括選擇可用於給定函數的復雜度較小的類型(即線性不如二次復雜,並且二次不那么復雜,以指數等)。 ,可以正確描述其復雜性。
在您的情況下,O(n)和O(n ^ 2)甚至O(2 ^ n)確實是正確的答案 。 但是,最適合Big-Oh表示法定義的不太復雜的函數是O(n) ,這是一個答案。
這是一篇真正的好文章 ,充分解釋了Big-Oh符號 。
時間復雜度升序(常見的一種)
O(1) - Constant
O(log n) - logarithmic
O(n) - linear
O(n log n) - loglinear
O(n^2) - quadratic
注意:N無限增加
對於復雜性理論,您絕對應該閱讀一些背景理論。 它通常是關於漸進復雜性的,這就是為什么您可以刪除較小的部分並僅保留復雜性類的原因。
關鍵思想是,一旦N
很大, N
和N+5
之間的差異就可以忽略不計。
有關更多詳細信息,請從此處開始閱讀:
一個非常實用的規則是:
當算法si的復雜度由 A*n^2+B*n+C
類的多邊形表示時, 那么復雜度的順序 (即O(something)) 等於變量n的最高順序 。
在A*n^2+B*n+C
多邊形中,順序為O(n ^ 2)。
就像josnidhin解釋的那樣,如果poly具有
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.