【问题标题】:Space Complexity of Recursive Build-Heap递归构建堆的空间复杂度
【发布时间】:2021-04-03 01:06:03
【问题描述】:

我正在尝试解决 Build-Heap 递归形式的空间复杂性。 这是我到目前为止所做的,我想知道我的错误在哪里(如果有的话):

首先:Build-Heap是由for-loop构成的,它的时间复杂度是Theta(n)。

Build-Heap 调用 Heapify-Down Theta(n) 次-(由于 Build-Heap 时间复杂度),所以: Heapify-Down 每次 i-recursive-call 将 n\i 个元素的数组推送到空间堆栈,这意味着它使用 Theta(logn) 的空间复杂度。

结论:Theta(n)*Theta(logn) = Theta(nlogn)。

我不确定我对 Heapify-Down 被调用次数的解释,我还在互联网上发现 Build-Heap 空间复杂度实际上是 Theta(logn),这意味着我的结论是错误的。 先谢谢了。

【问题讨论】:

    标签: recursion data-structures heap space-complexity


    【解决方案1】:

    当它是堆排序时,你的结论是绝对正确的,因为对 BUILD-MAX-HEAP 的调用需要 时间 O(n) 并且对 MAX-HEAPIFY 的 n - 1 次调用中的每一个都需要时间 O(log n)。因此总运行时间将为 O(nlogn)。

    详细解释可以参考 Cormen、Leiserson 和 Rivest 的算法介绍

    【讨论】:

    • 非常感谢您的努力,我的意思是 Build-Heap 或 Build-Max-Heap,但通过空间复杂性而不是时​​间复杂性。你对 Build-Heap 的空间复杂度有什么想说的吗? (另外,我不是要堆排序)。不过,还是感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 2015-05-13
    • 2017-09-04
    • 2021-03-10
    • 2019-04-21
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多