我想在C++中實現Prim的MST算法。我有一個設計問題在C++中設計Prim實現的數據結構
我實現了一個min-heap,它需要一個整數,我們可以提取min,減少key和insert-key。
現在,據我所知在Prim的我需要維護每個頂點的權重,鄰居信息。一些想法我有有:
1]定義的結構
struct node {
int vertex;
int weight;
int neighbor;
};
使用最小堆返回以最小的重量的節點。但問題是減少鍵,因爲對於減少鍵,調用者需要通過他想要減少鍵的頂點。由於堆交換元素的次數太多,我必須通過整個列表來查找頂點,然後減少它的鍵。這是O(n),我認爲如果我這樣做,Prim會變得更糟。
2]另一種方法是維護另一個數組,它跟蹤最小堆隊列中頂點的位置。但在最小堆操作期間跟蹤位置會很麻煩。
基本上,如果我必須做reduce-key(v),如何在基於權重的min-heap隊列中找到v。那麼有沒有優雅的方式來做到這一點?哪些仍然可以保留複雜性?