2012-04-02 56 views
1

這是我的情況。我有一張圖表,在不同的時間添加不同的數據集。例如,set1可能有幾千個節點,然後set2進來,我們應用業務邏輯來創建從set1到set2的邊(並且將set1中沒有邊的任何頂點排除在set2之外)。然後在稍後的時間,我們得到set3,set4等等,並且在每個集合和它之前的集合之間應用相同的過程。什麼是組織有向圖數據的好方法?

問題,組織這個的最好方法是什麼?我之前做的是命名節點set1-xx,set2-xx等。我遇到的問題是當我試圖在當前集和前一集之間運行分析時,我將不得不在整個圖中運行循環並查找以「setx」開頭的所有節點。隨着圖形增長需要很長時間,所以我想到了另一種解決方案,即創建一個名爲「set1」的節點,並將它連接到該特定集合的所有節點。我正在測試它,但我想知道是否有更有效的方式或構建方式處理這樣的數據結構?有沒有辦法以某種方式細分這樣的數據?

我認爲一個通用的解決方案將是應用程序,但如果它有幫助我使用neo4j(所以任何具體的解決方案,該數據庫也會很好)。

回答

3

您有一個非常特殊的有向圖類型,稱爲分層圖

數據結構的選擇主要取決於預期的圖形密度(前一個集合/圖層中多少個節點通常連接到當前集合/層中的節點)以及您需要執行的操作大部分時間。將每個圖層直接用數字索引表示(也就是說,最外層的結構將是一個集合/圖層的數組),並且大概您也可以使用每層的一個頂點數組,這絕對是一個好主意。然而,每個頂點邊緣(下,或僅在和流出集取決於你是否曾經遍歷層向後邊緣)的列表可以是任何以下的:

  • 鏈接頂點標識符的列表;如果圖非常稀疏並且邊通常被添加/刪除,這很好。
  • 排序的頂點標識符數組;如果圖很稀疏且不可變,這是很好的。
  • 由頂點標識符索引的布爾值數組,確定給定頂點是否通過當前頂點的邊連接;如果圖形密集,這很好。

「頂點標識符」可以採用多種形式。例如,它可以是下一層頂點數組的索引。

1

你的第二個解決方案是我會做的 - 創建一個setX節點並將屬於該set的所有節點連接到setX。這樣你的數據就被分區了,而且查詢起來也更容易。

相關問題