我有一个递归算法,它计算数组中的最小整数。
ALGORITHM F_min1(A[0..n-1])
//Input: An array A[0..n-1] of real numbers
If n = 1
return A[0]
else
temp ← F_minl(A[0..n-2])
If temp ≤ A[n-1]
return temp
else
return A[n-1]
我认为复发关系应该是
T(n)= T(n-1)+ n
但我不确定+ n
部分。我想确定在哪些情况下重复是T(n)=T(n-1) + 1
,在哪些情况下,重复是T(n)=T(n-1) + n
。
答案 0 :(得分:3)
复发应该是
T(1) = 1,
T(n) = T(n-1) + 1
因为除了对较小数组的递归调用之外,所有计算工作(读取A
的最后一个条目并进行比较)在单位成本度量中需要恒定的时间。该算法可以理解为分而治之,其中除法部分将数组拆分为前缀和最后一个条目; 征服部分,这是一个比较,在这里不能超过恒定的时间。总的来说,在递归调用之后存在线性工作的情况不存在。