[英]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.