我坚持从算法课程中学到的这项功课:
我认为这样的事情,但我对自己的做法非常不确定。使用Theta(n ^ 4 logn)的运行时编写递归函数。
function(int n)
{
for-loop (1..n^4)
//do something
return function(n/2);
}
答案 0 :(得分:1)
你应该不确定,你的功能有一些问题:
如果为函数设置初始值,则为:
T(n)= T(n / 2)+ O(n ^ 4)
并且通过主定理,这是Θ(n ^ 4)。
提示:你应该增加T(n/2)
的系数,但是多少?自己找。对于这种增加,您可以将其称为x
次。
当我们有这样的递归时,由Master定理log n
发生:
T(n)= a T(n / b)+ n a / b
在你的情况下,你有一个/ b = 4,所以你可以修复b = 2和a = 8来实现这一点。
T(n)= 8T(n / 2)+ n 4
到达此处,你可以拨打T(n / 2)8次。
答案 1 :(得分:0)
提示:n 4 可以是从1到n的四个嵌套循环。对数运行时间因子通常是通过递归地将问题大小减半直到达到1来获得的。您的提议类型有效,但是非常直率而且您甚至可以做到
func(int n)
for i = 1 to n^4 log n
nop()
但我不相信这是正在寻找的东西。
答案 2 :(得分:-1)
你的方法是理智的,你的不安全是正常的。您现在应该证明您的算法是Theta(n ^ 4 log n)。应用您的常规算法分析技术,以显示function
执行do something
n ^ 4 log_2 n次。
提示:计算递归调用function
的次数以及循环在每次调用中运行的频率。您会看到您的功能中仍然存在一个小错误;每次递归调用都会减少n
因子的n^4
。