与特定算法的递归关系

Recurrence Relation to a specific algorithm

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

例如:

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}
}

如果有人能帮助我确定与此类似的 function/a 函数的递归关系,并指导我完成确定关系的步骤,我会亲吻你的靴子(不是真的,但你的帮助会非常感谢)。

你的递归被描述为简单的依赖,因为你将任务分成两个相等的子任务并执行恒定数量的操作:

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),因此 space 复杂度为 O(log(N))
(感谢 Abhishek Bansal 添加)