我已經讀了有向圖。我設法得到了一個在我的應用程序中工作的抽象圖形數據類型,但我並沒有覺得它非常直觀,並且正在考慮用一個普通的多維數組替換它。向圖對戰關聯數組
我的圖是稀疏和非循環。每個頂點都可以從一個特定的「主」頂點到達。如果它是一棵樹,這個主頂點將是'根'。它是一個社交網絡,這個主頂點將是'我'。
雖然我的圖可以具有頂點成千上萬它具有有限的深度:任意兩個節點之間的最大距離爲3層的邊緣。
底層數據表示是鄰接表。一個小例子是這樣的:
Head | Tails
--------------
1 | 2, 3, 4
2 | 5
3 | 5
4 | 5
5 | 6
如果我用一個普通的多維數組,而不是我的圖形數據類型,它會是這個樣子:現在
$me[1][2][5][6]
$me[1][3][5][6]
$me[1][4][5][6]
,主我希望能夠用這個圖表做的事情是:
- 導航它作爲一個層次結構。我意識到某些子頂點將具有多個類別(例如#5),但這正是我想要的特定用例。對於這一點我看不出數組和圖之間有什麼真正的區別。
- 萊它作爲一個列表(按字母順序排列,根據頂點名),沒有重複。我可能會做一個DFS,在我去的時候標記訪問過的頂點,以避免多次探索它們。但據我所見,這可以使用圖形或陣列來實現,並且成本相同。
- 對任何給定的一對點進行「所有路徑」分析。因爲我想要'所有路徑'(也就是說,我不是簡單地檢查可達性),在我看來,我必須遍歷整個圖形,並且再次看到圖形上沒有數組優勢。
我的感覺是我失去了一些東西,但我不能把它放在手指上。你可以嗎???任何想法,建議,見解或建議都會受到感謝......(順便說一句,我使用的是PHP,數據源是關係數據庫,但我認爲這不會有什麼真正的區別)。
謝謝!
什麼是這個多維數組的尺寸是多少?通常圖形的替代方案是矩陣(2維)或鄰接表(它基本上是一個稀疏矩陣的實現......) – amit