除了优先队列的明显答案之外,什么时候堆对我的编程冒险有用?
最佳答案
每当您需要快速访问最大(或最小)项目时都可以使用它,因为该项目将始终是数组中的第一个元素或在树的根部。
但是,数组的其余部分保持部分未排序。因此,仅即时访问最大(最小)的物品。插入速度很快,因此这是处理传入事件或数据并始终可以访问最早/最大的一种好方法。
对于优先级队列,调度程序(需要最早的项目)等有用。
堆是一棵树,其中父节点的值大于其任何后代节点的值。
如果您将堆看作是按深度按线性顺序存储的二叉树,则首先是根节点(然后是该节点的子节点,然后是那些节点的子节点);那么索引为N的节点的子节点位于2N + 1和2N + 2。此属性允许按索引快速访问。而且由于通过交换节点来操纵堆,因此可以进行就地排序。