簡體   English   中英

dijkstra最短路徑算法的時間復雜度是否取決於所使用的數據結構?

[英]Does time complexity of dijkstra's algorithm for shortest path depends on data structure used?

存儲圖的一種方法是將節點實現為結構,例如

struct node {
int vertex; node* next; 
};

頂點存儲頂點號,下一個包含到另一個節點的鏈接。

我可以想到的另一種方法是將其實現為矢量,例如

vector<vector< pair<int,int> > G;

現在,在將Dijkstra的算法應用於最短路徑時,我們需要建立優先級隊列和其他所需的數據結構,例如情況2(向量實現)。 上面兩種不同的應用圖方法的復雜度是否會有所不同? 哪一個更好?

編輯:在第一種情況下,每個節點都與可從給定節點直接訪問的節點的鏈表關聯。 在第二種情況下,G.size()是圖形G [i]的頂點數。size()是可直接從索引為i G [i] [j]的頂點到達的頂點數。從頂點i G [i] [j] .j可達的第j個頂點是從頂點i到頂點G [i] [j]的邊的長度。

兩者都是鄰接表表示 如果正確實施,那將導致相同的時間復雜度。 如果使用鄰接矩陣表示法,您將獲得不同的時間復雜度。

更詳細地講-這歸結為數組( vector )和鏈表之間的區別 當您要做的是遍歷整個集合(即頂點的鄰居)時,就像您在Dijkstra算法中所做的那樣,無論您使用的是數組還是鏈接的,這都需要線性時間( O(n) )。名單。

Wikipedia所述 ,運行Dijkstra算法的結果復雜度為:
在任何一種情況下, O(|E| log |V|)帶有二進制堆。

暫無
暫無

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

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