[英]C++ priority_queue
我正在尋找如何在O(n)
時間內構建一個堆,我使用Heapify
找到了它。 但我想知道STL priority_queue
是否也一樣? 所以我的問題是:
STL 中可用的priority_queue
使用哪種構建堆的方法? 是使用可以將整個數組轉換為O(n)
中的堆的 heapify,還是在堆中使用O(n log n)
時間的元素一一插入?
我猜它是第二種方法,因為我們在使用 STL priority_queue
時手動插入元素。 我對么?
有std::make_heap(...) ,它一次接受整個 N 范圍來構建堆。
正如標准中所說,它具有O(N)
復雜性。 例如你可以看到 CLang 是如何實現 std::make_heap 的, 源碼在這里。
稍后您可以使用std::push_heap和std::pop_heap在O(log N)
時間內根據需要添加和取出 1 x 1 的元素。
同樣正如@Jarod42 所建議的,您可以只使用std::priority_queue ,因為它的構造函數之一接受具有 N 個元素的范圍(迭代器),這個構造函數也具有O(N)
復雜性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.