遍匈 / 方象潤更 / 噴、電會 /

10.7.1 翌電會!謹揃峠財拷旺議糞孖

貫貧塀辛需?奐紗k 辛參受富s?貫遇受富翌贋響/亟議肝方。徽頁?貫和中議網胎嶄嗽辛窟孖?汽歓奐紗k 繍擬崑奐紗坪何拷旺議扮寂utmg。椎挑?泌採盾畳宸倖狸芹椿?

枠心2-揃拷旺。綜u 倖芝村蛍下壓曾倖拷旺粁貧?梓Merge 痕方序佩拷旺。耽誼欺拷旺朔議根u 倖芝村議拷旺粁俶序佩u-1 肝曳熟。

壅心k-揃拷旺。綜u 倖芝村蛍下壓k 倖拷旺粁貧??堡撮v蕾∈鶺諜斷燦欛蚤紗κ?k倖拷旺粁嶄購囚鷹恷弌議芝村?軸哘貫耽倖拷旺粁議及匯倖芝村議屢札曳熟嶄僉竃恷弌宀?宸俶勣序佩k-1 肝曳熟。揖尖?耽誼欺拷旺朔議嗤會粁嶄議匯倖芝村?脅勣序佩k-1 肝曳熟。?堡撮nź探什?u 倖芝村議拷旺粁俶序佩(u-1)(k-1)肝曳熟。喇緩?斤n 倖芝村議猟周序佩翌何電會扮?壓坪何拷旺狛殻嶄序佩議悳議曳熟肝方葎s(k-1)(n-1)。邪譜侭誼兜兵拷旺粁葎m 倖?夸辛誼坪何拷旺狛殻嶄序佩曳熟議悳議肝方葎 k 遇受富翌贋佚連響亟扮寂侭誼丼吩?宸頁厘断侭音錬李議。隼遇?飛壓序佩k-揃拷旺扮旋喘“移宀峯”(Tree of Loser)?夸辛聞壓k 倖芝村嶄僉竃購囚鷹恷弌議芝村扮叙俶序万音壅昧k 議奐海遇奐海。

採僚“移宀峯”?万頁峯侘僉夲電會議匯嶽延侏。屢斤仇?厘断辛各夕10.5 才夕10.6嶄屈我峯葎“覆宀峯”?咀葎耽倖掲嶮極潤泣譲燕幣凪恣、嘔徨溺潤泣嶄“覆宀”。郡岻?飛壓褒牌潤泣嶄芝和胡序佩頼議宸魁曳琵嶄議移宀?遇斑覆宀肇歌紗厚互匯蚊議曳琵?宴辛誼欺匯臣“移宀峯”。
‐箭10.9/ 夕10.13(a)軸葎匯臣糞孖5-揃拷旺議移宀峯ls[0…4]?夕嶄圭侘潤泣燕幣匐徨潤泣(匆辛心撹頁翌潤泣)?蛍艶葎5 倖拷旺粁嶄輝念歌紗拷旺議棋僉夲芝村議購囚鷹?移宀峯嶄功潤泣ls[1]議褒牌潤泣ls[0]葎“酵嘱”?壓緩峺幣光拷旺粁嶄議恷弌購囚鷹芝村葎及眉粁嶄議芝村?潤泣ls[3]峺幣b1 才b2 曾倖匐徨潤泣嶄議移宀軸頁b2?遇覆宀b1 才b3(b3 頁匐徨潤泣b3、b4 才b0 将狛曾魁曳琵朔僉竃議資覆宀)序佩曳熟?潤泣ls[1]夸峺幣万断嶄議移宀葎b1。壓僉誼恷弌購囚鷹議芝村岻朔?峪勣俐個匐徨潤泣b3 嶄議峙?聞凪葎揖匯拷旺粁嶄議和匯倖芝村議購囚鷹?隼朔貫乎潤泣?貧才褒牌潤泣侭峺議購囚鷹序佩曳熟?移宀藻壓乎褒牌?覆宀写偬?貧岷崛峯功議褒牌。泌夕10.13(b)侭幣。輝及3 倖拷旺粁嶄及2倖芝村歌紗拷旺扮?僉誼恷弌購囚鷹芝村葎及匯倖拷旺粁嶄議芝村。葎阻契峭壓拷旺狛殻嶄蝶倖拷旺粁延葎腎?辛參壓耽倖拷旺粁嶄現紗匯倖購囚鷹葎恷寄議芝村。輝僉竃議“酵嘱”芝村議購囚鷹葎恷寄峙扮?燕苧緩肝拷旺厮頼撹。喇噐糞孖k-揃拷旺議移宀峯
議兜兵晒匆否叟糞孖?峪勣枠綜侭嗤議掲嶮極潤泣峺?匯倖根恷弌購囚鷹議匐徨潤泣?隼朔貫光匐徨潤泣竃窟距屁掲嶮極潤泣葎仟議移宀軸辛。

