为什么最小堆比最大堆更适合实现优先级队列?

Why would a min-heap be preferable to a max-heap to implement a priority queue?

在我用来研究算法和数据结构的一本书中,它指出最小堆比最大堆更适合实现优先级队列。为什么会这样?

为什么使用堆来实现优先队列是个好主意?

更多算法需要最小堆,例如 Dijkstra 算法。但实际上如果你只是否定所有元素,最小堆和最大堆是等价的。

堆是实现优先级队列的一种简单而有效的方法,因为(根据堆的性质)它会在您 add/remove 时保持自己 "sorted" ,因此可以快速插入并移除最小元素(如果是最小堆)。这些正是优先队列需要的操作,所以堆是一个很好的选择。

你用哪个就用哪个。有时 1 是 "highest priority," 后跟 2、3、4 等。在这种情况下,您可以为优先级队列使用最小堆。其他时候,"highest priority" 被定义为首先处理编号较高的事物。在这种情况下,您将使用最大堆。

最小堆确保最低值的东西位于堆的根部,并且当您从堆中拉出时将首先被删除。最大堆确保最高值的东西在堆的根部。

当然,您可以始终实施最小堆,如果您需要最高值的东西作为根,只需反转比较函数即可。