2012-04-28 121 views
0

我需要關於我正在開發的項目的幫助:如何在嵌套集合模型中計算左側和右側,假定所有輸入都沒有特定順序。構建一個嵌套集合

4種形式分佈,每種形式帶4人,每4人帶4個人。網絡直到第七代都在發展下來。假如我決定在任何級別選擇一個節點,我怎麼能找到下線和上線?

 A 
| | | | 
B C D E 
      | 
     ------------ 
     | | | | 
     F G H J 
     | 
    ---------- 
    | | | | 
    W X Y Z 

說明:

A brings A B C D 
E then brings F G H J 
F brings WXYZ 

等等等等。在第七代我們經歷了停頓。同時,每個節點都開始沿襲下來的詞語。

回答

2

計算左右訪問數是一個迭代的程序操作。它不能在單個查詢中完成,但您可以使用遞歸調用自身的單個過程來完成。

你的過程需要有兩個參數:您正在使用至今

  • 最高探視數量的工作節點的

    • ID(只剩下一本+ 1)

    該程序需要返回它應用的最高訪問數(最後一個)。

    在該過程中,您將運行查詢以查找具有給定ID的節點的所有子節點。如果他們按順序,你可以相應地排序 - 或者你可以使用任意的順序。對於找到的每個孩子,設置左邊的數字,然後遞歸地在該孩子上調用該過程。當遞歸調用返回時,使用返回碼設置正確的訪問數。

    Joe Celko在whole chapter的書中致力於如何通過訪問次數計算來實現聰明和高效。如果您的數據集非常大並且經常編輯,您可能需要閱讀該數據集,否則只需對節點列表進行每次編輯即可重新計算所有訪問數。

  • +0

    謝謝喬爾布朗。我一直在通過比爾卡爾文所創建的Closure Table的stackoverflow。你認爲這真的適合我的模型嗎? http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462 – dasersoft 2012-05-02 07:21:45

    +0

    @dasersoft - 關閉表是另一種解決方案,工作正常。如果要使用閉合表來回答問題,例如在單個查詢中解答哪些節點已啓動,哪些節點關閉以及哪些節點是來自給定節點的兄弟節點等問題,則需要向節點添加「深度」屬性。 – 2012-05-02 11:37:48

    +0

    我確實實現了,現在它很好。使用閉合表 – dasersoft 2012-05-02 22:03:34