2013-03-10 56 views
0

有人可以向我解釋爲什麼這段代碼的運行時複雜度T(n)爲2lgn + 2。我認爲它應該是lgn + 2。塊代碼的運行時間

public static reduce(int n){ 
int result = 0; 
while (n >1){ 
    n = n/2; 
    result = result +1; 
} 
return result; 
} 
+1

那麼,這取決於你分配給每一行代碼的複雜性...... – 2013-03-10 14:06:43

回答

1

大概假定每行都需要1個單位時間(不包括n > 1檢查)。

所以int result = 0;,n = n/2;,result = result +1;return result;每個分類爲取1個單位時間。

2來自int result = 0;return result;,每個執行一次。

2日誌Ñ來自n = n/2;result = result +1;各自爲執行日誌 n次。

注:

n > 1也可分類爲產生3日誌 N + 2

n = n/2;result = result +1;可以各自分類爲採取的時間2個單位導致的時間單位(同上)5日誌 n + 2.

這一切都很主觀。

唯一的全面協議將c日誌 n + d爲某些c和d。

+0

謝謝,這有很大的幫助。 – gadona91 2013-03-10 17:18:59

+0

@WaadKahouli如果您發現它有幫助,請記住[upvote and/or accept](http://meta.stackexchange.com/a/168143/206447)此答案。 – Dukeling 2013-03-10 17:36:02