【问题标题】:How to solve for this recurrence T(n) = T(n − 1) + lg(1 + 1/n), T(1) = 1?如何求解这个递归 T(n) = T(n − 1) + lg(1 + 1/n), T(1) = 1?
【发布时间】:2016-03-12 21:52:45
【问题描述】:

我陷入了这种重复:

T(n) = T(n − 1) + lg(1 + 1/n), T(1) = 1?

一会,好像master方法不能用在这个上。

【问题讨论】:

  • 我可能错了,但对我来说它似乎是线性的。

标签: algorithm time-complexity asymptotic-complexity recurrence


【解决方案1】:

我们有:

lg(1 + 1/n) = lg((n + 1) / n) = lg(n+1) - lg(n)

因此:

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

T(n-1) - T(n - 2) = lg(n) - lg(n - 1)

...

T(3) - T(2) = lg(3) - lg(2)

T(2) - T(1) = lg(2) - lg(1)

加减,我们得到:

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

T(n) = 1 + lg(n + 1)

因此T(n) = O(lg(n))

【讨论】:

  • 我同意使用计算机(而且我不是对您的答案投反对票的人),但是这个等式从根本上是不正确的。如果它在计算机 上的基本算法上有效,则应将其重写为T(n) = T(n - 1) + lg(1 + 1/n) + k,其中k 是一个常数或O(1)。在这种情况下,解决方案将变成T(n) = n * k + lg(n + 1)O(n)
【解决方案2】:

与此处的另一个正确答案相同,只是证明不同。

以下所有方程都是从给定的递归中创建的:

  • T(n) = T(n-1) + Log((n+1)/n)
  • T(n-1) = T(n-2) + Log(n/(n-1))
  • .
  • .
  • .
  • T(2) = T(1) + Log(3/2)

将上述等式中的所有 RHS 和 LHS 相加得到:

  • T(n) = T(1) + Log(3/2) + Log(4/3) + ... + Log((n+1)/n)

由于 Log(a) + Log(b) = Log(ab),

  • T(n) = 1 + Log((n+1)/2)
  • T(n) = Log(10) + Log((n+1)/2) = Log(5n + 5) 假设碱基为 10 并使用 1 = Log1010

因此 T(n) = O(Log(5n + 5)) = O(Log(n))

【讨论】:

    【解决方案3】:

    它不像某些人所说的那样是线性的。它是O(log(n))。这是数学分析:


    如果你开始展开递归,你会得到:

    如果你能坚持到最后,你就会拥有

    或简写:

    用积分近似求和后,您将得到:

    最后,如果你要取一个极限 x -> 无穷大:

    你会看到第一部分是

    这为您提供了最终解决方案log(x + 1),即O(log(n))

    【讨论】:

    • 在这种情况下,对于有限的n,求和有一个封闭形式的解。
    • @user1952500 :-) 这很尴尬。无论如何,除了使事情过于复杂之外,此解决方案没有任何问题。也可以显示如果没有关闭形式的解决方案怎么办
    • 不用担心。我正要走同样的路线,因为极限允许我们在头脑中快速计算出解决方案。刚刚尝试了另一种方式:)
    猜你喜欢
    • 2019-04-15
    • 2012-06-24
    • 2017-12-22
    • 2011-02-14
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多