具有Theta(...)特定运行时的递归函数

时间:2012-05-07 10:23:04

标签: algorithm recursion

我坚持从算法课程中学到的这项功课:

  

使用Theta(n ^ 4 logn)的运行时编写递归函数。

我认为这样的事情,但我对自己的做法非常不确定。

function(int n)
{
   for-loop (1..n^4)
     //do something

   return function(n/2);
}

3 个答案:

答案 0 :(得分:1)

你应该不确定,你的功能有一些问题:

  1. 它没有初始值,并且永远运行。
  2. 如果为函数设置初始值,则为:

    T(n)= T(n / 2)+ O(n ^ 4)

  3. 并且通过主定理,这是Θ(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