Big-Theta(n ^ m)递归

时间:2013-11-24 19:28:26

标签: algorithm recursion big-theta

我正在尝试在Big-Theta(n ^ m)中实现时间复杂度的算法,n和m是自然数。

我的第一个解决方案:

algo(n,m,i){ // called with algo(n,m,1)
  if (i < m){
   algo(n,m,i+1)
  }
  for i = 1 to n{
    print(do something in constant time);
  }
}

我的第二个解决方案:

algo(n,m,i){ //called with algo(n,m,m)
   if (i > 0){
      for j = 1 to n{
         algo(n,m,i-1)
      }
   }else{
   print(do something in constant time);
   }
}

当我分析名为algo(n,m,m)的第二个解决方案时,我得到T(i) = n * T(i-1), i > 0。 随着T(0)=恒定时间,我得到T(i) = n^m。所以我认为我的第二个解决方案是正确的,但我不知道我的第一个解决方案有什么问题。

1 个答案:

答案 0 :(得分:1)

对于您的第一个算法,

if (i < m)
    algo(n, m, i+1)

基本上会调用algo总共m * (m-1) / 2次,每个algo都有一个O(n)循环,因此,总复杂度将为O(n * m ^ 2)。< / p>

或换句话说,对于第一种算法,它类似于T(i) = n + T(i-1),其中i = 0, ..., m