鄰接表和鄰接矩陣是內存中表示圖形的兩種常用方式,在決定這兩者時需要做出的第一個決定是你想要優化的內容,如果需要,鄰接列表非常快,例如,獲取另一方面,如果您正在做邊緣存在的大量測試或者有一個馬爾可夫鏈的圖形表示,那麼您可能會偏好一個鄰接矩陣。
下一個問題你需要d要考慮的是你需要融入記憶的程度。在大多數情況下,如果圖中的邊數遠小於可能邊的總數,則鄰接列表將更加高效,因爲您只需存儲實際存在的邊。一個令人滿意的媒介是用壓縮的稀疏行格式表示鄰接矩陣,其中您保持從左上角到右下角的非零條目的向量,指示哪些列可以找到非零條目的對應向量,以及第三個向量表示列條目向量中每一行的開始。
[[0.0, 0.0, 0.3, 0.1]
[0.1, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0]
[0.5, 0.2, 0.0, 0.3]]
可以被表示爲:
vals: [0.3, 0.1, 0.1, 0.5, 0.2, 0.3]
cols: [2, 3, 0, 0, 1, 4]
rows: [0, 2, null, 4]
壓縮稀疏行是一個有效的鄰接表(列索引功能相同的方式),但格式使其本身更多的乾淨到矩陣運算。
來源
2008-09-28 03:07:21
jbl
我試過使用Java序列化來連載圖形。但是我得到堆棧溢出異常。顯然這是一個常見的抱怨,推薦的解決方案是編寫低級代碼來覆蓋「readObject()/ writeObject()」。有沒有更好的辦法? – 2010-04-07 06:35:25