韩剧1988免费观看全集_久久影视三级福利片_亚洲视频在线观看免费_在线观看欧美日韩_国产亚洲激情在线_亚洲精品美女久久久_欧美国产日韩一区二区在线观看_91在线观看免费高清完整版在线观看_日韩av免费看_国产又爽又黄的激情精品视频_琪琪亚洲精品午夜在线_欧美性猛xxx_不卡毛片在线看_国产亚洲日本欧美韩国_91国内在线视频_精品国产福利视频

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

運(yùn)用多中值排序基數(shù)完成大型樹狀結(jié)構(gòu)

運(yùn)用多中值排序基數(shù)完成大型樹狀結(jié)構(gòu)

更新時(shí)間:2019-11-11 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

使用多中值排序基數(shù)實(shí)現(xiàn)大型樹狀結(jié)構(gòu)

在“中值排序基數(shù)法實(shí)現(xiàn)樹狀結(jié)構(gòu)”中,為了解決回復(fù)限制的問題,我們可以增加第二(三、四……)基數(shù)字段。
其實(shí)在一般的BBS中,使用一個(gè)基數(shù)已經(jīng)足夠,因?yàn)橐粋(gè)貼子的回復(fù)太多或深度太大的時(shí)候,無論你的樹狀結(jié)構(gòu)做得多好,由于屏幕的限制(顯示折行),顯示總會亂,因此不如象在《補(bǔ)充》一文中,達(dá)到一定深度或個(gè)數(shù)時(shí),后面的貼子采用平行顯示的方法,不過那部分已經(jīng)不再是樹狀結(jié)構(gòu)了。
原理:在貼子顯示的order by子句中,如果排序基數(shù)相同,則根據(jù)第二基數(shù)排序,從而避免樹狀結(jié)構(gòu)限制。

一、在BBS的內(nèi)容表中再增加一個(gè)第二基數(shù)字段ordernumS,同第一基數(shù)一樣,可為int或numeric,看需要定。

這樣在表中增加了四個(gè)冗余字段,rootid——用于記錄根id,deep——用于記錄回復(fù)的深度(為0時(shí)表示根貼),ordernum——第一排序基數(shù),ordernumS——第二排序基數(shù)

表forum與(只列與樹狀結(jié)構(gòu)有關(guān)的字段):
id rootid deepordernumordernumS
其中id、rootid、deep均為int型(deep可為tinyint型),ordernum為int或float型,ordernumS(默認(rèn)值為0)同ordernum。

例:(在此為了簡單,使用一個(gè)小的起始排序基數(shù),且為int型,以清楚觀察什么時(shí)候第二排序基數(shù)起作用)。
(下面所說的排序均指按ordernum從小到大,ordernumS從小到大排序,即order by ordernum,ordernumS)
(下面所說的精度為后貼與前貼的ordernum的差,精度標(biāo)記指的是這個(gè)差大于某個(gè)值這個(gè)條件,比如(后貼的ordernum-前貼的ordernum)>1)

id rootiddeepordernumordernumS
10000
21180
_____________________________________
31140回復(fù)第1貼,第一基數(shù)取1、2貼的第一基數(shù)中值即(0+8)/2=4

排序后結(jié)果為:
id rootiddeepordernumordernumS
10000
31140
21180
_____________________________________
41260回復(fù)第3貼,第一基數(shù)取3、2的第一基數(shù)中值即(4+8)/2

排序后結(jié)果為:
id rootiddeepordernumordernumS
10000
31140
41260
21180
_____________________________________
51370回復(fù)第4貼,第一基數(shù)取4、2的第一基數(shù)中值即(6+8)/2

