【问题标题】:Recurrence relation and time complexity递归关系和时间复杂度
【发布时间】:2019-02-22 14:42:04
【问题描述】:

以下伪代码的递归关系和时间复杂度是多少?

temp = 1 
repeat 
    for i=1 to n 
        temp = temp +1 
    n=n/2
until n>=1

【问题讨论】:

  • 复发关系?这里的递归在哪里?
  • 据我所知,可以在此定义递归关系,因为它会再次运行相同的循环(for 循环),每次 n 的值是一半,所以 T(n/2) 会成为复发的一部分。这有意义吗?
  • 是的,你可以,但这不是必须的。
  • 那么,这里的时间复杂度是多少?我所指的书将其解决为 T(n) = T(n/2) + n 并应用大师定理,O(n) 是提到的答案。但是如果你考虑一下,循环将运行 n + n/2 + n/4 + n/16 等等,直到 n 变为 1。这不是大于 O(n) 吗?

标签: algorithm time-complexity complexity-theory


【解决方案1】:

当我们处理 Big-Oh 、 Omega 和 Theta 等渐近符号时,我们不考虑常量。毫无疑问,您的时间复杂度会像

    n + n/2 + n/4 + ... + 1

但是如果你加上这个递减的 G.P 系列,你会得到等于 c*n 的精确答案,其中 c 将是大于 1 的常数。但在我之前所说的渐近符号中,常数并不重要,所以值是否c 是 2 或 50 或 100 或 10000 或任何值,它只会是 O(n)。

另一件事,尽量不要使用大师定理来解决递归关系并使用递归树方法,因为它是纯概念的,将帮助你建立你的概念,并且可以在任何情况下使用。硕士定理是捷径,也有局限性。

【讨论】:

  • “毫无疑问,你的循环会像...一样运行”:不,它不会。请参阅问题的 cmets。
  • @Henry 其实我想在这里提到时间复杂度。时间复杂度会像 n + n/2 + n/4 等等......它就像把 n 时间问题分解成一个大小为 n/2 的子问题,使用它我们将得到书中提到的结果
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2023-03-04
相关资源
最近更新 更多