You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何基于有序数组实现的Priority Queue的remove min操作是常数时间?

有序数组实现优先队列的时间复杂度疑问解答

你说的完全在理,这里的核心是有序数组的排序方向:

  • 如果采用降序排列的数组(最大值在数组开头,最小值在末尾):
    • Find min:直接取数组最后一个元素,时间复杂度是O(1);
    • Remove min:只需要删除数组最后一个元素,根本不用移动其他元素,所以是O(1)的常数时间;
    • Insert:得遍历数组找到合适的插入位置(第一个比新元素小的位置),然后移动后面的元素腾出空间,时间复杂度是Θ(n)。

这正好和你给出的时间复杂度图表对应上。

而你一开始想到的“删索引0元素要移后续元素”的情况,对应的是升序排列的数组(最小值在开头):

  • Find min:同样是O(1)(直接取索引0);
  • Remove min:必须把后面所有元素左移一位补上空位,时间复杂度变成Θ(n);
  • Insert:也要找位置移动元素,时间复杂度Θ(n)。

CS61B第16讲里说的“有序数组实现优先队列时remove min是常数时间”,指的就是降序排列的这种实现——通过调整排序方向,把删除操作放到数组尾部,避开了元素移动的开销。

内容的提问来源于stack exchange,提问作者Foo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:05:32