2016-08-22 156 views
0

你如何計算出這個的時間複雜度?時間複雜度(嵌套循環)

int count=0; 

for (int i=1 ; i < n; i*=4) 

    for (int j=1;j<=n;j++) 

       count++; 
+1

至少需要格式化你的幾行代碼的時間。此外,你尋求幫助,但並沒有真正解釋你卡在哪裏。你基本上只是給了我們一項家庭作業。 –

+0

試圖找出如何從代碼片段獲取T(n)。將t(n)= O(n^2)還是O(log(n))。它不是作業。這是來自過去測試的一個問題。只是真的有一個理解它的問題 – WWBM

+0

你爲什麼認爲這將是其中之一?同樣,你應該解釋你理解它的方式,並且非常具體地說明你困惑的部分。 –

回答

6

TL;博士:在發佈代碼的複雜性:O(nlogn)

讓我們來分析它從內到外。對於i的每個值,內循環重複自己精確地爲n次。

外循環重複自身,而i < ni每次乘以4。這意味着,在第一次迭代之後,i=1,然後i=4, i=16, i=64, ....k'th迭代i = 4^(k-1)之後。
這意味着,在停止時:

i >= n 
4^(k-1) >= n 
log_4(4^(k-1)) >= log_4(n) 
k-1 >= log_4(n). 

這意味着外環將重複log_4(n) + 1

總結它一起帶給你內在的循環重複n*(log_4(n)+1)倍,這是O(nlogn)

+0

非常感謝你!老實說,讓更多的感覺! – WWBM