我在找一个数据结构的名字。我想出了这个主意,但怀疑它应该已经知道了,而且不知道该搜索什么来找到它。
此优先级队列的基础是根据最大位的位置将项放入桶中,该位位与迄今为止最大的脱队列优先级和项的优先级不同。它的优势,例如堆,是它倾向于在大的连续组中移动事件,而不是一个接一个地移动事件,从而提供更多的内存局部性。注意,这个优先级队列要求去排队的优先级必须单调增加。例如,它可以用于可能发生的事件的时间轴,但不能在所有情况下使用。
假设优先级是32位整数。然后,优先级队列有33个桶,每个桶只是一个优先项的向量,在这个向量中,桶k中的优先级与位位置k-1处最大的去队列优先级不同( "-1“表示没有差别)。
若要对项进行排队,请将其附加到桶std::bit_width(largest_dequeued_priority ^ priority_of_item)中。如果项的优先级小于largest_dequeued_priority,则抛出“非单调”异常,而不是排队。
若要排齐某项,请查找第一个非空桶。如果没有,那就失败。如果第一个空桶不是桶0,则将largest_dequeued_priority提升到该桶中的最小项优先级,并重新排队存储桶中的每个项,以便将项目重新分发到较低的桶中。现在从桶0中弹出一个项目并作为结果返回它。

发布于 2022-08-15 17:11:21
这种数据结构称为。
https://stackoverflow.com/questions/73362856
复制相似问题