[英]Find the time complexity of a given function
對於給定的程序,時間復雜度將是多少。
int count = 0;
for(int i = n; i > 0; i /= 2)
{
for(int j = 0; j < i; j++)
{
count++;
}
}
根據我的理解,它應該是O(nlogn)
因為i
循環是分而治之的,因此O(logn)
和j
循環是O(n)
。
但是,正確的答案是O(n)
。 有人可以解釋原因嗎?
這是O(n)
:
外循環具有O(logn)
迭代,因為i
從n
開始並且在每次迭代時減半。
現在讓我們考慮內循環的迭代次數:
n
次迭代(因為i==n
)。 在外循環的第二次迭代中,內循環具有n
/ 2次迭代(因為i==n/2
)。
...
在外循環的log(n)
'(和最后)迭代中,內循環有1次迭代(因為i==1
)。
總結我們得到的所有內循環迭代:
n + n/2 + n/4 + ... + 1 <= 2*n = O(n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.