gpt4 book ai didi

java - 优先队列 poll() 时间复杂度

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:44 27 4
gpt4 key购买 nike

给定以下代码:

pq.offer(x);
pq.poll();

第一行代码,将元素x插入优先队列pq,offer的时间复杂度为log(k),其中k为pq的大小。

那么我的问题是,对于紧跟在第一行之后的第二行代码,poll() 的时间复杂度是多少?

在第一行offer之后,pq已经排序了,所以poll会简单的获取并移除队列的头部,那么我认为应该是O(1 ), 正确吗?

谢谢

最佳答案

根据PriorityQueue#poll的源码, 好像操作是O(log n) :

@SuppressWarnings("unchecked")
public E poll() {
if (size == 0)
return null;
int s = --size;
modCount++;
E result = (E) queue[0];
E x = (E) queue[s];
queue[s] = null;
if (s != 0)
siftDown(0, x);
return result;
}

这是因为 siftDownO(log n) ,由于 PriorityQueue 中的数据存储为堆。

关于java - 优先队列 poll() 时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com