在圖類中,我需要處理具有整數值(主要是1-1000)的節點。在每一步我想從圖中刪除一個節點及其所有鄰居。另外我想始終以最小值的節點開始。我想長約如何做到這一點在最快的方式,決定執行以下操作:快速存儲桶實現
- 該圖使用adjancency列表存儲
- 有一個巨大的陣列
std::vector<Node*> bucket[1000]
其價值 存儲節點
- 最低的非空桶的索引總是存儲和保持跟蹤關閉
- 我可以採摘指數的隨機元素找到最小值的節點非常快,或者如果桶已經是空的增長指數
- 刪除選定的節點這個桶可以在O(1)中清楚地完成,問題是爲了移除鄰居,我需要首先搜索所有鄰居節點的桶桶[鄰居的值],這不是很快。
有沒有更有效的方法呢?
我想過使用類似std::list<Node*> bucket[1000]
的東西,併爲每個節點分配一個指向其「列表元素」的指針,以便我可以從O(1)中的列表中刪除該節點。這可能與stl清單,顯然它可以用一個正常的雙鏈表完成,我可以手工執行?
在普通的C數組中使用STL容器感覺很奇怪。是的,這個評論是無關緊要的。 – 2012-03-08 13:24:10
從矢量和列表中移除元素的相對速度是'k * O(n)'和'K * O(1)'。 'n','k'和'K'的值也很重要。如果'n'平均爲「小」,則矢量可以非常快。 – 2012-03-08 13:26:27
輸出是什麼?一個近似最小權重控制集? – 2012-03-08 13:39:49