【问题标题】:Increase priority in priority queue增加优先级队列中的优先级
【发布时间】:2014-10-23 09:46:21
【问题描述】:

我想降低优先级队列中元素的优先级?如何在对数时间内实现?

我知道优先级队列是作为最大堆实现的。但是,如果我修改队列中的任何元素,然后对其调用 make_heap,则元素数量将花费线性时间。

参考:http://www.cplusplus.com/reference/queue/priority_queue/

【问题讨论】:

  • 嗯,你刚刚回答了你自己的问题,不是吗?除非我遗漏了什么,否则您只是证明了这是不可能的。

标签: c++ c++11 priority-queue


【解决方案1】:

以对数复杂度执行更新的唯一方法是自己实现优先级队列,因此您可以使用well-known algorithms

std::priority_queue 的实现没有被标准指定(例如它很可能是d-ary heap),所以你不能在不重建队列的情况下便携地更新优先级。出于同样的原因,您不能使用std::make_heap 和相关功能。

【讨论】:

    【解决方案2】:

    您无法使用std::priority_queue 来执行此操作。但是,如果您可以访问堆的内部结构,这是可能的。如果你有一个指向元素的指针,你可以降低一个元素的优先级,然后对这个元素使用siftDown过程来修复堆。

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 2011-12-20
      • 2013-02-13
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多