2011-04-12 56 views
2

我有一個大圖(30k頂點,250m邊),並使用boost圖庫庫鄰接列表(我試過vecs和列表)消耗超過25GB。由於使用16gb以上的內存不太容易,建議如何減少內存使用量?boost圖庫內存消耗大圖

+0

這幾乎是一個完整的圖!一個節點的大小是多少?節點中實際上是什麼?你不會讓我們走很多路。 – 2011-04-12 23:25:09

+0

我不認爲將整個圖加載到所描述的圖大小的內存中是不現實的。你甚至可以考慮像MapReduce這樣的方法嗎?處理大圖? – Wei 2011-04-16 14:01:47

+0

圖只有頂點上的索引屬性和邊上的權重屬性。 – mete 2011-04-18 12:56:14

回答

3

我對使用我正在使用的圖的驗證技術有同樣的問題。 如果你將使用大量的數據(頂點和邊),你應該使用自己創建的精細調整的數據結構。

如果你有很多的邊緣,你應該考慮使用一個鄰接矩陣。 邊緣有重量,這樣你就可以使用這樣的事情:

vector<int> vertices; 
vector<vector<int> > edges; 

您可以使用優化vector<vector<bool> >僅使用一個比特來表示每個邊緣,如果邊緣沒有一個屬性。

雖然當您想要檢查邊或添加邊時,鄰接矩陣很快,但在邊上迭代並不好。

我可以這麼說,在BGL中使用相同的屬性,在我自己的圖中,我的圖形變小了。