我有一個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