【发布时间】:2013-11-30 02:48:24
【问题描述】:
尽管我拥有计算机科学学士学位(这在大学里有介绍),但我一直无法理解二进制堆和优先级队列之间的关系。它只是......没有点击。我完全理解二进制堆是什么,并且我知道如何在数组中实现一个。我也知道什么是优先队列。但是他们两个是如何结合在一起的呢?
一个快速的谷歌查询显示很多文章,如this one。哪种解释它,但我还有更多问题:
- 优先级队列需要确保如果两个具有相同优先级的项目被添加,那么它们将按照添加顺序被移除。二叉堆如何确保这一点? (事实上,如果我没记错的话,所有项目都具有相同优先级的边界情况会产生一个违反此规则的堆)。
- 当您从堆中删除根,然后放入最后一个元素代替根,然后需要将其与其中一个子交换 - 但两个子具有相同的值时,会发生什么情况。你如何选择与哪一个交换? (记住相同优先级项目的先进先出规则)
我在这里错过了什么?
【问题讨论】:
标签: algorithm data-structures heap priority-queue binary-heap