排序后的結(jié)果為:
id rootiddeepordernumordernumS
10000
31140
41260
51370
21180
_____________________________________
61368 回復(fù)第4貼,第一基數(shù)取4、5的第一基數(shù)中值即(6+7)/2,因是int型,被截成了6
此時(shí)精度標(biāo)記(暫設(shè)為1)已經(jīng)不滿足(即5的第一基數(shù)與4的第一基數(shù)差不大于1,為1),此時(shí)在父貼的第二基數(shù)加上一起始值作為新貼的第二基數(shù)
排序后的結(jié)果為:
id rootiddeepordernumordernumS
10000
31140
41260
61368
51370
21180
_____________________________________
71364 回復(fù)第4貼,第一基數(shù)取4、6的第一基數(shù)中值即(6+6)/2=6
此時(shí)精度標(biāo)記(暫設(shè)為1)已經(jīng)不滿足(即4的第一基數(shù)與6的第一基數(shù)差不大于1,為0),此時(shí)第二基數(shù)取6、4的第二基數(shù)中值(0+8)/2=4


排序后的結(jié)果為:
id rootiddeepordernumordernumS
10000
31140
41260
71364
61368
51370
21180

這樣排序基數(shù)ordernum、ordernumS與回復(fù)深度deep一起就實(shí)現(xiàn)了如下的樹狀結(jié)構(gòu):
id
1
3
 4
 7
 6
 5
2

在這可以看到,第一基數(shù)ordernum與第二基數(shù)ordernumS以及深度deep實(shí)現(xiàn)了樹狀結(jié)構(gòu)!


二、插入的實(shí)現(xiàn)(如何確定排序基數(shù),下面所指貼子均為同一根下的子貼)
(一)根第一基數(shù)ordernum定為0
(二)所有貼子第二基數(shù)默認(rèn)為0
(三)第一條回復(fù)貼子基數(shù)定為2的整數(shù)次冪(如65536=2^16,可取更大的數(shù))
(四)回復(fù)樹中最后一條貼子時(shí),基數(shù)取最后一貼的基數(shù)ordernum再加上2的整數(shù)次冪(同上)
(五)當(dāng)?shù)谝换鶖?shù)差大于精度標(biāo)記時(shí),第一基數(shù)取中值,忽略第二基數(shù)(為0)
(五)當(dāng)?shù)谝换鶖?shù)差等于精度標(biāo)記時(shí),第一基數(shù)取回復(fù)貼的第一基數(shù),第二基數(shù)取回復(fù)貼的第二基數(shù)加上基數(shù)起始值
(六)當(dāng)?shù)谝换鶖?shù)差小于精度標(biāo)記時(shí),第一基數(shù)取回復(fù)貼的第一基數(shù),第二基數(shù)取前后貼的第二基數(shù)中值

如果要使用parentid字段,則更新相關(guān)的parentid,這里不再討論。

三、刪除的實(shí)現(xiàn)

刪除貼子(剪枝)時(shí),當(dāng):
(一)要?jiǎng)h除的是根貼時(shí),將整個(gè)樹刪除即可
(二)要?jiǎng)h除的是子枝時(shí),只需按ordernum和ordernumS排序,找出從指定要?jiǎng)h除的貼子開始的所有貼子(使用條件rootid=@rootid and (ordernum>@ordernum or ordernum=@ordernum and ordernumS>=@ordernumS)),從上到下逐個(gè)判斷深度是不是增加,如果增加則予以刪除。一旦發(fā)現(xiàn)深度等于或小于要?jiǎng)h貼子(枝頂)的深度,則馬上退出刪除。
如上例子中,要?jiǎng)h除4貼一個(gè)分枝,只需找出4后面的所有貼子,然后逐個(gè)往下判斷,如果深度大小4貼的深度則刪除,而一旦遇到深度等于或者小于4貼深度,則馬上退出刪除。結(jié)果是4、7、6、5滿足條件,這就是我們要?jiǎng)h除的子枝。
如果要增加parentid字段,則需判斷共刪除了多少個(gè)貼子,以例更新有關(guān)的parentid字段。
為了方便和提高速,使用操作API光標(biāo)的存儲過程來進(jìn)行。

四、顯示的實(shí)現(xiàn)
只需執(zhí)行select * from forum order by rootid+id-sign(rootid)*id desc,ordernum,ordernumS,然后結(jié)合deep就可實(shí)現(xiàn)樹狀的顯示。


五、具體實(shí)現(xiàn)方法(以存儲過程為例)

加貼存儲過程:(ordernum和ordernumS使用int型,設(shè)精度標(biāo)記為1)

