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