在我用来研究算法和数据结构的书中,声明最小堆优于最大堆来实现优先级队列。为什么会这样?
为什么使用堆来实现优先级队列是个好主意?
答案 0 :(得分:3)
更多算法需要最小堆,例如Dijkstra。但实际上,如果你只是否定所有元素,那么min-heap和max-heap是等价的。
堆是一种实现优先级队列的简单而有效的方法,因为(根据堆的性质)它保持自身"排序"当你添加/删除它时,因此可以快速插入和删除最小元素(如果是最小堆)。这些正是优先级队列所需的操作,因此堆非常适合。
答案 1 :(得分:0)
您可以使用任何必要的。有时1是“最高优先级”,后跟2,3,4等。在这种情况下,您将使用最小堆作为优先级队列。其他时候,定义“最高优先级”,以便首先处理编号较高的事物。在这种情况下,您将使用max-heap。
min-heap确保最低值的东西位于堆的根处,并且当你从堆中拉出时将首先删除它。 max-heap确保最高值的东西位于堆的根目录。
当然,您可以始终实现最小堆,如果您需要最高价值的东西作为根,只需反转您的比较函数。