CREATE PROCEDURE [add] @keyid int,@message varchar(50) OUTPUT———keyid為回復(fù)的貼子id號,如果是新貼則為0,@message為出錯(cuò)信息
AS
IF (@keyid=0)
INSERT INTO forum (rootid,deep,ordernum,ordernumS……) values(0,0,0,0……)
ELSE
BEGIN
 DECLARE @rootid int,@id int,@deep int,@begnum int,@endnum intt,@begS int,endS int,@ordernum int,@ordernumS int
 SELECT @rootid=0,@id=0,@deep=0,@begnum=0,@endnum=0,@ordernum=0,@ordernumS=0,@begS=0,@endS=0
 SELECT @rootid=rootid,@id=id,@begnum=ordernum,@begs=begs,@deep=deep from forum where id=@keyid
 IF (@id=0)
 BEGIN
SELECT @message='要回復(fù)的貼子已經(jīng)被刪除!'
return
 END
 ELSE
 BEGIN
IF (@rootid=0) SELECT @rootid=@id——回復(fù)的是根貼,取其id為新加貼的rootid
#1SELECT top 1 @endnum=ordernum,@endS=ordernumS where rootid=@rootid and id<>@id by ordernum,ordernumS ——取回復(fù)貼子后面的那條貼出來
if @endnum-@begnum>1
SELECT @ordernum=(@begnum+@endnum)/2,@ordernumS=0——精度大小精度標(biāo)記(在取為1),忽略第二基數(shù)(定為0)
else
BEGIN
select case @endnum-begnum
case 1
select @ordernum=@begnum,@ordernumS=@begS+65536 ——在父貼的第二基數(shù)基礎(chǔ)上加一起始值作為新貼第二基數(shù),實(shí)際應(yīng)用中可在此限制范圍以防溢出
case 0
select @ordernum=@begnum,@ordernumS=(@begS+endS)/2——取第二基數(shù)中值作為新貼第二基數(shù)
case else ——小于0(即@begnum=0),表示#1句中沒有找到后面一條貼子,即要回復(fù)的是樹中的最后一條貼子
SELECT @ordernum=@begnum+65536,@ordernumS=0 ——實(shí)際應(yīng)用中可限制@ordernum的范圍,以免溢出
end select
END
INSERT into forum (rootid,deep,ordernum,orderS……) values(@rootid,@deep+1,@ordernum,@ordernumS……)
 END
END
Select @message='成功'
return



剪枝存儲過程:
CREATE PROCEDURE [del] @keyid int,@message varchar(50) OUTPUT———keyid為要?jiǎng)h除的貼子id號,如果是新貼則為0,@message為出錯(cuò)信息
AS
DECLARE @rootid int,@id int,@deep int,@deept int
SELECT @rootid=0,@id=0,@deep=0,@deept=0
SELECT @id=id,@rootid=rootid,@deept=deep from forum where id=@keyid
IF (@id=0)
BEGIN
 SELECT @message='該貼子不存在!"
 return
END
ELSE
BEGIN
if (@rootid=0) ——要?jiǎng)h的是根貼
delete from forum where id=@id or rootid=@id
else——剪子枝
BEGIN
DECLARE forum_cur CURSOR
 FOR
SELECT deep FROM forum WHERE rootid=@rootid and (ordernum>@ordernum or ordernum=@ordernum and ordernumS>=@ordernumS) order by ordernum,ordernumS
OPEN forum_cur
FETCH FROM forum_cur INTO @deep
DELETE FROM forum where CURRENT OF forum_cur——?jiǎng)h除最頂枝
WHILE @@fetch_status=0
BEGIN
FETCH FROM forum_cur INTO @deep
IF (@deep<=@tdeep) or @@fetch_status<>0——一旦發(fā)現(xiàn)深比枝頂?shù)纳钕嗟然蜻要小或者游標(biāo)到了尾部,則馬上退出
BEGIN
select @message='成功刪除子枝'
CLOSE forum_cur
DEALLOCATE forum_cur
return
END
DELETE FROM forum WHERE CURRENT OF forum_cur
END
END
CLOSE freelt_cur
DEALLOCATE forum_cur
END
END

顯示(略)


過程看起來比使用單個(gè)排序基數(shù)復(fù)雜了不少,其實(shí)主要是判斷何時(shí)給第二基數(shù)賦值的問題。
注意事項(xiàng):基數(shù)起始值不能取類型的最大值,比如int的最大限制為2^31,則基數(shù)起始值要預(yù)留空間,否則最后的子貼是無法回復(fù)的!(或者如果限制了ordernum的范圍,雖然可以回復(fù),但它是平行顯示的)
使用了兩個(gè)基數(shù)的時(shí)候,一個(gè)子貼的回復(fù)數(shù)最多了900左右(int類型,30*30),14400(使用numeric類型時(shí)——此時(shí)的精度標(biāo)記得細(xì)加斟酌),理論是有限制都是不夠的,但實(shí)際上并不需要這么多。
對于基數(shù)分布不均勻的問題是無法解決的,因?yàn)閷?shí)際上回復(fù)客戶回復(fù)哪條貼子是不可預(yù)測的。
使用2的冪作為基數(shù),是很容易理解的——不易近起結(jié)果取近似值(除非達(dá)到了計(jì)算機(jī)的最大精度),另一個(gè)原因是計(jì)算機(jī)使用二進(jìn)制進(jìn)行運(yùn)算,乘除2只是位移操作,速度要比其它數(shù)快得多(我是這么想的)。另一個(gè)個(gè)人的原因是因?yàn)槲覀(gè)算法是源于以前的思想:收斂數(shù)列與遞歸算法。
由于增加了算法復(fù)雜程度和冗余字段,如非必要,實(shí)非不必。
其實(shí)我是沒有時(shí)間進(jìn)行測試的,如果由于考慮不周或者算法錯(cuò)誤引起無法使用,還請多多指教。

歡迎訪問我的個(gè)人主頁http://swuse.yeah.net

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
欧美激情午夜| 中文字幕在线观看成人| av中文天堂在线| 成人午夜无人区一区二区| 91丨porny丨国产| 中文字幕乱码亚洲精品一区| 99视频精品| 亚洲精品网站在线观看| 欧美午夜精品一区二区| 黄色网zhan| 欧美特级特黄aaaaaa在线看| 欧美激情性做爰免费视频| 原谅我中文字幕| 欧美一区二区三区四区在线观看地址| 久久亚洲精品大全| 亚洲另类在线制服丝袜| 国产精品无码一区二区在线| 亚洲天堂网在线观看视频| 国产人成一区二区三区影院| 在线视频亚洲专区| 亚洲高清成人影院| 成人午夜电影小说| 日韩不卡免费视频| 欧美最猛黑人xxxx黑人猛交黄| 无码人妻丰满熟妇啪啪网站| 欧美精品在线观看一区二区| 亚洲国产精品一| 亚洲调教视频在线观看| 91精品国产高清久久久久久91| 成人在线观看小视频| 久久综合五月天| 午夜精品久久久久久久96蜜桃| 久久这里只有精品国产| av电影在线地址| www男人天堂| 91精品国产乱码久久久久| 亚洲www啪成人一区二区麻豆| 一区二区三区久久| 99re成人在线| 久久久久亚洲精品成人网小说| av中文字幕在线观看| 亚洲成av人片乱码色午夜| 天天操天天擦| 日韩一级高清毛片| 午夜黄色在线观看| 日韩精品一区二区三区在线播放| 免费91麻豆精品国产自产在线观看| 国产一区二区三区视频在线播放| 97视频在线观看视频免费视频| 91好吊色国产欧美日韩在线| 欧美精品一区二区不卡| 99久久伊人久久99| 亚洲成人精品视频在线观看| 国产小黄视频| 好吊视频一区二区三区| 无码无遮挡又大又爽又黄的视频| 四虎影院一区二区三区| 无码内射中文字幕岛国片| 国产精品麻豆网站| 少妇一级淫免费观看| 午夜精品视频网站| 黄色在线观看国产| 91久久精品美女高潮| 国产成人在线视频免费播放| av噜噜在线观看| 国产一区二区三区在线观看| 精品国产乱码久久久久夜深人妻| 日韩在线网址| 日韩成人在线观看视频| 久久福利视频导航| 亚洲国产日韩欧美一区二区三区| 亚洲午夜精品久久久久久久久久久久| 日韩美女黄色片| 韩国三级在线播放| 成人免费看片载| 美女100%露胸无遮挡| 成年人网站91| 日韩电影大全网站| 国产成人a v| 欧美三日本三级少妇三99| 在线视频你懂得| 成人免费在线网| 久久国产精品99久久久久久老狼| 成人性生交大片免费看在线播放| 欧美+亚洲+精品+三区| 视频一区二区视频| 日韩女优视频免费观看| 五月天色婷婷综合| 北岛玲日韩精品一区二区三区| 99热热99| 成人激情综合| 国产91视频一区| 国产成人亚洲综合无码| 亚洲电影天堂av| 久草福利资源在线观看| 91社区在线高清| 亚洲伦乱视频| 国产a∨精品一区二区三区不卡| 成人免费视频入口| 亚洲一区久久久| 玩弄japan白嫩少妇hd| 伊人色综合网| 国产成人av免费| 日韩va亚洲va欧美va清高| 亚洲国产成人精品女人| 久久av老司机精品网站导航| 亚洲美女在线一区| 国产一区视频在线| 亚洲国内在线| 日韩av一二三四区| 色88888久久久久久影院| 国产一区二区三区黄视频| 国产麻豆91精品| 亚洲国产成人精品视频| 国产午夜精品一区| 国产调教视频在线观看| 欧美精品制服第一页| 少妇视频在线播放| 欧美日韩在线观看一区| 日韩一区二区在线观看| 国产91精品免费| 在线观看视频二区| 久草在线新免费首页资源站| 国产日韩精品久久久| 欧美 日韩 人妻 高清 中文| 精东传媒在线观看| 欧美人在线观看| 国产精品2023| 国产a级片网站| 三级黄色在线视频| 18video性欧美19sex高清| 黄色网址免费看| 国产精品久久久久久久天堂第1集| 日本sm极度另类视频| 亚洲最大网站| 精品动漫3d一区二区三区免费版| 顶级网黄在线播放| 天天靠夜夜靠| 一区二区三区视频网站| 中文字幕乱码人妻综合二区三区| 亚洲午夜在线观看| 五月婷婷视频在线观看| 色综合影院在线| 激情无码人妻又粗又大| 蜜乳av一区二区| 一区二区三区四区亚洲| 中文字幕在线观看高清| 国产欧美亚洲视频| 欧美高清在线视频观看不卡| 中文字幕在线综合| 亲子乱一区二区三区电影| 国产女主播在线一区二区| 中文字幕日韩国产| 粉嫩蜜臀av国产精品网站| 国产精品成人av| 黄色一级视频片| 国产成人a亚洲精v品无码| 九九精品视频在线观看| 日韩成人精品视频在线观看| 国产不卡一区二区在线观看| 色8久久精品久久久久久蜜| 精品日韩免费| 日韩在线视频免费| 理论片在线观看理伦片| 欧美影院午夜播放| www.com久久久| 最好2018中文免费视频| 日本a口亚洲| 国产精品久久久久久久久久久久午夜片| 青青草国产免费| 日韩高清在线观看一区二区| 日韩女优电影在线观看| 亚洲欧美卡通动漫| 日韩av资源| 日韩在线播放一区| 成年人黄视频网站| 国产免费一区二区三区最新不卡| 激情亚洲另类图片区小说区| 欧美三级免费观看| 国产999精品久久久影片官网| 日韩欧美在线看| 激情综合网五月婷婷| 亚洲第一av色| 亚洲精品国产精品国自产| 久久国产精品影院| 91农村精品一区二区在线| 国产在线激情| 国产夫妻在线播放| 久久久久久久极品内射| 亚洲一区免费网站| 日本久久伊人| 国产资源第一页| 精品国产第一区二区三区观看体验| 亚洲人一二三区| 天码人妻一区二区三区在线看| 国产日韩高清一区二区三区在线| 善良的小姨在线| 毛片在线视频| 成人国产精品一区二区网站| 国产人妖在线播放| 成人中心免费视频| 激情综合激情五月| 老牛影视av老牛影视av| 欧美超级乱淫片喷水| 色婷婷综合成人| 777奇米四色成人影色区| 日本一级淫片色费放| 国产成人短视频在线观看| 中文精品久久久久人妻不卡| 精人妻无码一区二区三区| 免费一区二区三区在线视频| 久热精品在线| 欧美久久一级| 波多野结衣大片| 最新国产精品久久精品| 欧美激情xxxxx| 成人免费观看视频在线观看| 久久亚洲成人av| 久久久人成影片一区二区三区在哪下载| 无码人妻丰满熟妇区毛片| 天天干天天干天天操| 一区二区免费看| 人妻视频一区二区| 日韩av影片在线观看| 欧美插插视频| 99在线精品视频免费观看软件| 最近2019中文字幕mv免费看| 波多野结衣高清在线| 啦啦啦中文高清在线视频| 日韩黄色中文字幕| 欧美日韩国产成人在线观看| 男女网站在线观看| 日韩精品视频无播放器在线看| 亚洲爱爱爱爱爱| 污污视频网站免费观看| 精品久久久久久亚洲综合网| 天天操精品视频| 黑人巨茎大战欧美白妇| 精品精品导航| 在线一区av| 90岁老太婆乱淫| 国产三区在线成人av| 欧美在线一区视频| 国产日韩欧美精品一区二区三区| 日韩精品每日更新| 日韩久久一区二区三区| 男人天堂视频在线观看| 国产精品久久久久久久久久ktv| 轻点好疼好大好爽视频| 亚洲天堂网站在线| 亚洲国产精品视频在线| 高h视频在线播放| 国产乱淫av免费| 国产精品亚洲αv天堂无码| 日本激情视频网| 欧美第一在线视频| 91精品综合久久久久久五月天| 欧美日韩性视频| 日韩不卡av| 国产精品久久久久婷婷二区次| 欧美一区二区三区思思人| 中文字幕在线不卡国产视频| 欧美中文字幕久久| 色一情一区二区| 欧美精品观看| 亚洲神马久久| 91av在线免费观看视频| 亚洲国产综合在线看不卡| 色综合咪咪久久| 国产成人丝袜美腿| 欧美日韩亚洲精品内裤| 亚洲成人激情自拍| 激情五月激情综合网| 2021国产视频| 91九色鹿精品国产综合久久香蕉| 国产脚交av在线一区二区| 欧美日韩福利在线观看| 国产探花在线精品一区二区| 网站在线观看你懂的| 7777精品伊人久久久大香线蕉的| 欧美gay1069大粗吊| 好吊色欧美一区二区三区四区| 亚洲宅男天堂在线观看无病毒| a视频在线观看| 免费视频一区二区| 手机精品视频在线| 国产中年熟女高潮大集合| 玛雅亚洲电影| 热久久中文字幕| 九色porny视频国产网曝| 影音先锋可以看的网站| 中文字幕69页| 一区二区精品免费视频| 日本亚洲导航| 福利视频网址| 超碰97久久国产精品牛牛| 黄色三及免费看| 性欧美video视频另类| 麻豆传媒一区| 午夜欧美在线一二页| 国产一区二区免费视频| 日韩在线视频免费| 女色窝人体色77777| 四虎电影院在线观看| 午夜久久久久久久久久一区二区| 精品久久一区二区三区蜜桃| 四虎影院在线域名免费观看| 成人一区而且| 成人av资源在线播放| 久久经典视频| 18av千部影片| 成人爽a毛片| 九九九伊在线综合永久| 欧美一区二区三区男人的天堂| 漂亮人妻被中出中文字幕| 国产精品免费人成网站酒店| 久久91成人| 高清一区二区中文字幕| 久久成人一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 91精品久久久久久久91蜜桃| 澳门av一区二区三区| 欧美精品免费在线观看| 日韩欧美亚洲范冰冰与中字| 草莓视频一区二区三区| 最新国产精品自拍| 色综合男人天堂| 台湾佬成人中文网222vvv|