繁体   English   中英

使用自上而下或自下而上的方法构建 maxHeap/minHeap 时,两种方法的数组中的值是否会略有不同?

[英]when building maxHeap/minHeap using top-down or bottom-up approach ,will the values in the array be slightly different for both the approaches?

我使用时间复杂度为 o(nlogn) 的自上而下方法创建了一个最大堆。所有数组值的结果都遵循最大堆规范,如果我使用自下而上的方法使用 o(n) 时间进行最大堆,则结果同样遵循最大堆规范,但是自上而下方法和自下而上方法的数组结果不相同。如果两种方法结果不相同但仍然满足最大堆规则,是否正确?

如果两种方法结果不同但仍满足最大堆规则,是否正确?

是的,它们可能看起来不同,但这根本不是问题。

堆工作是快速为您提供最小/最大元素(在 O(log(n)) 中)。

尽管自下而上和自上而下的结构树可能看起来不同,但根永远是一样的。

当你要求堆给你最大/最小元素时,它总是给你第一个(这就是为什么它也被称为优先队列)然后通过获取堆的最后一个元素并将它放在根的位置,然后通过将其与当前的左右孩子进行比较,按照优先级规则将其向下移动。

关键是要注意,即使树看起来不同,连续 N 次移除的结果总是相同的。

是的,有多种可能的项目排列来创建有效的二进制堆。 考虑这两个最小堆,每个都有三个项目:

  1           1
2   3       3   2

在这两种情况下,最小的项目都在根部。 堆规则不指定孩子的顺序,只是每个孩子必须大于或等于根。 所以两者都是有效的堆。

使用 Floyd 算法(“自下而上”方法)构建二叉堆时,生成的堆在很大程度上取决于输入数组的初始顺序。 当通过重复插入(“自上而下”方法)构建堆时,生成的堆在很大程度上取决于插入顺序。

最终堆的实际顺序还取决于一些实现细节。

是的,这是正常情况。 相同的元素可以组织在不同的堆中,保留堆属性

例如,您可以使用唯一的自上而下方法,但将相同的元素设置为不同的顺序 - 结果可能会有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM