[英]Apply master theorem on T(n) = T(n/2) + n
我只是在嘗試掌握定理,而在嘗試評估T(n)= T(n / 2)+ n時有些困惑。 使用Master定理,答案為O(n)。
但是只需執行以下代碼:
fun(n)
{
if(n == 1)
return ;
for(int i=1;i<=n;i++)
{
printf("*");
}
fun(n/2);
}
上述代碼的遞歸方程為T(n)= T(n / 2)+ n。 因此,上述程序的時間復雜度必須為O(n)。
但是如果從邏輯上考慮,程序運行的次數為:n + n / 2 + n / 4 + n / 8 + ...... = nlogn。 因此,從邏輯上說,上述程序的時間復雜度必須為O(nlogn)。
我現在很困惑。 有人可以幫我解決我做錯的地方嗎?
不,該系列的計算結果為2n。
n + n / 2 + n / 4 + n / 8 + ...... = 2n
但是,如果您有T(n)= 2T(n / 2)+ n,那么它將是O(n log n)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.