【发布时间】:2014-04-10 08:08:25
【问题描述】:
我有一个 binomial_heaps 列表,算法的每次迭代我都必须更新一些 binomial_heaps 中元素的优先级。为此,我使用了 boost binomial_heap 的更新功能。但是,我必须完全删除和重建其中一个二项式堆(随着所有优先级的变化)。而不是每次都使用推送(如果我理解正确的话,它的复杂度会是 n*log(n)),我想基于底层容器的迭代器来构建它(一种 heapify 或 make_heap 操作,它是线性时间)。这在标准 priority_queue 中似乎是可能的,但在 boost 实现中却不是。另一方面,标准版没有为我提供更新功能。有没有办法解决这个问题,我可以同时拥有两者,或者另一个支持两者的库。或者也许我的推理是,将所有元素推送到空优先级队列上会更慢,这不正确?
有些人可能会说我需要重建整个优先级队列这一事实存在严重错误,这将使优先级队列的使用完全多余。我要实现的算法是“Finding community structure in very large networks by Aaron Clauset”,作者正是这样做的(除非我没有正确解释)
(抱歉无法发布该论文的链接,因为我没有足够的声誉发布超过 2 个链接)
【问题讨论】:
-
您是否查看过来自 Boost Intrusive 的陷阱? boost.org/doc/libs/1_55_0/doc/html/intrusive/… - 我不知道排序语义是否是你所追求的(因为排序基本上在 (key, prio) 复合上,如果我理解正确的话)
-
这是一个有趣的结构。我不知道它似乎支持从迭代器构造,不幸的是在 n*log(n) 时间内,因为我猜结构更复杂。
标签: c++ boost priority-queue