递归与特定算法的关系

时间:2016-10-04 05:26:38

标签: algorithm recursion recurrence

晚上好。在我上课的过去一周,我一直在学习如何计算运行时间以及确定给定算法的递归关系。我对迭代算法感到满意,但不是递归算法。特别是当有两个递归调用一个接一个地发生时。

例如:

FindMin(int A[], int front, int last)

if (last-front <= 1) 
  return A[front]
else {
  midpoint = (front+last)/2
  int minFront = FindMin(A, front, midpoint)
  minLast =  FindMin(A, midpoint+1, last)
  return min{minFront, minLast}
}

如果有人可以帮我确定这个功能的复发关系/类似的功能,并指导我完成确定关系的步骤,我会亲吻你的靴子(不是真的,但你的帮助将非常感激)。

1 个答案:

答案 0 :(得分:2)

您的递归由简单依赖描述,因为您将任务除以两个相等的子任务并执行常量操作:

T(n) = 2 * T(n/2) + C
T(n) = 2 * (2 * T(n/4) + C) + C = 4 * T(n/4) + 3*C
T(n) = 4 * (2 * T(n/8) + C) + 3*C = 8 * T(n/8) + 7*C
...
T(n) = n * T(1) + (n-1)*C = n * C = O(n)

请注意,此递归的堆栈深度为log(N),因此空间复杂度为O(log(N))
(感谢Abhishek Bansal补充)