和中殻會嶄酒汽宙峰阻旋喘移宀峯序佩k-揃拷旺議狛殻?葎阻融竃泌採旋喘移宀峯序佩拷旺?閲蝕阻翌贋佚連贋函議聾准?辛參範葎拷旺粁厮贋壓。

‐麻隈10.15/
typedef int LoserTree[k]; /*移宀峯頁頼畠屈我峯拝音根匐徨?辛寡喘乏會贋刈潤更*/
typedef struct{
KeyType key;
}ExNode,External[k]; /*翌潤泣?峪贋慧棋拷旺芝村議購囚鷹*/
void K_Merge(LoserTree *ls,External *b) /*k-揃拷旺侃尖殻會*/
{ /*旋喘移宀峯ls 繍園催貫0 欺k-1 議k 倖補秘拷旺粁嶄議芝村拷旺欺補竃拷旺粁*/
/*b[0]欺b[k-1]葎移宀峯貧議k 倖匐徨潤泣?蛍艶贋慧k 倖補秘拷旺粁嶄輝念芝村議購囚鷹*/
for(i=0;i<k;i++) input(b[i].key); /*蛍艶貫k 倖補秘拷旺粁響秘乎粁輝念及匯倖芝村議*/
/*購囚鷹欺翌潤泣*/
CreateLoserTree(ls); /*秀移宀峯ls?僉誼恷弌購囚鷹葎b[0].key*/
while(b[ls[0]].key!=MAXKEY)
{ q=ls[0]; /*q 峺幣輝念恷弌購囚鷹侭壓拷旺粁*/
output(q); /*繍園催葎q 議拷旺粁嶄輝念(購囚鷹葎b[q].key 議芝村亟崛補竃拷旺粁)*/
input(b[q].key); /*貫園催葎q 議補秘拷旺粁嶄響秘和匯倖芝村議購囚鷹*/
Adjust(ls,q); /*距屁移宀峯?僉夲仟議恷弌購囚鷹*/
}
output(ls[0]); /*繍根恷寄購囚鷹MAXKEY 議芝村亟崛補竃拷旺粁*/
}
void Adjust(LoserTree *ls,int s) /*僉誼恷弌購囚鷹芝村朔?貫匐欺功距屁移宀峯?僉和匯倖恷弌購囚鷹*/
{ /*冽貫匐徨潤泣b[s]欺功潤泣ls[0]議揃抄距屁移宀峯*/
t=(s+k)/2; /*ls[t]頁b[s]議褒牌潤泣*/
while(t>0)
{ if(b[s].key>b[ls[t]].key) s<-->ls[t]; /*s 峺幣仟議覆宀*/
t=t/2;
}
ls[0]=s;
}
void CreateLoserTree(LoserTree *ls) /*秀羨移宀峯*/
{ /*厮岑b[0]欺b[k-1]葎頼畠屈我峯ls 議匐徨潤泣贋嗤k 倖購囚鷹?冽貫匐徨欺功議k 訳揃抄*/
/*繍ls 距屁葎移宀峯*/
b[k].key=MINKEY; /*譜MINKEY 葎購囚鷹辛嬬議恷弌峙*/
for(i=0;i<k;i++) ls[i]=k; /*譜崔ls 嶄“移宀”議兜峙*/
for(i=k-1;k>0;i--) Adjust(ls,i); /*卆肝貫b[k-1],b[k-2],…,b[0]竃窟距屁移宀*/
}

恷朔勣戻式匯泣?k 峙議僉夲旺掲埆寄埆挫?泌採僉夲栽癖議k 頁匯倖俶勣忝栽深打議諒籾。

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