簡體   English   中英

為什么給定的算法為O(n ^ 2)?

[英]Why is the given algorithm O(n^2)?

我正在研究一種算法,並試圖對其進行分解,並為它提出Big O表示法。 但是,我無法推斷為什么它是O(n ^ 2)

我看到外循環轉到N,但內循環讓我失望

int a = 0;
for (i = 0; i < N; i++) {
    for (j = N; j > i; j--) {
        a = a + i + j;
    }
}

如果有人在面試中出現這些問題,有人知道我如何最好地解決這些問題嗎? 我想更好地分析算法

外循環從0迭代到N-1

內部循環從N向下迭代到i+1

這意味着在外循環的第一次迭代中,內循環需要N步。 在外循環的第二次迭代中,內循環采取N-1步驟。 在外循環的第三次迭代中,內循環采取N-2步驟。 ...一直持續到外循環的最后一次迭代,其中內循環需要執行1步。

因此,總步數為N + (N-1) + (N-2) + ... + 2 + 1 ,或(重新排列) 1 + 2 + ... + (N-1) + N 該總和等於N * (N+1) / 2 (有關詳細信息, 請參見此處 ),擴展為0.5 * N^2 + 0.5 * N 忽略較低的冪和常數因子意味着這在O(N ^ 2)中。

如果您是一個有視覺見識的人,則可以將外部循環視為行,將內部循環視為列。 對於外循環的每次迭代,內循環的迭代次數(列)減少1。

直觀地呈現此內容,您將獲得:

* * * * * 
  * * * * 
    * * * 
      * * 
        * 

這是半個正方形(三角形),所以大約為(n ^ 2)/ 2,即O(n ^ 2)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM