【问题标题】:Time Complexity of Recursive Algorithm Array递归算法数组的时间复杂度
【发布时间】:2017-07-15 03:34:51
【问题描述】:

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

 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

【问题讨论】:

  • 它的 T(n)=T(n-1) + 1 所以它是全局的 Theta(n)。至少,乍一看。其中“+1”是一个总称,表示一组有限的恒定时间操作。

标签: algorithm performance math recursion time-complexity


【解决方案1】:

重复次数应该是

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

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

【讨论】:

  • 非常感谢,我坚持的是递归之后会有n个比较所以o(n)。
  • @ayt_cem 确实,有n比较总共;但是,每个递归调用中只有一个比较。
  • 那么为了在递归调用后的每次比较中都是+o(n),应该有n次比较?
  • 是的,但只有一个。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多