【问题标题】:Bottom-up HeapSort vs Top-down HeapSort (Performance wise)自下而上的堆排序与自上而下的堆排序(性能方面)
【发布时间】:2018-11-06 13:44:05
【问题描述】:

自下而上的 HeapSort 和自上而下的 HeapSort 之间的性能差异是什么?

【问题讨论】:

  • 欢迎来到 Stack Overflow。这不是家庭作业完成服务。你的老师给了你作业,而不是我们,你需要自己做作业。如果我们为你做,你什么也学不到。如果您无法开始,请向您的老师寻求帮助;他们得到报酬来教你。祝你好运。
  • 认真的吗?我只是问哪一个性能更好。
  • 你有done your research吗?

标签: performance sorting heapsort


【解决方案1】:

堆是二叉树;因此,我们知道它具有 log n 深度,并且每个级别有 2^i 个节点。 0级(根)有1个节点,1级有2个节点,2级有4个节点,以此类推

现在想想你提到的两种方法:

对于自下而上,我们将节点插入到底部并让它们每次“冒泡”堆。相反,对于自上而下,我们让节点“下降”到它们应有的位置。哪个效率更高?

让我们考虑一下最坏的情况:

自下而上,每个节点都可以上升到最顶层。在级别 1,这需要一次交换(在两个节点上);在第 2 级,这需要两个(在四个节点上)......一旦我们到达最后一个级别,我们必须进行 log n 交换(在相当大的 n/2 个节点上)!这给了我们 O(n log n) 的效率。

自顶向下:在每一层,任何节点都可以落到树的底部(log n swaps)。它与自下而上的区别在于,随着最大下落距离的增加,受它影响的潜在节点的数量会减少。级别 0 是唯一可以落在 log n 的节点,也就是一个节点(而不是自下而上的 n/2)。因此,所有“下降”的总和为 O(n),是更有效的算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2012-12-15
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多