求基于位边界桶的单调递增出队优先队列数据结构名称
寻找特定优先队列数据结构的名称
我自行构思了一种优先队列的实现思路,但推测该结构已被提出,想确认它的正式名称并检索相关信息。
核心设计与适用场景
这种优先队列基于位边界桶设计:根据当前已出队的最大优先级与待入队项优先级之间最高不同位的位置,将项分配至对应桶中。和堆这类结构相比,它的优势是可以连续成组处理事件,而非逐个处理,以此提升内存局部性。
需要注意的是,该优先队列要求出队优先级必须单调递增,因此仅适用于事件推进时间线这类场景,并非通用型优先队列。
具体实现细节(以32位整数优先级为例)
- 队列包含33个桶,每个桶是存储带优先级项的向量:桶k中的项,其优先级与当前已出队最大优先级的第k-1位不同(桶0表示无差异)。
- 入队操作:将项追加至桶
std::bit_width(largest_dequeued_priority ^ priority_of_item)中。如果项的优先级小于当前已出队最大优先级,会抛出"not monotonic"异常并拒绝入队。 - 出队操作:
- 找到第一个非空桶,若不存在则操作失败;
- 如果第一个非空桶不是桶0,将
largest_dequeued_priority更新为该桶中项的最小优先级,再把桶内所有项重新入队,分配到更低层级的桶中; - 从桶0弹出一个项并返回结果。

内容的提问来源于stack exchange,提问作者Craig Gidney
相关产品推荐
相关产品推荐

