無限級目錄樹最優演算法的新研究 (轉)

worldblog發表於2007-12-12
無限級目錄樹最優演算法的新研究 (轉)[@more@]

(首先宣告:因為看到許多人對本文的熱心關注,作者對本文稍作修改和補充)
本文具體介紹:1。目錄樹的資料結構
  2。探討具體應用中的查詢複雜度。

表結構:  id(編號)pid(父節點)nodepath(路徑)nodetype(狀態)
 
示例資料:1  0  0>  F
  2  0  0>  D
  3  2  0>2>  D
  4  3  0>2>3>  F
測試專案: 
1。獲取當前節點的父節點:複雜度:O(n)
2。獲取當前節點的下級子節點: 複雜度:O(n)
3。獲取當前節點的所有子孫節點: 複雜度:O(n)
4。獲取當前節點的所有直系祖宗節點: 複雜度:O(n)
5。刪除、新增節點時比較容易實現,主要是實現節點轉移有點麻煩:設被轉移

的節點為S,轉移到的目的節點為T,則S.nodepath=T.nodepath+T.id+'>';同時檢

查S是否有兄弟節點,無則S的父節點的nodetype改為F;檢查T的nodetype,如為F

則改為D;修改表中S的子孫節點nodepath。一般這種情況出現的機率很低。
說明:本人的初衷是將該結構主要應用在類的目錄樹中,根據

nodetype,畫樹的時候不必再搜尋資料庫去判斷該節點是否還有子節點。至於用

在bbs帖子樹,像帖子樹中有一個帖子最新的,就必須將整個帖子樹置頂這樣的

情況,有種實用解決辦法:增加一個欄位id(帖子的根帖): distanct

rootid from table order by postdate。
本資料結構支援無限級樹,關於樹的深度,可以根據實際情況而定nodepath的長

度。最後,我為什麼用“最優”,主要有激將之意,拋磚引玉,只是希望能引起

廣大高手的注意,能提出個人獨特建議,在交流上作廣泛的討論。作者本人也絕

沒有夜郎自大的意思。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991640/,如需轉載,請註明出處,否則將追究法律責任。

相關文章