【问题标题】:Recurrence relation: T(n) = T(n/2) + n递归关系:T(n) = T(n/2) + n
【发布时间】:2012-06-08 16:52:33
【问题描述】:

您好,我正在尝试通过伸缩来解决以下递归关系,但我被困在最后一步。

T(N) = T(N/2) + N              T(1)=0
T(N/2) = T(N/4) + N/2
T(N/4) = T(N/8) + N/4
...
T(2) = T(1) + 2

T(N)= T(1) + N + N/2 + N/4

我认为答案是 nlogn,但我不知道如何将上述解释为 nlogn。我可以看到我正在执行登录步骤,但是 n 来自哪里?

【问题讨论】:

    标签: recurrence


    【解决方案1】:

    您已经完全正确地完成了所有操作,但无法找到总和。你得到:n + n/2 + n/4 + ...,等于n * (1 + 1/2 + 1/4 + ...)

    您得到了 geometric series 的总和,等于 2。因此,您的总和是2n。所以复杂度是O(n)

    P.S.这不叫伸缩。数学中的伸缩是后续项相互抵消的时候。

    【讨论】:

      【解决方案2】:

      答案不是 nlogn 而是简单的 n

      T(1)=0

      T(N) = T(N/2) + N

      T(N/2) = T(N/4) + N/2

      T(N/4) = T(N/8) + N/4 ... T(2) = T(1) + 2

      伸缩式展开共有log(N)个语句

      现在通过伸缩取消,

      我们有 T(N) = T(1) + N + N/2 + N/4 + N/8 +.....+ 2

      T(1) = 0

      T(N) = N + N/2 + ..... + 2

      这是一个包含 log(n) 项的几何级数,每个项减半。

      T(N) = N [ 1 - (1/2)^log(N)] / (1/2)

      T(N) = 2N[1 - 1/N]

      T(N) = 2N - 2

      因此答案是 O(N)。

      【讨论】:

      • T(1) 不应该是 1 吗?
      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 2017-12-22
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多