2017-09-24 46 views
0
test = 0 
for i in range(n):   
    for j in range(n): 
     test = test + i * j 

*********** B *********這些代碼的大運行時間是什麼?

test = 0 
for i in range(n):   
    test = test + 1 

***********Ç***** ****

for j in range(n): 
    test = test – 1   
i = n    
while i > 0: 
    k = 2 + 2 
    i = i // 2 

對於A,我相信這是O嵌套for循環的(N^2),因爲,對於B是O(N),因爲它是一個單一的for循環。而對於C,我想它是O(n * log(n)),因爲它是for循環和while循環。我認爲這是否正確?

+1

我也同意了前兩個,但爲什麼'C'是' n * log(n)'因爲它是兩個不同的循環,因爲循環是O(n),它在循環中佔優勢,所以它不是O(n) – 0p3n5ourcE

回答

2

你說得對,直到最後一個,因爲迴路沒有嵌套這將是O(n + log(n)),自n > log(n)它僅僅是O(n)

+0

感謝您的輸入!但爲什麼我們省略了log(n)部分?我無法繞過這個包裹。當我們對一個函數的時間複雜性感興趣時,我們真正關心的是他們將如何爲大量的輸入行爲,那麼n> log(n)證明了什麼? –

+1

@Acoolguy。由於n往往越來越大,'n'變得比'log(n)'大得多(你可以用圖來驗證)。實際上,存在一個帶有'O(log(n))'循環的事實對於n的大輸入來說並不意味着太多。 – Mitchel0022

+0

取n = 500000000,那麼log(n)接近於28,我們只考慮n,因爲它表明n更主要,log(n)的值更小。 – 0p3n5ourcE