【发布时间】:2014-09-18 18:47:50
【问题描述】:
我只是在尝试掌握 Master Theorem,在尝试评估 T(n) = T(n/2) + n 时有点困惑。使用主定理,答案的计算结果为 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)。
我现在很困惑。有人可以帮我看看我哪里弄错了吗?
【问题讨论】:
标签: algorithm recursion master-theorem