繁体   English   中英

增加优先级队列中的优先级

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM