簡體   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