【问题标题】:Solve recurrence: T(n) = T(n^(1/2)) + Θ(lg lg n) [closed]求解递归:T(n) = T(n^(1/2)) + Θ(lg lg n) [关闭]
【发布时间】:2012-06-24 08:06:05
【问题描述】:

开始学习算法。我了解如何从T(n) = Tf(n) + g(n) 之类的“定期重复”中找到 theta 符号。但是我迷失了这个recurrence: problem 1-2e

T(n) = T(√n) + Θ(lg lg n)

如何选择寻找θ的方法?什么,呃,这个复发是什么?我只是不太明白 notation-inside-a-recurrence 的事情。

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Mathematics Stack Exchange 会是一个更好的提问地点。
  • 哦哇,过去的爆炸!这是一个通用的计算机科学问题(测量算法的 theta 符号),它应该移到哪里?这不属于数学,因为这不是数学问题。哦,我在 StackOverflow 上看到了类似的问题——stackoverflow.com/questions/3255/…
  • 是的,很抱歉。一个人问了一个质量很差的类似问题。他的问题被关闭为题外话。作为报复,他引用了你的问题,而你被他拖累了。

标签: algorithm math recurrence big-theta


【解决方案1】:

这是使用变量替换的好地方。我们从

开始

T(n) = T(√n) + Θ(log log n),

其中参数 n 衰减平方根因子。当你看到这样的东西时,一个很好的常见变换是通过设置 S(m) = T(2m) 来定义一个新的循环。如果我们在这里这样做,我们会得到以下结果:

S(m) = T(2m)

= T(√(2m)) + Θ(log log 2m)

= T(2m/2) + Θ(log m)

= S(m / 2) + Θ(log m)。

换句话说,我们现在有了递归

S(m) = S(m / 2) + Θ(log m)。

这种重复似乎更容易处理,因为我们不再使用平方根项来缩小事物。特别是,这恰好是 Master Theorem 关心的事情。具体来说,我们有 a = 1、b = 2 和 d = 0。(为什么我们有 d = 0?因为我们可以将 Θ(log m) 视为 m0 Θ(log m ))。然后主定理告诉我们,这解决了

S(m) = Θ((log m)2).

我们刚刚求解了递归 S(m),但我们对求解递归 T(n) 很感兴趣。我们如何连接它们?好吧,由于 S(m) = T(2m),我们可以 - 假设 n 是 2 的完美幂 - 将其重写为 S(log n) = T(n)。然后让我们看到

T(n) = S(log n)

= Θ((log log n)2),

这是递归的解。

【讨论】:

  • 来自 lg k + (lg k) - 1 + (lg k) - 2 + (lg k) - 3 + ... + (lg k) - lg k 你是怎么得到 Θ( (lg k)2) ?
  • 这来自和1 + 2 + 3 + ... + n = n(n+1)/2,插入n = lg k。
  • 对不起,我还是没有正确理解。你能提供从 lg k + (lg k) - 1 + (lg k) - 2 + (lg k) - 3 + ... + (lg k) - lg k pls 的逐步减少吗?是的,我知道那个总结。但是你怎么能减少这个呢?请说清楚
  • @AkhilNadhPC 注意 (lg k) - 1 + (lg k) - 2 + ... + (lg k) - (lg k),倒写为 0 + 1 + 2 + ... + (lg k) - 2 + (lg k) - 1 + lg k。
  • 我的理解是到这个 (lg k) - 1 + (lg k) - 2 + ... + (lg k) - (lg k), = (lg k) +(lg k) + ..... +(lg k) -( 1+2+3+4+.... ) = (lg k) +(lg k) + ..... +(lg k) - m(m+1) / 2 你如何关联 m = log k ? (这里)
【解决方案2】:

这里是如何使用数学来解决它。我将使用lnln(n) 而不是O(lnln(n))。这主要是为了减少公式的长度,你可以用 big-O 做同样的事情。所以:

这意味着:

,

现在要转换这个大汇总通知

整个lnln(n) sum 可以转化为:

我们唯一的问题是在nk 之间找到一些联系,这可以很容易地从最新的T(...) 术语中推导出来。


为此,我们必须为最近的术语找到一个合理的约束条件。这可以通过尝试几个整数来完成,例如0, 1, 2。使用2 你有:


将 k 代入我们之前的等式,你会看到最大的项是:

因此复杂度为:

P.S.你可以看到类似重复出现的解决方案here

【讨论】:

  • 太棒了!!!!多么好的解决方案(Y)
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 2019-04-15
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多