簡體   English   中英

Dijkstra算法在由排序列表/數組實現的優先級隊列上的運行時間

[英]Running time for Dijkstra's algorithm on a priority queue implemented by sorted list/array

因此,我很想知道算法的運行時間在由排序列表/數組實現的優先級隊列上。 我知道對於未排序的列表/數組,它是O((n ^ 2 + m)),其中n是頂點數,m是邊數。 因此,這等於O(n ^ 2)時間。 但是如果我使用排序列表/數組會更快嗎?運行時間是多少? 我知道extractmin將是恆定的時間。

好吧,讓我們回顧一下dijkstra算法的需求(供以后參考,通常將頂點和邊用作V和E,例如O(VlogE)):
合並所有排序的鄰接表:O(E)
最低提取量:O(1)
降低鍵:O(V)
Dijkstra使用O(V)提取最小運算,而O(E)減少關鍵運算,因此:
O(1)* O(V)= O(V)
O(E)* O(V)= O(EV)= O(V ^ 2)
采取最漸近的重要部分:
最終漸近運行時間為O(V ^ 2)。
可以做得更好嗎? 是。 研究二進制堆,以及優先級隊列的更好實現。

編輯 :我實際上犯了一個錯誤,現在我再看一次。 E不能高於V ^ 2,換句話說,E = O(V ^ 2)。
因此,在最壞的情況下,我們得出的以O(EV)運行的算法實際上是O(V ^ 2 * V)== O(V ^ 3)

我使用SortedList http://blog.devarchive.net/2013/03/fast-dijkstras-algorithm-inside-ms-sql.html它比每次對List排序一次要快20到50倍

暫無
暫無

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

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