簡體   English   中英

c ++ std :: priority_queue是dijkstra隊列的正確結構嗎

[英]Is a c++ std::priority_queue the right structure for the dijkstra queue

我認為c ++優先級隊列不是dijkstra隊列的正確結構,因為它不包含用於輕松查找或刪除元素的功能。

正確的結構將是斐波那契堆,但std庫中沒有。

有沒有人提出更好的C ++實現結構的建議?

您可以使用std::set並在其中存儲pair <distance,vertex>。 要查找和刪除元素,可以保持到數組或std::vector每個頂點的距離,以快速獲取給定頂點的pair <distance,vertex>。 最接近的未訪問頂點始終位於set的第一個元素中(可以使用set.begin()獲得)。

對於大多數實際目的,基於std::priority_queue的實現足以用於稀疏圖。 以這種方式實現Dijkstra的運行時為O(E log V) 如果您有足夠密集的圖,則可以簡單地使用Dijkstra算法的基本O(V*V)版本。 隨着圖變得更密集,Fib-heap版本的漸近性逐漸接近於香草實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM