递归算法阵列的时间复杂度

时间:2017-02-24 10:30:07

标签: algorithm performance math recursion time-complexity

我有一个递归算法,它计算数组中的最小整数。

 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

1 个答案:

答案 0 :(得分:3)

复发应该是

T(1) = 1,
T(n) = T(n-1) + 1

因为除了对较小数组的递归调用之外,所有计算工作(读取A的最后一个条目并进行比较)在单位成本度量中需要恒定的时间。该算法可以理解为分而治之,其中除法部分将数组拆分为前缀和最后一个条目; 征服部分,这是一个比较,在这里不能超过恒定的时间。总的来说,在递归调用之后存在线性工作的情况不存在。