基于伪码的递归关系(时间复杂度)

时间:2014-02-27 18:49:12

标签: algorithm complexity-theory time-complexity recurrence

考虑元素唯一性问题,我们给它一个范围,i,i + 1 ,. 。 。 ,j,数组的索引,A,我们想确定这个范围的元素,A [i],A [i + 1] ,. 。 。 ,A [j],都是唯一的,也就是说,这组数组条目中没有重复的元素。考虑以下(无效)递归算法。

public static boolean isUnique(int[] A, int start, int end) {
   if (start >= end) return true; // the range is too small for repeats

   // check recursively if first part of array A is unique
   if (!isUnique(A,start,end-1) // there is duplicate in A[start],...,A[end-1]
       return false;

   // check recursively if second part of array A is unique
   if (!isUnique(A,start+1,end) // there is duplicate in A[start+1],...,A[end]
      return false;

   return (A[start] != A[end]; // check if first and last are different
}

设n表示所考虑的条目数,即,让n = end - start + 1.对于大n,此代码片段的渐近运行时间的上限是什么?提供简短而准确的解释。 (如果你不解释,你会失去分数。)为了开始你的解释,你可以说有多少递归调用 算法将在终止之前生成,并分析该算法每次调用的操作数。 或者,您可以提供表征此算法运行时间的重复,然后解决它 使用迭代替换技术?

这个问题来自算法类的示例练习考试这是我目前的答案可以请帮助验证我是否在正确的轨道上

答案:

递推方程式:

如果n = 1,则

T(n)= 1,  如果n> 1,则T(n)= 2T(n-1)。 1

解决使用迭代替换之后我得到了

2 ^ k * T(n-k)我将其解析为O(2 ^(n-1))并且我将其简化为O(2 ^ n)

1 个答案:

答案 0 :(得分:0)

您的递归关系应为T(n)= 2T(n-1)+ O(1),其中T(1)= O(1)。然而,这不会改变渐近线,解决方案仍然是T(n)= O(2 ^ n)。要看到这个,你可以扩展递归关系得到T(n)= O(1)+ 2(O(1)+ 2(O(1)+ ...))所以你有T(n)= O( 1)*(1 + 2 + 4 = ... + 2 ^ n)= O(1)*(2 ^(n + 1) - 1)= O(2 ^ n)。