\input style \chapnotrue \chapno=6 \subchno=2 \subsubchno=2 %% 536 \subsubchap{sBALANSIROVANNYE DEREVXYA} tOLXKO CHTO IZUCHENNYJ NAMI ALGORITM VSTAVKI V DEREVO POROZHDAET HOROSHIE DEREVXYA POISKA PRI SLUCHAJNYH ISHODNYH DANNYH, NO VSE ZHE SUSHCHESTVUET DOSADNAYA VEROYATNOSTI POLUCHITX VYROZHDENNOE DEREVO. vOZMOZHNO, MY MOGLI BY IZOBRESTI ALGORITM, KOTORYJ V LYUBOM SLUCHAE DAET OPTIMALXNOE DEREVO, NO, K SOZHALENIYU, |TO DALEKO NE PROSTO. dRUGOJ PODHOD SOSTOIT V HRANENII POLNOJ DLINY PUTI I REORGANIZACII DEREVA VSYAKIJ RAZ, KOGDA DLINA EGO PUTI PREVYSHAET, SKAZHEM, $5N\log_2N$. nO TOGDA V PROCESSE POSTROENIYA DEREVA POTREBOVALOSX BY OKOLO $\sqrt{N/2}$ REORGANIZACIJ. oCHENX OSTROUMNOE RESHENIE PROBLEMY PODDERZHANIYA HOROSHEGO DEREVA POISKA BYLO NAJDENO V 1962~G. DVUMYA SOVETSKIMI MATEMATIKAMI---g.~m.~aDELXSONOM-vELXSKIM I e. m. lANDISOM [{\sl dan sssr\/}, {\bf 146} (1962), 263--266]. iH METOD TREBUET LISHX DVUH DOPOLNITELXNYH BITOV NA UZEL I NIKOGDA NE ISPOLXZUET BOLEE $O(\log N)$ OPERACIJ DLYA POISKA PO DEREVU ILI DLYA VSTAVKI |LEMENTA. v DALXNEJSHEM MY UVIDIM, CHTO |TOT PODHOD TAKZHE PRIVODIT K OBSHCHEMU METODU PREDSTAVLENIYA PROIZVOLXNYH LINEJNYH \emph{SPISKOV} DLINY $N$, PRICHEM KAZHDAYA IZ SLEDUYUSHCHIH OPERACIJ TREBUET LISHX $O(\log N)$ EDINIC VREMENI: \medskip \item{i)} nAJTI |LEMENT PO DANNOMU KLYUCHU. \item{ii)} pRI DANNOM $k$ NAJTI $k$-J |LEMENT. \item{iii)} vSTAVITX V OPREDELENNOM MESTE |LEMENT. \item{iv)} uDALITX OPREDELENNYJ |LEMENT. \medskip \noindent eSLI DLYA LINEJNYH SPISKOV PRINYATO POSLEDOVATELXNOE RASPOLOZHENIE, TO OPERACII (i) I (ii) BUDUT |FFEKTIVNYMI, NO OPERACII (iii) I (iv) ZAJMUT PORYADKA $N$ SHAGOV; S DRUGOJ STORONY, PRI ISPOLXZOVANII SVYAZANNOGO RASPOLOZHENIYA |FFEKTIVNY OPERACII (iii) I (iv), A (i) I (ii) POTREBUYUT PORYADKA $N$ SHAGOV. pREDSTAVLENIE LINEJNYH SPISKOV V VIDE DEREVA POZVOLYAET SDELATX \emph{VSE CHETYRE} OPERACII ZA $O(\log N)$ SHAGOV. mOZHNO TAKZHE SRAVNITELXNO |FFEKTIVNO PROIZVODITX DRUGIE STANDARTNYE OPERACII; NAPRIMER, VOZMOZHNA KONKATENACIYA (SCEPLENIE) SPISKA IZ $m$ |LEMENTOV SO SPISKOM IZ $N$ |LEMENTOV ZA $O(\log (m+N))$ SHAGOV. mETOD, DAYUSHCHIJ VSE |TI PREIMUSHCHESTVA ISPOLXZUET TAK NAZYVAEMYE "SBALANSIROVANNYE DEREVXYA". pREDYDUSHCHIJ ABZAC SLUZHIT REKLAMOJ SBALANSIROVANNYH DEREVXEV---|TAKOJ PANACEI OT VSEH BED; PO SRAVNENIYU S NIMI VSE DRUGIE SPOSOBY PREDSTAVLENIYA DANNYH KAZHUTSYA USTAREVSHIMI. nO NEOBHODIMO SBALANSIROVATX NASHE OTNOSHENIE K SBALANSIROVANNYM DEREVXYAM! eSLI TREBUYUTSYA NE VSE. CHETYRE RASSMOTRENNYE OPERACII, TO NAS MOZHET UDOVLETVORITX %% 537 ZNACHITELXNO MENEE UNIVERSALXNYJ, NO PROSHCHE PROGRAMMIRUEMYJ METOD. bOLEE TOGO, SBALANSIROVANNYE DEREVXYA HOROSHI LISHX PRI DOSTATOCHNO BOLXSHIH $N$; TAK. ESLI ESTX |FFEKTIVNYJ ALGORITM, TREBUYUSHCHIJ $20\log_2N$ EDINIC VREMENI, I NE|FFEKTIVNYJ ALGORITM, TREBUYUSHCHIJ $2N$ EDINIC VREMENI, TO PRI $N<1024$ SLEDUET ISPOLXZOVATX NE|FFEKTIVNYJ METOD. s DRUGOJ STORONY, $N$ NE DOLZHNO BYTX SLISHKOM VELIKO; SBALANSIROVANNYE DEREVXYA PODHODYAT GLAVNYM OBRAZOM DLYA HRANENIYA DANNYH VO \emph{VNUTRENNEJ} PAMYATI, A V P.~6.2.4 MY IZUCHIM LUCHSHIE METODY DLYA VNESHNIH FAJLOV S PRYAMYM DOSTUPOM. tAK KAK SO VREMENEM RAZMERY VNUTRENNEJ PAMYATI STANOVYATSYA VSE BOLXSHE I BOLXSHE, SBALANSIROVANNYE DEREVXYA STANOVYATSYA VSE BOLEE VAZHNYMI. \dfn{vYSOTA} DEREVA OPREDELYAETSYA KAK EGO NAIBOLXSHIJ UROVENX, KAK MAKSIMALXNAYA, DLINA PUTI OT KORNYA DO VNESHNEGO UZLA. \picture{20. sBALANSIROVANNOE BINARNOE DEREVO} bINARNOE DEREVO NAZYVAETSYA \dfn{SBALANSIROVANNYM}; ESLI VYSOTA LEVOGO PODDEREVA KAZHDOGO UZLA OTLICHAETSYA OT VYSOTY PRAVOGO PODDEREVA NE BOLEE CHEM NA $\pm1$. nA RIS.~20 POKAZANO SBALANSIROVANNOE DEREVO S 17 VNUTRENNIMI UZLAMI I VYSOTOJ 5; \dfn{POKAZATELX SBALANSIROVANNOSTI} PREDSTAVLEN VNUTRI KAZHDOGO UZLA ZNAKAMI $+$, $\cdot$ ILI $-$, CHTO OTVECHAET RAZNOSTI VYSOT PRAVOGO I LEVOGO PODDEREVXEV, RAVNOJ $+1$, $0$ ILI $-1$ SOOTVETSTVENNO. fIBONACHCHIEVO DEREVO NA RIS.~8 (P~6.2.1) YAVLYAETSYA DRUGIM SBALANSIROVANNYM BINARNYM DEREVOM VYSOTY 5, IMEYUSHCHIM TOLXKO 12 VNUTRENNIH UZLOV; BOLXSHINSTVO POKAZATELEJ SBALANSIROVANNOSTI RAVNO $-1$. "zODIAKALXNOE DEREVO" NA RIS.~10 (P.~6.2.2) \emph{NE} SBALANSIROVANO, TAK KAK PODDEREVXYA UZLOV |AQUARIUS| I |GEMINI| NE UDOVLETVORYAYUT PRINYATYM OGRANICHENIYAM. eTO OPREDELENIE SBALANSIROVANNOSTI PREDSTAVLYAET SOBOJ KOMPROMISS MEZHDU \emph{OPTIMALXNYMI} BINARNYMI DEREVXYAMI (VSE VNESHNIE UZLY KOTORYH RASPOLOZHENY NA DVUH SMEZHNYH UROVNYAH) %% 538 I \emph{PROIZVOLXNYMI} BINARNYMI DEREVXYAMI. pO|TOMU UMESTNO SPROSITX, KAK DALEKO MOZHET OTKLONITXSYA OT OPTIMALXNOSTI SBALANSIROVANNOE DEREVO? oKAZYVAETSYA, CHTO DLINA EGO POISKOVOGO PUTI .NIKOGDA NE PREVYSIT OPTIMUM BOLEE CHEM NA 45\%. \proclaim tEOREMA a. (g. m. aDELXSON-vELXSKIJ I e. m. lANDIS). vYSOTA SBALANSIROVANNOGO DEREVA S $N$ VNUTRENNIMI UZLAMI ZAKLYUCHENA MEZHDU $\log_2(N+1)$ I $1.4404 \log_2(N+ 2)-0.328$. \proof\ bINARNOE DEREVO VYSOTY $h$, OCHEVIDNO, NE MOZHET SODERZHATX BOLEE CHEM $2^h$ VNESHNIH UZLOV; PO|TOMU $N+1\le 2^h$, T.E. $h\ge \lceil \log_2(N+1)\rceil$. chTOBY NAJTI MAKSIMALXNOE ZNACHENIE $h$, POSTAVIM VOPROS PO-DRUGOMU: KAKOVO MINIMALXNOE CHISLO UZLOV V SBALANSIROVANNOM DEREVE VYSOTY $h$? pUSTX $T_h$--- TAKOE DEREVO S NAIMENXSHIM VOZMOZHNYM KOLICHESTVOM UZLOV; TOGDA ODNO PODDEREVO KORNYA, NAPRIMER LEVOE, IMEET VYSOTU $h-1$, A DRUGOE---ILI $h-1$, ILI $h-2$. v SILU OPREDELENIYA $T_h$ MOZHNO SCHITATX, CHTO LEVOE PODDEREVO KORNYA ESTX $T_{h-1}$, A PRAVOE---$T_{h-2}$. tAKIM OBRAZOM, SREDI VSEH SBALANSIROVANNYH DEREVXEV VYSOTY $h$ NAIMENXSHEE KOLICHESTVO UZLOV IMEET \emph{FIBONACHCHIEVO DEREVO} PORYADKA $h+1$. (sM. OPREDELENIE DEREVXEV fIBONACHCHI V P.~6.2.1.) iTAK, $$ N\ge F_{h+2}-1 > \phi^{h+2}/\sqrt{5}-2, $$ I TREBUEMYJ REZULXTAT POLUCHAETSYA TAK ZHE, KAK SLEDSTVIE IZ TEOREMY 4.5.3F. \proofend mY VIDIM, CHTO POISK V SBALANSIROVANNOM DEREVE POTREBUET BOLEE 25 SRAVNENIJ, TOLXKO ESLI DEREVO SOSTOIT IZ PO KRAJNEJ MERE $F_{27}-1= 196417$ UZLOV. rASSMOTRIM TEPERX, CHTO PROISHODIT, KOGDA NOVYJ UZEL VSTAVLYAETSYA V SBALANSIROVANNOE DEREVO POSREDSTVOM ALGORITMA 6.2.2t. dEREVO NA RIS.~20 OSTAETSYA SBALANSIROVANNYM, ESLI NOVYJ UZEL ZAJMET MESTO ODNOGO IZ UZLOV \leaf{4}, \leaf{5}, \leaf{B}, \leaf{7}, \leaf{10} ILI \leaf{13}, NO V DRUGIH SLUCHAYAH POTREBUETSYA NEKOTORAYA KORREKTIROVKA. tRUDNOSTI VOZNIKAYUT, ESLI IMEETSYA UZEL S POKAZATELEM SBALANSIROVANNOSTI $+1$, PRAVOE PODDEREVO KOTOROGO POSLE VSTAVKI STANOVITSYA VYSHE, ILI ESLI POKAZATELX SBALANSIROVANNOSTI RAVEN $-1$ I VYSHE. STANOVITSYA LEVOE PODDEREVO. lEGKO PONYATX, CHTO, V SUSHCHNOSTI, NAS BESPOKOYAT LISHX DVA SLUCHAYA: \picture{sLUCHAI VSTAVKI V avl-DEREVO} %% 539 (dRUGIE "PLOHIE" SLUCHAI MOZHNO POLUCHITX, ZERKALXNO OTRAZIV |TI DIAGRAMMY OTNOSITELXNO VERTIKALXNOJ OSI.) bOLXSHIMI PRYAMOUGOLXNIKAMI $\alpha$, $\beta$, $\gamma$, $\delta$ OBOZNACHENY PODDEREVXYA S SOOTVETSTVUYUSHCHIMI VYSOTAMI. sLUCHAJ 1 IMEET MESTO, ESLI NOVYJ |LEMENT UVELICHIL VYSOTU PRAVOGO PODDEREVA UZLA $B$ S~$h$ DO~$h+1$, A SLUCHAJ 2---KOGDA NOVYJ |LEMENT UVELICHIVAET VYSOTU LEVOGO PODDEREVA UZLA $B$. vO VTOROM SLUCHAE MY IMEEM LIBO $h=0$ (I TOGDA SAM UZEL $X$ YAVLYAETSYA NOVYM UZLOM), LIBO UZEL $X$ IMEET DVA PODDEREVA S SOOTVETSTVENNYMI VYSOTAMI $(h-1, h)$ ILI $(h,h--l).$ pROSTYE PREOBRAZOVANIYA VOSSTANAVLIVAYUT BALANS V OBOIH SLUCHAYAH, SOHRANYAYA V TO ZHE VREMYA SIMMETRICHNYJ PORYADOK UZLOV $A$, $B$ I $X$. \picture{pOVOROTY} v SLUCHAE 1 MY PROSTO POVORACHIVAEM DEREVO NALEVO, PRIKREPLYAYA $\beta$ K $A$ VMESTO $B$. eTO PREOBRAZOVANIE PODOBNO PRIMENENIYU ASSOCIATIVNOGO ZAKONA K ALGEBRAICHESKOJ FORMULE, KOGDA MY ZAMENYAEM $\alpha (\beta\gamma)$ NA $(\alpha\beta)\gamma$. v SLUCHAE 2 |TO PRODELYVAETSYA DVAZHDY: SNACHALA $(X,B)$ POVORACHIVAETSYA NAPRAVO, ZATEM $(A,X)$---NALEVO. v OBOIH SLUCHAYAH NUZHNO IZMENITX V DEREVE LISHX NESKOLXKO SSYLOK. dALEE NOVYE DEREVXYA IMEYUT VYSOTU $h+2$, V TOCHNOSTI TU ZHE, CHTO I DO VSTAVKI |LEMENTA; SLEDOVATELXNO, CHASTX DEREVA, RASPOLOZHENNAYA NAD UZLOM $A$ (ESLI TAKOVAYA IMEETSYA), OSTAETSYA SBALANSIROVANNOJ. \picture{dEREVO RIS. 20, SBALANSIROVANNOE POSLE VSTAVKI NOVOGO KLYUCHA R} %% 540 nAPRIMER, ESLI MY VSTAVLYAEM NOVYJ UZEL NA MESTO \leaf{17} (RIS.~20), TO POSLE POVOROTA POLUCHIM SBALANSIROVANNOE DEREVO, IZOBRAZHENNOE NA RIS.~21 (SLUCHAJ 1). zAMETXTE, CHTO NEKOTORYE IZ POKAZATELEJ SBALANSIROVANNOSTI IZMENILISX. dETALI |TOJ PROCEDURY VSTAVKI MOZHNO RAZRABOTATX RAZLICHNYMI SPOSOBAMI. nA PERVYJ VZGLYAD BEZ VSPOMOGATELXNOGO STEKA NE OBOJTISX, TAK KAK NEOBHODIMO ZAPOMINATX UZLY, KOTORYE BUDUT ZATRONUTY VSTAVKOJ. nIZHE PRIVODITSYA ALGORITM, V KOTOROM, PRIBEGNUV K MALENXKOJ HITROSTI, MY OBHODIMSYA BEZ STEKA, VYIGRYVAYA PRI |TOM V SKOROSTI. \alg a.(pOISK, S VSTAVKOJ PO SBALANSIROVANNOMU DEREVU.) iMEETSYA TABLICA ZAPISEJ, OBRAZUYUSHCHIH SBALANSIROVANNOE BINARNOE DEREVO. aLGORITM POZVOLYAET PROIZVESTI POISK DANNOGO ARGUMENTA $K$. eSLI $K$ V TABLICE NET, V PODHODYASHCHEM MESTE V DEREVO VSTAVLYAETSYA NOVYJ UZEL, SODERZHASHCHIJ $K$. pRI NEOBHODIMOSTI PROIZVODITSYA BALANSIROVKA DEREVA. pREDPOLAGAETSYA (KAK I V ALGORITME 6.2.2t), CHTO UZLY SODERZHAT POLYA |KEY|, |LLINK| I |RLINK|. kROME TOGO, IMEETSYA NOVOE POLE |B(P)| = POKAZATELX SBALANSIROVANNOSTI UZLA |NODE(P)|, T. E. RAZNOSTX VYSOT PRAVOGO I LEVOGO PODDEREVXEV; |TO POLE VSEGDA SODERZHIT $+1$, $0$ ILI~$-1$. pO ADRESU |HEAD| RASPOLOZHEN SPECIALXNYJ GOLOVNOJ UZEL; |RLINK (HEAD)| UKAZYVAET NA KORENX DEREVA, a |LLINK (HEAD)| ISPOLXZUETSYA DLYA HRANENIYA POLNOJ VYSOTY DEREVA. dLYA DANNOGO ALGORITMA VYSOTA NE IMEET ZNACHENIYA, NO ZNANIE EE POLEZNO DLYA PROCEDURY KONKATENACII, OBSUZHDAYUSHCHEJSYA NIZHE. mY PREDPOLAGAEM, CHTO DEREVO \emph{NEPUSTO}, T.~E. CHTO |RLINK (HEAD)\NE \NULL|. v CELYAH UDOBSTVA OPISANIYA V ALGORITME ISPOLXZUETSYA OBOZNACHENIE |LINK (A, r)| KAK SINONIM |LLINK (r)| PRI $A=-1$ I KAK SINONIM |RLINK (r)| PRI $a=+1$. \st[nACHALXNAYA USTANOVKA.] uSTANOVITX $|t|\asg |HEAD|$, $|S|\asg |P|\asg |RLINK (HEAD)|$. [uKAZATELXNAYA PEREMENNAYA |P| BUDET DVIGATXSYA VNIZ PO DEREVU; |S| BUDET UKAZYVATX NA MESTO, GDE MOZHET POTREBOVATXSYA BALANSIROVKA; |T| VSEGDA UKAZYVAET NA OTCA |S|.] \st[sRAVNENIE.] eSLI $K<|KEY(P)|$, TO PEREJTI NA \stp{3}; ESLI $K>|KEY(P)|$, TO PEREJTI NA \stp{4}; ESLI $K=|KEY(P)|$, POISK UDACHNO ZAVERSHEN. \st[shAG VLEVO.] uSTANOVITX $|Q|\asg |LLINK (r)|$. eSLI $|Q|=|\NULL|$, VYPOLNITX $|Q|\Asg|AVAIL|$ I $|LLINK(P)|\asg|Q|$; ZATEM IDTI NA \stp{5}. v PROTIVNOM SLUCHAE, ESLI $|B(Q)|\NE|0|$, USTANOVITX $|T|\asg|r|$ I $|S| \asg |Q|$. nAKONEC, USTANOVITX $|P|\asg|Q|$ I VERNUTXSYA NA \stp{2}. \st[shAG VPRAVO.] uSTANOVITX $|Q|\asg |RLINK (r)|$. eSLI $|Q|=|\NULL|$, VYPOLNITX $|Q|\Asg|AVAIL|$ I $|RLINK (r)|\asg |Q|$; ZATEM IDTI NA \stp{5}. %% 541 v PROTIVNOM SLUCHAE, ESLI $|B|(|Q|)\NE 0$, USTANOVITX $|t|\asg |r|$ I $|S|\asg |Q|$. nAKONEC, USTANOVITX |P\asg Q| I VERNUTXSYA NA \stp{2}. (pOSLEDNYUYU CHASTX |TOGO SHAGA MOZHNO OB®EDINITX S POSLEDNEJ CHASTXYU SHAGA \stp{3}.) \st[vSTAVKA.] (mY TOLXKO CHTO PRISOEDINILI NOVYJ UZEL |NODE (Q)| K DEREVU; TEPERX EGO POLYA NUZHDAYUTSYA V NACHALXNOJ USTANOVKE.) uSTANOVITX $|KEY|(|Q|)\asg |K|$, $|LLINK(Q)|\asg |RLINK(Q)|\asg\NULL$, $|B(Q)|\asg 0$. \st[kORREKTIROVKA POKAZATELEJ SBALANSIROVANNOSTI.] (tEPERX NULEVYE POKAZATELI SBALANSIROVANNOSTI MEZHDU |S| I |Q| NUZHNO ZAMENITX NA $\pm1$.) eSLI $K<|KEY(S)|$, USTANOVITX $|R|\asg |P| \asg |LLINK(S)|$; V PROTIVNOM SLUCHAE USTANOVITX $|R|\asg |r| \asg |RLINK(S)|$. zATEM NUZHNO 0 ILI BOLEE RAZ POVTORYATX SLEDUYUSHCHUYU OPERACIYU, POKA |P| NE STANET RAVNYM |Q|: ESLI $K<|KEY(P)|$, USTANOVITX $|B(P)|\asg -1$ I $|P|\asg |LLINK(P)|$; ESLI $K > |KEY(P)|$, USTANOVITX $|B(P)|\asg +1$ I $|P|\asg |RLINK (r)|$. (eSLI $K= |KEY(r)|$, ZNACHIT, $|P|=|Q|$, I MOZHNO PEREJTI K SLEDUYUSHCHEMU SHAGU.) \st[pROVERKA SBALANSIROVANNOSTI.] eSLI $K<|KEY (S)|$, USTANOVITX $a\asg -1$; V PROTIVNOM SLUCHAE $a\asg +1$. tEPERX VOZMOZHNY TRI SLUCHAYA: \medskip \item{i)} eSLI $|v (S)| = 0$ (DEREVO STALO VYSHE), USTANOVITX $|v (S)|\asg a$, $|LLINk (HEAD)| \asg |LLINk(HEAD)| + 1$; ALGORITM ZAVERSHEN. \item{ii} eSLI $|B(S)|=-a$ (DEREVO STALO BOLEE SBALANSIROVANNYM), USTANOVITX $|B(S)|\asg 0$; ALGORITM ZAVERSHEN. \item{iii)} eSLI $|B(S)|=a$ (DEREVO PERESTALO BYTX SBALANSIROVANNYM), PRI $|B(R)|=a$ IDTI NA \stp{8}, PRI $|B(R)|=-a$ IDTI NA \stp{9}. \medskip \noindent(sLUCHAJ (iii) SOOTVETSTVUET SITUACII, IZOBRAZHENNOJ NA DIAGRAMME (1), PRI $a=+1$; |S| I |R| UKAZYVAYUT SOOTVETSTVENNO NA UZLY $A$ I $B$, a $|LINK|(-a, |S|)$ UKAZYVAET NA $\alpha$ I T.D.) \st[oDNOKRATNYJ POVOROT.] uSTANOVITX $|P|\asg |R|$, $|LINK| (a, |S|)\asg |LINK|(-a, |R|)$, $|LINK|(-a, |R|)\asg |S|$, $|B|(|S|)\asg |B|(|R|)\asg 0$. pEREJTI NA \stp{10}. \st[dVUKRATNYJ POVOROT.] uSTANOVITX $|P|\asg |LINK|(-a, |R|)$, $|LINK|(-a, |R|)\asg |LINK|(a, |P|)$, $|LINK|(a, |P|)\asg |R|$, $|LINK|(a, |S|)\asg |LINK|(-a, |P|)$, $|LINK|(-a, |P|)\asg |S|$. tEPERX USTANOVITX $$ (|B|(|S|), |B|(|R|))\asg \cases{ (-a, 0), & ESLI $|B|(|P|)=a$;\cr ( 0, 0), & ESLI $|B|(|P|)=0$;\cr (0, a), & ESLI $|B|(|P|)=-a$;\cr } \eqno(3) $$ ZATEM $|B|(|P|)\asg 0$. \st[pOSLEDNIJ SHTRIH.] [mY ZAVERSHILI BALANSIRUYUSHCHEE PREOBRAZOVANIE OT (1) K (2), |P| UKAZYVAET NA NOVYJ KORENX, %% 542 A |t|---NA OTCA STAROGO KORNYA.] eSLI $|S|=|RLINK(T)|$, TO USTANOVITX $|RLINK(T)|\asg |P|$; V PROTIVNOM SLUCHAE $|LLINK(T)|\asg |P|$. \algend eTOT ALGORITM DOVOLXNO DLINNYJ, NO RAZDELYAETSYA NA TRI PROSTYE CHASTI: SHAGI a1--a4 (POISK), SHAGI a5--a7 (VSTAVKA NOVOGO UZLA), SHAGI a8--a10 (BALANSIROVKA DEREVA, ESLI ONA NUZHNA). \picture{22. pOISK S VSTAVKOJ PO SBALANSIROVANNOMU DEREVU} mY ZNAEM, CHTO DLYA RABOTY ALGORITMA TREBUETSYA OKOLO $C\log N$ EDINIC VREMENI PRI NEKOTOROM $C$, NO CHTOBY ZNATX, PRI KAKIH $N$ VYGODNO ISPOLXZOVATX SBALANSIROVANNYE DEREVXYA, NUZHNO OCENITX VELICHINU $C$. aNALIZ SLEDUYUSHCHEJ \MIX-PROGRAMMY POZVOLYAET PODOJTI K RESHENIYU |TOGO VOPROSA. \prog a.(pOISK S VSTAVKOJ PO SBALANSIROVANNOMU DEREVU.) eTA REALIZACIYA ALGORITMA a ISPOLXZUET SLEDUYUSHCHIJ FORMAT UZLOV DEREVA: \picture{fORMAT UZLA avl-DEREVA} %% 543 $|rA|\equiv K$, $|rI1|\equiv|P|$, $|rI2|\equiv |Q|$, $|rI3|\equiv |R|$, $|rI4|\equiv S$, $|rI5|\equiv |t|$. pROGRAMMA DLYA SHAGOV a7--a9 DUBLIRUETSYA, TAK CHTO VELICHINA $a$ V YAVNOM VIDE V PROGRAMME NE FIGURIRUET. \code B &EQU &0:1 LLINK &EQU &2:3 RLINK &EQU &4:5 START &LDA &k & 1 &A1. nACHALXNAYA USTANOVKA. &ENT5 &HEAD & 1 &$|t|\asg |HEAD|$. &LD2 &0,5 (RLINK) & 1 &$|Q|\asg |RLINK(HEAD)|$. &JMP &2F & 1 &nA a2 S $|S|\asg |P| \asg |Q|$ 4n &LD2 &0,1 (RLINK) & s2 &a4. shAG VPRAVO. $|Q|\asg |RLINK(P)|$ &J2Z &5F & s2 &nA a5, ESLI $|Q|=\NULL$. 1n &LDX &0,2 (v) & C-1 &$|rX|\asg |B(Q)|$. &JXZ &*+3 & C-1 &pEREHOD, ESLI $|B(Q)|=0$. &ENT5 &0,1 & D-1 &$|T|\asg |P|$. 2H &ENT4 &0,2 & D &$|S|\asg |Q|$. &ENT1 &0,2 & s &$|P|\asg |Q|$. &CMPA &1,1 & s &a2. sRAVNENIE. &JG &4v & s &nA a4,ESLI $K>|KEY(P)|$. &JE &SUCCESS & s1 &vYHOD, ESLI $k=|KEY(r)|$. &LD2 &0,1 (LLINK) & C1-S &A3. shAG VLEVO. $|Q|\asg |LLINK(r)|$. &J2NZ &1v & C1-S &pEREHOD, ESLI $|Q|\ne\NULL$. \noalign{20--29 5n (SKOPIROVATX ZDESX STROKI 14---23 PROGRAMMY 6.2.2 t) a5. vSTAVKA.} 6H &CMPA &1,4 & 1-S &A6. KoppeKT. POKAZAT. SBALANSIR. &JL &*+3 & 1-S &pEREHOD, ESLI $K< |KEY(S)|$. &LDS &0,4 (RLINK) & E &$|R|\asg |RLINK(S)|$. &Jmr &*+2 & E &LD3 &0,4 (LLINK) & 1-S-E &$|R|\asg |LLINK(S)|$. &ENT1 &0,3 & 1-S &$|P|\asg |R|$. &ENTX &-1 & 1-S &$|rX|\asg -1$. &JMP &1F & 1-S &nA CIKL SRAVNENIYA. 4n &JE &7F &F2+1-S &nA a7, ESLI $K=|KEY(P)|$. &STX &0,1 (1:1) & F2 &$|B(P)|\asg +1$ (ON BYL $+0$). &LD1 &0,1 (RLINK) & F2 &$|P|\asg |RLINK(P)|$. 1n &CMPA &1,1 &F+1-S &JGE &4B &F+1-S &pEREHOD, ESLI $k \ge |KEY (P)|$. &STX &0,1 (v) & F1 &$|v(r)|\asg -1$. &LD1 &0,1 (LLINK) & F1 &$|P|\asg |LLINK(P)|$. &JMP &1B & F1 &nA CIKL SRAVNENIYA. 7n &LD2 &0,4(B) & 1-S &A7. pROVERKA SBALANSIR. $|rI2|\asg |B(S)|$. &STZ &0,4 (v) & 1-S &$|B(S)|\asg 0$. &CMPA &1,4 &1-S &JG &A7R &1-S &nA $a=+1$ PODPROGRAMMU, ESLI $K>|KEY(S)|$. \endcode (ZDESX ESHCHE KOD V 2 KOLONKI --- PRIDELATX) % 50--68 %A7L J2P DONE A7R J2N DONE 1-S vYHOD, ESLI $|rl2|=-a$. % J2Z 7F J2Z 6F G+J pEREHOD, ESLI |B(S)| BYL NULEM. % ENT1 0,3 ENT1 0,3 G $|P|\asg|R|$. % LD2 0,3 (v) LD2 0,3 (v) G $|rI2|\asg |B(R)|$. % J2N A8L J2P A8R G nA. a8, ESLI $|rI2|=a$. \bye