【问题标题】:Running Time of a d-ary heap?d-ary堆的运行时间?
【发布时间】:2012-06-23 02:12:00
【问题描述】:

如何将 d-Ary 堆的运行时间从 O(logd n) 简化为 O( (log n) / (log d))?

正确的简化是: logdn = log d * log n

除法化简是怎么推导出来的?

【问题讨论】:

  • @andand:这不是关于评估算法 - 它是关于简化,这使它成为 IMO 的数学问题。
  • @andand:我知道 d_Ary 堆与编程相关,但 提出的问题 与编程无关。这是关于数学运算的。不过,讨论没有实际意义——我们不必同意。 :-) 看看你发布的答案,这与开发算法解决方案无关——你特别提到了logarithmic bases,这是一个数学术语。查看发布的另一个答案,这也是严格的数学术语。糟糕 - 两个答案都是 math 答案。 ;-) 哦,两个标签之一是math
  • @Ken White:我不同意你的说法,即答案本质上是数学的......他们是。但是提出的问题的上下文肯定会是版主会考虑的内容......该上下文是发布者提出的第一个问题“如何将 d-Ary 堆的运行时间从 O(logd n) 简化为 O( (log n) / (log d))?”
  • @andand:好的。我想我们同意不同意。 :-) IMO,这里的 mods 比这更好 - 他们通常考虑问题的全部内容,而不仅仅是推断的上下文。

标签: math computer-science


【解决方案1】:

这使用公共恒等式在对数底之间进行转换:

log<sub>x</sub>(z) = log<sub>m</sub>(z) / log<sub>m</sub>(x)

两边都乘以logm(x),得到:

log<sub>m</sub>(z) = log<sub>x</sub>(z) * log<sub>m</sub>(x)

这相当于您网站问题中的答案。

更多信息请见here

【讨论】:

    【解决方案2】:

    假设

    x = logd(n)
    等价我们有
    n = dx
    那么
    log2n = log2(dx) = x log2(d)
    除以log 2(d) 产生:
    log2(n) / log2(d) = x 
    所以 log2(n) / log2(d) = x = logd(n)

    当然,假设d 是固定的,那么log2(d) 只是一个常数。所以

    O( logd(n) ) = O( 1 / log2(d) * log2(n) ) = O( log2(n) )
    也就是说,就 Big-Oh 表示法而言,您可以将任何对数底(大于 1)更改为任何其他(例如)对数底。所以习惯上只是去掉基数并写 O( log(n) )

    【讨论】:

    • 谢谢。然而,对此的答案-> math.stackexchange.com/questions/143331/masters-theorem 表明关系将是产品。这些答案是不是相互矛盾?
    • 没有。仔细看看对这个问题的回答是什么。两者是同一身份的不同表示。
    • 乘以 log_b(e) 与除以 log_e(b) 相同。作为相同基本身份的另一个结果。
    猜你喜欢
    • 2015-05-21
    • 2012-11-25
    • 2015-07-16
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多