程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 用中值排序基數法實現樹狀結構

用中值排序基數法實現樹狀結構

編輯:關於SqlServer
 在BBS的編寫中,經常有人問怎樣實現樹狀結構?一個比較不負責任的回答是:使用遞歸算法。當然,遞歸是一個可行的辦法
(二叉樹的歷遍也好象只能使用遞歸算法),但對於BBS來說,這樣做勢必要進行大量的Sql查詢(雖然可以使用存儲過程來做,但要從根本上加快速度,則應該考慮更快的算法)。
下面給出一個可行的徹底摒棄遞的實現樹狀結構的算法。
    下面給出另一種使用“使用中值排序基數法”實現樹狀結構:
一、主要思想:增加一個排序基數字段ordernum,回復同一根貼的貼子中插入貼子時,排序基數ordernum取兩者的中值。
    為了敘述的簡潔,在此只討論與樹狀結構有關的字段。
在表中增加三個冗余字段,rootid——用於記錄根id,deep——用於記錄回復的深度(為0時表示根貼),ordernum——排序基數(關鍵所在)。
表forum與(只列與樹狀結構有關的字段):id   rootid   deep    ordernum其中id、rootid、deep均為int型(deep可為tinyint型),ordernum為float型。
例:(在此為了簡單,使用一個小的起始排序基數,在實際應用中,應使用較大的起始基數,且應取2的整數次冪,如65536=2^16,下面所說的排序均指按ordernum從小到大排序)。
id   rootid    deep    ordernum
1      0        0            0
2      1        1           64
______________________________
3      1        1           32    回復第1貼,取1、2基數的中值即(0+64)/2
排序後結果為:
id   rootid    deep    ordernum
1      0        0            0
3      1        1           32
2      1        1           64
______________________________
4      1        2           48   回復第3貼,取3、2的基數中值即(32+64)/2
排序後結果為:
id   rootid    deep    ordernum
1      0        0            0
3      1        1           32
4      1        2           48
2      1        1           64
______________________________
5      1        3           56  回復第4貼,取4、2的基數中值即(48+64)/2
排序後的結果為:
id   rootid    deep    ordernum
1      0        0            0
3      1        1           32
4      1        2           48
5      1        3           56
2      1        1           64
______________________________
6 &nbs


您正在看的SQLserver教程是:用中值排序基數法實現樹狀結構。p; 1 2 40 回復第3貼,取3、4的基數中值即(32+48)/2
排序後的結果為:
id   rootid    deep    ordernum
1      0        0            0
3      1        1           32
6      1        2           40
4      1        2           48
5      1        3           56
2      1        1           64
這樣排序基數ordernum與回復深
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved