如果我知道优先级的范围,是否可以实现具有O(1)(摊销)运行时间insert
和delete_min
(具有最低优先级的删除元素)的优先级队列?< / p>
我想到了Fibonacci堆的一些修改,但由于delete_min
的O(logn)摊销运行时间,它似乎不起作用。
类似于bucket-sort的方法可以完成这项工作吗?
答案 0 :(得分:0)
您可以创建一个哈希表,将每个优先级映射到它的当前频率。
当您insert
为优先级时,您可以平均在固定时间内执行此操作:您可以找到输入和增加优先级的频率。
当您delete_min
时,您必须遍历哈希表以找到非零频率的最小优先级,然后递减此频率。但由于您具有恒定数量的不同优先级值,因此也会在恒定时间内运行。如果优先级的数量很大,它具有理论价值。