Algorithm 二进制堆和优先级队列

Algorithm 二进制堆和优先级队列,algorithm,tree,heap,priority-queue,binary-heap,Algorithm,Tree,Heap,Priority Queue,Binary Heap,我不熟悉堆,二进制堆,我试图理解为什么我们需要使用二进制堆实现优先级队列。我还了解到二进制堆的底层数据结构也是一个数组 所以我的问题是,为什么我们不能使用一个数组,按降序(对于最大堆)或升序(对于最小堆)排序来表示优先级队列?这里我可能错了,但我认为,如果以这种方式实现,findMax、findMin、insert和delete等操作的时间复杂度将几乎保持不变。那么,我们是否可以不使用排序数组来表示优先级队列 我已经读过这个答案:您可以使用数组来表示优先级队列,但这样做会损失很多效率。假设您在数

我不熟悉堆,二进制堆,我试图理解为什么我们需要使用二进制堆实现优先级队列。我还了解到二进制堆的底层数据结构也是一个数组

所以我的问题是,为什么我们不能使用一个数组,按降序(对于最大堆)或升序(对于最小堆)排序来表示优先级队列?这里我可能错了,但我认为,如果以这种方式实现,findMax、findMin、insert和delete等操作的时间复杂度将几乎保持不变。那么,我们是否可以不使用排序数组来表示优先级队列


我已经读过这个答案:

您可以使用数组来表示优先级队列,但这样做会损失很多效率。假设您在数组中插入了某个对象,它的优先级高于队列中的任何对象。它需要转到索引0,索引0处的对象需要转到索引1,依此类推

这是O(n),但如果在由二叉树组成的优先级队列前面插入一个值,则只需更改lg(n)节点,使二叉树在优先级队列建模方面比数组更好

删除元素具有类似的时间复杂性


如果使用数组实现,访问优先级队列后面的时间是恒定的,但是如果使用二叉树实现,访问优先级队列后面的时间是O(n)时间,因此这是数组相对于二叉树的一个显著优势,但是优先级队列通常不需要在大部分时间访问优先级最低的元素,因此二叉树通常比数组更有效地表示优先级队列。

@Alexander这就是greatThank you。我现在不知何故错过了最基本的东西,数组需要O(n)时间来重新排列元素,而树通常需要log(n)。谢谢你的澄清。