【问题标题】:Merge two minimum-heaps to one heap in efficiency?将两个最小堆合并为一个堆以提高效率?
【发布时间】:2014-05-21 12:11:34
【问题描述】:

分别考虑大小为 n1 和 n2 的两个最小堆 H1、H2,使得 H2 中的每个节点都大于 H1 中的每个节点。

如何将这两个堆合并为一个堆 "H" ,在 O(n2) 中(不是 O(n^2)..)?
(假设堆表示的数组大小 > n1+n2)

【问题讨论】:

  • 提示:如果你有两个排序列表 L1 和 L2,L2 的每个元素都大于 L1 的每个元素,你怎么能在 O(n) (= O(n2)) 时间?堆有点像最后变宽的排序列表。在两个堆上对应的操作可能是什么样的?
  • @otus 为什么要删除答案?它似乎符合约束条件。

标签: algorithm data-structures heap


【解决方案1】:

可以在线性时间see here 内构建一个堆。这意味着您只需要获取所有元素并从所有元素中构建一个堆即可获得线性复杂度。但是,您可以使用“更花哨”的堆,例如 leftist heap 并更快地执行合并操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 2013-02-03
    • 2010-12-08
    • 2016-03-18
    • 2011-12-22
    • 1970-01-01
    • 2015-01-26
    • 2023-02-01
    相关资源
    最近更新 更多