[英]Increase priority in priority queue
我想降低优先级队列中元素的优先级? 如何在对数时间内实现?
我知道优先级队列是作为最大堆实现的。 但是,如果我修改队列中的任何元素,然后对其调用make_heap,则元素数量将花费线性时间。
参考: http : //www.cplusplus.com/reference/queue/priority_queue/
执行对数复杂度更新的唯一方法是自己实现优先级队列,因此您可以使用众所周知的算法 。
std::priority_queue
未指定std::priority_queue
的实现(例如,它很可能是d-ary heap ),因此您不能在不重建队列的情况下方便地更新优先级。 出于同样的原因,您不能使用std::make_heap
和相关函数。
您不能使用std::priority_queue
做到这一点。 但是,可以访问堆的内部结构。 如果您有一个指向该元素的指针,则可以降低元素的优先级,然后对该元素使用siftDown
过程只是为了修复堆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.