【问题标题】:Analysis of decision tree in sorting algorithms排序算法中的决策树分析
【发布时间】:2015-10-24 12:36:09
【问题描述】:

在具有 n 个元素的排序算法中高度为 h 的决策树中:

我们有这样的东西:

n! <= 2^h

因此 h>=log(n!)

我知道 n^n 大于 n!,但这里我们谈论的是最坏情况下的下限,log(n!) 的图低于 (log n^n) 的图。所以简单的答案应该是 Ω(log n!),因为它不能低于这个值。

那么我们怎么能在这里说 h= Ω(nlogn)..?

【问题讨论】:

  • 不确定形式,但是:log(n!) = log(n * (n-1) * (n-2) ...) = log(n) + log(n -1) + log(n-2) ...[n summands] ~ n log(n)

标签: algorithm sorting decision-tree


【解决方案1】:

你说得对!和 nn 具有不同的增长率,但它们的日志(log n! 和 log nn)实际上具有相同的增长率。 @Salvador Dali 指出,斯特林的近似值是一种很好的看待这一点的方法,但这是看待这一点的另一种方式。

首先,请注意 log nn = n log n 通过对数的属性。这是最简单的。

那(log n!)呢?首先,请注意

记录 n!

= log (n · (n-1) · (n-2) · .. · 2 · 1)

= log n + log (n-1) + log (n-2) + ... + log 2 + log 1

这再次使用对数的属性。由此,我们可以看到 log n! = O(n log n),因为

log n + log (n-1) + log (n-2) + ... + log 2 + log 1

≤ log n + log n + log n + ... + log n + log n(n次)

= n log n

我还要声明那个 log n! = Ω(n log n)。这是看待这一点的一种方式。看上面求和的前n/2项,就是

log n + log (n-1) + log(n-2) + ... + log(n/2)

注意这个数量不小于

log (n/2) + log (n/2) + log(n/2) + ... + log(n/2) (n/2 次)

= (n/2) 对数 (n/2)

最后一个量是 Ω(n log n),所以总的来说我们看到 log n! = O(n log n) 和那个 log n! = Ω(n log n),所以 n! = Θ(n log n)。换句话说,记录 n!以与 log nn 相同的速率渐近增长,即使原始函数 n!和 nn 有不同的增长率。​​p>

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    基本上这里是您的 log(n!) 的近似值:

    您可以从Stirling's approximation 证明它,它是n! 的近似值:

    他们还给你一个稍微不那么严格的近似值:

    如果您对如何证明它感兴趣,只需仔细使用斯特林公式的对数即可。

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2011-10-02
      • 2019-10-30
      • 2017-03-06
      • 2011-04-27
      • 2011-05-06
      • 2018-12-20
      • 2023-03-13
      • 2020-08-25
      相关资源
      最近更新 更多