遍匈 / 方象潤更 / 湘、臥孀 /

9.3.1強蓑臥孀燕!B-峯才B+峯

匯.B-峯式凪臥孀


B-峯頁匯嶽峠財議謹揃臥孀峯?万壓猟周狼由嶄載嗤喘。

協吶?匯臣m 竣議B-峯?賜宀葎腎峯?賜葎諾怎和双蒙來議m 我峯?
?峯嶄耽倖潤泣崛謹嗤m 臣徨峯?
?飛功潤泣音頁匐徨潤泣?夸崛富嗤曾臣徨峯?
?茅功潤泣岻翌議侭嗤掲嶮極潤泣崛富嗤⎡m/2⎤ 臣徨峯?
?侭嗤議掲嶮極潤泣嶄淫根參和佚連方象??n?A0?K1?A1?K2?…?Kn?An?
凪嶄?Ki?i=1,2,…,n?葎購囚鷹?拝Ki<Ki+1?Ai 葎峺?徨峯功潤泣議峺寞(i=0,1,…,n)?拝峺寞Ai-1 侭峺徨峯嶄侭嗤潤泣議購囚鷹譲弌噐Ki (i=1,2,…,n)?An 侭峺徨峯嶄侭嗤潤泣議購囚鷹譲寄噐Kn? ⎡m/2⎤ −1≤n≤m −1 ?n 葎購囚鷹議倖方。
?侭嗤議匐徨潤泣脅竃孖壓揖匯蚊肝貧?旺拝音揮佚連?辛參心恬頁翌何潤泣賜臥孀払移議潤泣?糞縞貧宸乂潤泣音贋壓?峺?宸乂潤泣議峺寞葎腎?。

‐箭9.4/泌夕9.15 侭幣葎匯臣5 竣議B-峯?凪侮業葎4。
B-峯議臥孀窃貌屈我電會峯議臥孀?侭音揖議頁B-峯耽倖潤泣貧頁謹購囚鷹議嗤會燕?壓欺器蝶倖潤泣扮?枠壓嗤會燕嶄臥孀?飛孀欺?夸臥孀撹孔?倦夸?欺梓孚斤哘議峺寞佚連峺?議徨峯嶄肇臥孀?輝欺器匐徨潤泣扮?夸傍苧峯嶄短嗤斤哘議購囚鷹?臥孀扮?遇埃吉噐φ 凪嶄φ )?夸埃吉噐φ / 5 1。郡岻?根嗤n倖潤泣議峠財峯議恷寄侮業葎log 5 φ( (n+1))-2。咀緩?壓峠財峯貧序佩臥孀議扮払移。軸壓B-峯貧議臥孀狛殻頁匯倖乏峺寞臥孀潤泣才壓潤泣嶄臥孀購囚鷹住我序佩議狛殻。曳泌?壓夕9.12 嶄臥孀購囚鷹葎93 議圷殆。遍枠?貫t 峺?議功潤泣?a?蝕兵?潤泣?a?嶄峪嗤匯倖購囚鷹?拝93 寄噐万?咀緩?梓?a?潤泣峺寞囃A1 欺潤泣?c?肇臥孀?潤泣?c?喇曾倖購囚鷹?遇93 匆脅寄噐万断?哘梓?c?潤泣峺寞囃A2 欺潤泣?i?肇臥孀?壓潤泣?i?嶄乏會曳熟購囚鷹?孀欺購囚鷹K3。

‐麻隈9.8/
#define m 5 /*B 峯議竣?壙譜葎5*/
typedef struct NODE{
int keynum; /* 潤泣嶄購囚鷹議倖方?軸潤泣議寄弌*/
struct NODE *parent; /*峺?褒牌潤泣*/ KeyTypekey[m+1]; /*購囚鷹?楚?0 催汽圷隆喘*/ struct NODE *ptr[m+1]; /*徨峯峺寞?楚*/ record *recptr[m+1]; /*芝村峺寞?楚*/
}NodeType; /*B 峯潤泣窃侏*/
typedef struct{
NodeType *pt; /*峺?孀欺議潤泣*/
int i; /*壓潤泣嶄議購囚鷹會催?潤泣會催曝寂[1…m]*/
int tag; /* 1:臥孀撹孔?0:臥孀払移*/
}Result; /*B 峯議臥孀潤惚窃侏*/
Result SearchBTree(NodeType *t,KeyType kx)
{ /*壓m 竣B 峯t 貧臥孀購囚鷹kx?郡指(pt,i,tag)。飛臥孀撹孔?夸蒙尢峙tag=1?*/
/*峺寞pt 侭峺潤泣嶄及i 倖購囚鷹吉噐kx?倦夸?蒙尢峙tag=0,吉噐kx 議購囚鷹芝村*/
/*哘峨秘壓峺寞pt 侭峺潤泣嶄及i 倖才及i+1 倖購囚鷹岻寂*/
p=t;q=NULL;found=FALSE;i=0; /*兜兵晒?p 峺?棋臥潤泣?q 峺?p 議褒牌*/
while(p&&!found)
{ n=p->keynum;i=Search(p,kx); /*壓p-->key[1…keynum]嶄臥孀*/
if(i>0&&p->key[i]= =kx) found=TRUE; /*孀欺*/
else {q=p;p=p->ptr[i];}
}
if(found) return (p,i,1); /*臥孀撹孔*/
else return (q,i,0); /*臥孀音撹孔?郡指kx 議峨秘了崔佚連*/
}
‐臥孀蛍裂/
B-峯議臥孀頁喇曾倖児云荷恬住我序佩議狛殻?軸
?壓B-峯貧孀潤泣? ?壓潤泣嶄孀購囚鷹。
喇噐?宥械B-峯頁贋刈壓翌贋貧議?荷恬?祥頁宥狛峺寞壓甘徒屢斤協了?繍潤泣佚
連響秘坪贋?岻朔?壅斤潤泣嶄議購囚鷹嗤會燕序佩乏會臥孀賜孵磯臥孀。咀葎?壓甘徒
貧響函潤泣佚連曳壓坪贋嶄序佩購囚鷹臥孀債扮謹?侭參?壓甘徒貧響函潤泣佚連議肝方?
221
軸B-峯議蚊肝峯頁畳協B-峯臥孀丼楕議遍勣咀殆。
椎担?斤根嗤n 倖購囚鷹議m 竣B-峯?恷撒秤趨和器欺謹侮椿?辛梓屈我峠財峯序
佩窃貌蛍裂。遍枠?網胎m 竣B-方光蚊貧議恷富潤泣方。

屈.B-峯議峨秘才評茅
1.峨秘
壓B-峯貧峨秘購囚鷹嚥壓屈我電會峯貧峨秘潤泣音揖?購囚鷹議峨秘音頁壓匐潤泣貧
序佩議?遇頁壓恷久蚊議蝶倖掲嶮極潤泣嶄耶紗匯倖購囚鷹?飛乎潤泣貧購囚鷹倖方音階
狛m-1 倖?夸辛岷俊峨秘欺乎潤泣貧?倦夸?乎潤泣貧購囚鷹倖方崛富器欺m 倖?咀遇聞
乎潤泣議徨峯階狛阻m 臣?宸嚥B-峯協吶音憲。侭參勣序佩距屁?軸潤泣議“蛍叢”。圭
隈葎?購囚鷹紗秘潤泣朔?繍潤泣嶄議購囚鷹蛍撹眉何蛍?聞誼念朔曾何蛍購囚鷹倖方
倖潤泣繍凪峨秘欺幻潤泣嶄。飛峨秘幻潤泣遇聞幻潤泣嶄購囚鷹倖方階狛m-1?夸幻潤泣
写偬蛍叢?岷欺峨秘蝶倖幻潤泣?凪購囚鷹倖方弌噐m。辛需?B-峯頁貫久?貧伏海議。
‐箭9.5/祥和双購囚鷹會?秀羨5 竣B-峯?泌夕9.16。20?54?69?84?71?30?78?25?
93?41?7?76?51?66?68?53?3?79?35?12?15?65
(1)?腎峯嶄峨秘20?誼夕(a)。
(2)峨秘54?69?84?誼夕(b)。
(3)峨秘71?沫哈?器欺5?勣蛍叢撹眉何蛍?
{20?54}?{69}才{71?84},旺繍69 貧幅欺
乎潤泣議幻潤泣嶄?泌夕(c)。
(4)峨秘30,78,25,93 誼夕(d)。
(5)峨41 嗽蛍叢誼夕(e)。


‐麻隈9.9/
int InserBTree(NodeType **t,KeyType kx,NodeType *q,int i){ /* 壓m 竣B 峯*t 貧潤泣*q 議
key[i],key[i+1]岻寂峨秘購囚鷹kx*/ /*飛哈軟潤泣狛寄?夸冽褒牌全序佩駅勣議潤泣蛍叢距屁?聞*t
挽葎m 竣B 峯*/
x=kx;ap=NULL;finished=FALSE;
while(q&&!finished)
{ Insert(q,i,x,ap); /*繍x 才ap 蛍艶峨秘欺q->key[i+1]才q->ptr[i+1]*/
if(q->keynum<m) finished=TRUE; /*峨秘頼撹*/
else
{ /*蛍叢潤泣*p*/
s=m/2;split(q,ap);x=q->key[s];
/*繍q->key[s+1…m],q->ptr[s…m]才q->recptr[s+1…m]卞秘仟潤泣*ap*/
q=q->parent;
if(q) i=Search(q,kx); /*壓褒牌潤泣*q 嶄臥孀kx 議峨秘了崔*/
}/*else*/
}/*while*/
if(!finished) /*(*t)頁腎峯賜功潤泣厮蛍叢葎*q*才ap*/
NewRoot(t,q,x,ap); /*伏撹根佚連(t,x,ap)議仟議功潤泣*t,圻*t 才ap 葎徨峯峺寞*/
}
2. 評茅
蛍曾嶽秤趨?
(1)評茅恷久蚊潤泣嶄購囚鷹
a)飛潤泣嶄購囚鷹倖方寄噐⎡m / 2⎤ -1?岷俊評肇。
b)倦夸茅噫?嚥恣儘宮(涙恣儘宮?夸孀恣儘宮)?方岻才寄噐吉噐2( -1) 祥嚥万
断幻潤泣嶄議嗤購?匯軟嶷仟蛍塘。泌評肇夕9.16 (h)嶄議76 誼夕9.17


(2)評茅葎掲久蚊潤泣嶄購囚鷹
飛侭評茅購囚鷹掲久蚊潤泣嶄議Ki?夸辛參峺寞Ai 侭峺徨峯嶄議恷弌購囚鷹X 紋旗
Ki?隼朔?壅評茅購囚鷹X?岷欺宸倖X 壓恷久蚊潤泣貧?軸廬葎(1)議秤侘。
評茅殻會?萩響宀徭失頼撹。
眉. B+峯
B+峯頁哘猟周狼由侭俶遇恢伏議匯嶽B-峯議延侘峯。匯臣m 竣議B+峯才m 竣議B-
峯議餓呟壓噐?
?嗤n 臣徨峯議潤泣嶄根嗤n 倖購囚鷹?
?侭嗤議匐徨潤泣嶄淫根阻畠何購囚鷹議佚連?式峺?根嗤宸乂購囚鷹芝村議峺寞?拝
匐徨潤泣云附卆購囚鷹議寄弌徭弌遇寄議乏會全俊。
?侭嗤議掲嶮極潤泣辛參心撹頁沫哈何蛍?潤泣嶄叙根嗤凪徨峯功潤泣嶄恷寄?賜恷弌?
購囚鷹。
箭泌夕9.16 侭幣葎匯臣励竣議B+峯?宥械壓B+峯貧嗤曾倖遊峺寞?匯倖峺?功潤

泣?総匯倖峺?購囚鷹恷弌議匐徨潤泣。咀緩?辛參斤B+峯序佩曾嶽臥孀塰麻?匯嶽頁
貫恷弌購囚鷹軟乏會臥孀?総匯嶽頁功潤泣蝕兵?序佩昧字臥孀。
壓B+峯貧序佩昧字臥孀、峨秘才評茅議狛殻児云貧嚥B-峯窃貌。峪頁壓臥孀扮?飛
掲嶮極潤泣貧議購囚鷹吉噐公協峙?旺音嶮峭?遇頁写偬?和岷欺匐徨潤泣。咀緩?壓B+
峯?音砿臥孀撹孔嚥倦?耽肝臥孀脅頁恠阻匯訳貫功欺匐徨潤泣議揃抄。B+峯臥孀議蛍裂
窃貌噐B-峯。B+峯議峨秘叙壓匐徨潤泣貧序佩?輝潤泣嶄議購囚鷹倖方寄噐m 扮勣
蛍叢撹曾倖潤泣?麿断侭根購囚鷹議倖方譲旺拝?麿断議褒牌潤泣嶄哘揖扮淫根宸曾倖潤泣嶄議恷寄購囚鷹。B+峯議評茅匆叙壓匐徨潤泣序佩?輝匐徨潤泣嶄議恷寄購
囚鷹瓜評茅扮?凪壓掲嶮極潤泣嶄議峙辛參恬葎匯倖“蛍順購囚鷹”贋壓。飛咀評茅
⎡m / 2⎤
夕9.18
遇聞潤泣嶄購囚鷹議倖方富噐扮?凪才儘宮潤泣議栽旺狛殻呀才B-峯窃貌。

AltStyle によって変換されたページ (->オリジナル) /