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