有人可以帮助我对以下代码进行运行时分析:
public static void f(int n)
{
for (int i = 0; i <= n; i++)
{
System.out.print("+" + i);
}
if (n <= 1)
{
return;
} else
{
f(n / 3);
f(n / 3);
}
}
据我所知,代码的递归公式的运行时间是:
T(n)= cn + 2T(n / 3)
我认为答案应该是Θ(nlog(n))
,但书籍解决方案显示它是Θ(n)
。
此外,为了简单起见,本书还假设n = 3^k
。
有人可以向我解释正确的答案吗?
答案 0 :(得分:0)
考虑使用Master Theorem。您的情况对应于情况1,其中f(n)= cn是O(n)。 a = 2且b = 3,并应用该定理,我们得到T(n)为bigTheta(n ^ log3(2)),即BigTheta(n)。
希望它有所帮助...