我有一个binomial_heaps的列表,并且我必须更新某些binomial_heaps中某个元素的优先级。为此,我使用boost binomial_heap的更新功能。然而,我必须彻底移除和重建一个binomial_heaps(因为所有优先级都会改变)。而不是每次都使用推送(如果我理解正确的话会有n * log(n)的复杂性),我想根据底层容器的迭代器构造它(一种heapify或make_heap操作,它会是线性时间)。这在标准priority_queue中似乎是可能的,但不在升压实施中。另一方面,标准的不提供更新功能。有没有办法解决这个问题,我可以同时支持这两种方法,或者支持两者的另一个库。或者,也许我的推理,推动一个空优先级队列上的所有元素较慢,是不正确的?构建基于迭代器的提升优先级队列
有些人可能会说,我需要重建一个完整的优先级队列,这将使优先级队列的使用变得完全多余,这是一个严重问题。我想实现的算法是“在Aaron Clauset的超大型网络中查找社区结构”,其中作者正是这样做的(除非我没有正确解释它)
(对不起,不能发布链接到因为我没有足够的声望来发布超过2个链接)
你看过Boost Intrusive的trevers吗? http://www.boost.org/doc/libs/1_55_0/doc/html/intrusive/treap_set_multiset.html - 我不知道排序语义是否是你之后(因为排序是_basically_ on(key, prio)综合,如果我理解正确) – sehe
这是一个有趣的结构。我不知道它,它似乎支持从迭代器构造,不幸的是在n * log(n)时间,因为我认为结构更复杂。 – ddvlamin