You are on page 1of 29

3.

Keresfk
Vagy tallunk utat, vagy ptnk egyet.
HANNIBL

Az egyik legalapvetbb adatkezelsi igny, hogy adatok vges halmazait hatkonyan trolni tudjuk. Hatkonysgon elssorban az rtend, hogy a keress, beilleszts, trls s mdosts mveletei gyorsak legyenek. Ebben a fejezetben a problmnak azzal a fontos specilis esetvel foglalkozunk, amikor a trolt S halmaz elemei egy (U, <) rendezett tpusbl valk. Ebben az esetben tovbbi termszetes ignyek is felmerlnek: rdekelhet bennnket az S legkisebb vagy ppen legnagyobb eleme, esetleg az 5-nek az [a, b) intervallumba es elemei (a, b G U). Az gy krvonalazott feladatcsokornak megfelel adatszerkezet a keresfa, amihez egyetlen (U, <) rendezett tpus tartozik. A szerkezet clja az U egy vges S rszhalmazt trolni gy, hogy BESZR, TRL, KERES, MIN, MAX, TOLIG hatkonyak legyenek. Ebben a megkzeltsben jelents egyszersts van. A legtbb esetben a trolni kvnt adataink sszetett szerkezetek, tbb klnbz tpus informcielembl llnak. Ezek kzl ltalban egy vagy csak nhny adja a keress/trols alapjt jelent kulcsot. A tertkre kerl algoritmusok szempontjbl azonban elgg kzmbs, hogy a kulcs mellett vannak-e mg tovbbi adatmezk is. A legtbb esetben mit sem vesztnk azzal, ha feltesszk, hogy csupn U bizonyos elemeit kell trolnunk. Ezzel az egyszerstssel lehetv vlik, hogy csak az algoritmikus szempontbl lnyeges tnyezkre figyeljnk. A mveletek pontos rtelmezsben - elssorban a kivtelek kezelsnl tbbfle vltozattal tallkozhatunk. Ezeket nem clunk itt ttekinteni; csak a mveletekhez kapcsold jellegzetes teendkrl ejtnk szt. A BESZR(x, S) eljrs(hvs) beilleszti az x < S U elemet a trolt S halmazba. TRLJ, S) hatsra x kikerl az S halmazbl. KERES, S) megadja

58

3. KERESFK

az x elem helyt az S-ben, feltve, hogy x e S. MIN(S) megadja az 5-nek a < rendezs szerinti legkisebb, MAX(S) pedig a legnagyobb elemt. Az intervallumkeressnek az S halmaz mellett van mg kt paramtere. Ezek az U elemei; jelljk ket a-val s 6-vel. TLIG(a, 6, 5) eredmnye azon s S elemek sszessge, melyekre teljesl, hogy a < s < b. Az adatszerkezet nevben a fa sz arra hivatott utalni, hogy a legjobb ismert implementcik fkra plnek, faszer struktrkat hasznlnak. Mieltt ezekbl a megoldsokbl ismertetnnk egy csokorra valt, egy kis kitrt tesznk, rgztve nhny binris fkra vonatkoz tnyt.

3.1. Binris fk
Binris fkkal mr tallkoztunk az elz fejezetben a kupac adatszerkezet kapcsn. Ott rintettk egy trolsi mdjukat is, ami csak bizonyos specilis, tereblyes fkra mkdik. Itt egy ltalnosan hasznlhat megadsi mdot szeretnnk bemutatni. Ebben a fa egy cscsa sszetett szerkezet; gy gondolhatunk r, mint egy rekord-tpus objektumra mondjuk a Pascal nyelvbl. Ai x cscs fontosabb sszetevi, mezi" a kvetkezk: elem(x) az x cscsban trolt rdemi informci; ez a ksbbiekben legtbbszr egy [/-bli kulcs lesz. A bal(x) mez egy mutat az x cscs bal fira, jobb(x) pedig a jobboldali fira. A mdszerek trgyalsakor ezeket a mutatkat olykor azonostani fogjuk a mutatott csccsal. Nagyjbl ennyi tartozik a binris fk alapvet reprezentcijhoz. Bizonyos esetekben tovbbi mezk is hasznosak lehetnek. Ilyen pldul az x cscs apjra mutat apa(x) mez vagy az x-bl s leszrmazottaibl ll rc-gyker rszfa cscsainak szmt tartalmaz s(x) mez. Plda: A kvetkez bra egy binris ft mutat; a trolt elemeket - ezek szmok s mveleti jelek - a cscsokba rtuk. Jellje x- a fa gykert, y pedig a 9-et tartalmaz cscsot. rvnyesek a kvetkezk: bal{jobb(x)) y, apa{apa{y)) = x, elem(bal(x)) = * s s(x) = 7.

A fejezetben fontos szerep jut majd a fk alakjnak. Mint ltni fogjuk, azok a fk lesznek hasznosak, amelyek elgg telt alakak. Ebbl a szempontbl azok

j . BINRIS

FK

59

fk idelisak, melyeknek a szintjeik szmhoz kpest a lehet legtbb cscsuk van. Ha a szintek szma /, akkor ez 2l 1 cscsot jelent. Az ilyen fkat ebben a rszben teljes fknak fogjuk nevezni. Ez nmikpp eltr a kupac adatszerkezetnl bevezetett hasznlattl. A terminolgiai kettssget azrt vllaljuk, mert elgg ltalnos a szakirodalomban. A mostani meghatrozs szerinti teljes fk gy jellemezhetk, hogy minden levelk ugyanazon a szinten helyezkedik el, s minden bels cscsuknak kt fia van.
a

A binris fk alkalmazsainl fontos szerepet jtszanak az olyan mdszerek - bejrsok - amelyek valamilyen rtelmes sorrendben vgigmennek a fa cscsain. ltalban arrl van sz, hogy amikor a bejrs sorn az y cscs kerl sorra, akkor valami y-nal kapcsolatos teendt vgznk el (pl. kinyomtatjuk a benne trolt informcit). A bejrsokat e teendtl fggetlenl rdemes trgyalni, ezrt egyszeren csak azt mondjuk, hogy megltogatjuk y-t. A legismertebb bejr mdszerek a preorder, inorder s postorder bejrsok. Itt kvetkezik a rekurzv defincijuk; x jelli a fa gykert, az eljrsok nevei pedig pre(), in() s post(). pre(x) begin ltogat(x); pre(bal(x)); pre(jobb(x)) end in(x) begin in(bal(x)); ltogat (x); m(jobb(x)) end post(.-r) begin post(bal(x)); post(jobb(x)); ltogat(x) end

A hrom eljrs csak a ltogat(x); helyben klnbzik egymstl. A preorder bejrs elszr megltogatja a gykeret, majd rekurzve hvja nmagt elszr a bal, majd a jobb rszfra. Az inorder bejrsnl a ltogats a kt nhvs kz kerlt, a postorder-mdszernl pedig a hvsok mg. rjuk le az elz plda fjban lev elemeket abban a sorrendben, ahogy az eljrsok megltogatjk a cscsokat! preorder sorrend: + * 85 96; inorder sorrend: 8 * 5 + 9 - 6 , megfelelen zrjelezve: (8 * 5) + (9 - 6); postorder sorrend: 85 * 96 - +. Az egyes sorrendek a fa ltal meghatrozott aritmetikai kifejezs klnbz rsmdjainak felelnek meg. A kzps, az inorder sorrend adja a szoksos rsmdot. Nzzk most a mdszerek kltsgt. Elg a preorder bejrsra szortkozni; a msik kett ugyangy kezelhet. Tekintsk egysgnyinek a pre(i/)-hvs kezdsvel s befejezsvel jr kltsgeket; itt y a fa egy tetszleges cscsa. Ugyancsak legyen 1 a bal(y) s jobb(y) mutatk mentn val lps, valamint ltogat{y)

60

3. KERESFK

idignye. Jellje T(n) a mdszer maximlis kltsgt legfeljebb n-pont fkra. Feltehetjk, hogy T(0) = 0 s a rekurzi alapjn
T(n) < c + max {T(') + T(n 0<i<n 1 - 1 a)}.

A msodik tag a kt rekurzv hvs kltsge, az els pedig a hvsokon kvli munka idignyt becsl n-tl fggetlen c lland. Egyszer indukcival addik innen, hogy T(n) < cn. Ez ugyanis nyilvn igaz, ha n = 0. Nagyobb n-ekre pedig az indukcis feltevs szerint T(n) < c + max {ci + c(n 1 - i)} = c + c(n 1) = cn.
0<i<n1

A bejrsok teht 0(n), azaz lineris idben megvalsthatk. Feladat: Tegyk fel, hogy adott az / szintbl ll / binris fa y cscsa. Javasoljunk 0(1) kltsg mdszert a preorder (inorder, postorder) sorrendben az y utn kvetkez cscs megtallsra.
f

3.2. Binris keresfk, naiv algoritmusok


A keresfa adatszerkezet megvalstsai kzl els helyre kvnkoznak a binris keresfk. Ezek legfbb kzs vonsa, hogy a trolni kvnt S C U halmaz elemei egy binris fa cscsaiban helyezkednek el, cscsonknt pontosan egy elem. Teljesl ezen fell a keresfa-tulajdonsg: Tetszleges x cscsra s az x baloldali rszfjban lev y cscsra igaz, hogy elem(y) < elem(x). Hasonlan, ha z egy cscs az x jobb rszfjbl, akkor elem(x) < elem(z). Egy knyelmes megllapods: a tovbbiakban feltesszk, hogy nincsenek ismtld elemek a keresfban. Ez a megllapods jelentsen egyszersti a mdszerek lerst, a bennk lev gondolatok rzkeltetst. Az algoritmusok, amiket trgyalni fogunk, kisebb-nagyobb mdostsokkal mkdnek akkor is, ha megengedjk az ismtldseket. A hatkonysguk viszont romlik, ha bizonyos elemekbl tl sok pldny van; gondoljunk arra, hogy milyen hasznlhatatlan lenne a telefonknyv, ha mindenkinek ugyanaz lenne a neve. A megllapodst figyelembe vve a keresfa-tulajdonsg kvetelmnyeiben szigor egyenltlensgeket rthetnk: az x bal rszfjban lev elemek kisebbek x elemnl, a jobb rszfban levk pedig nagyobbak annl. A kvetkez pldban az elemek termszetes szmok, a rendezs a szoksos. A fban trolt S halmaz {1,2,4,6,8,9}.

32.

BINRIS KERESFK, NAIV ALGORITMUSOK

61

Feladat: Igazoljuk, hogy egy binris keresfa elemeit a fa inorder bejrsa nvekv sorrendben ltogatja meg. Keress binris keresfkban Tegyk fel, hogy az S binris keresfnak n cscsa s l szintje van, s legyen s g / . A KERES (s, S) els lpsben sszehasonltjuk S gykernek s' elemt s-sel. Ha s = s', akkor megtalltuk a keresett cscsot (elemet). Ha s < s', akkor a keresfa-tulajdonsg miatt a bal, ha s > s', akkor a jobb rszfba megynk tovbb, ismtelve a fenti lpst. Az elz plda fjnl a KERES (4, S) a gykrnl balfel lp, hiszen 4 < 6, utna jobbra, mert 4 > 2; vgl megtalljuk a keresett elemet. Ugyanezt az utat jrjuk be a KERES (5, S) kapcsn. A ngyest tartalmaz levlnl kiderl, hogy a krdses elem nincs a fban, hiszen eddig nem talltuk meg, s mr nem tudunk tovbblpni. Egy sszehasonlts s egy mutat mentn megtett lps rn az eredetinl egy szinttel alacsonyabb fban folytathatjuk a keresst. Ebbl kvetkezik, hogy a mdszer kltsge arnyos a szintek szmval: 0(1). A MIN s MAX mveletek is elgg egyszerek. Az elbbinl addig megynk a gykrtl balra a fban, amg lehetsges, az utbbinl pedig a jobboldali irnyt tntetjk ki figyelmnkkel. E kt eljrs kltsge is 0(1). A TLIG(o, b, S) hvs az S halmaz a s b kz es kulcsait hivatott sszegyjteni. Evgbl KERES (a, S) segtsgvel megkeressk a szban forg intervallum elejt, majd inorder sorrendben ellpdelnk az utols olyan kulcsig, ami m g nem nagyobb, mint b. Az inorder lpkedshez hasznos a cscsokban egy mutat - gynevezett inorder fonal - az inorder bejrs szerinti kvetkez cscsra. Ha vannak ilyen mutatink, akkor TLIG(a, b, S) kltsge 0(1 + k), ahol k az S a es b kz es elemeinek a szma. Ha nincsenek inorder fonalaink, akkor inorder bejrssal 0(n) idben kaphatjuk meg a kvnt eredmnyt. JNaiv mdszerek beszrsra s trlsre klnfle binris keresfa-tpusok kztt a dnt klnbsg a beszrs s a trls algoritmusaiban van. Itt a legegyszerbb, az gynevezett naiv mdszereket futatjuk be. A BESZR(s, S) s TRL(s, S) vgrehajtsa is egy KERES(s, S)
A

62

3.

KERESFK

hvssal kezddik. Beszrskor a beillesztend s elem helyt kell megkeresni Sben, a TRL(s, S) esetn pedig a trlend s elemet. BESZR(s,5) vgrehajtsakor a keress utn nincs teendnk, ha mr van olyan x cscsa a fnak, melyre elem(x) = s. Ellenkez esetben a keress gy r vget, hogy nem tudunk tovbblpni a cscsbl, ahol vagyunk. A megfelel (jobb, vagy bal) fi nincs a fban. A beszrst gy vgezzk el ezutn, hogy ezt a hinyz fit mint j levelet a fhoz adjuk. Az j cscs eleme s lesz. Knny meggondolni, hogy ezutn is rvnyben marad a keresfa-tulajdonsg. Az eljrs kltsge 0(1). Plda: Az elz S fba illesszk be j elemknt a hetest, vagyis hajtsuk vgre a BESZR(7, S) utastst. A keres fzisban arra jutunk, hogy a hetesnek a nyolcast tartalmaz cscs bal fiban volna a helye. Ilyen fi nincs a fban, ezzel bvteni kell a szerkezetet. Az eredmny:

Ami a trlst illeti, nincs rdemi teendnk, ha a szban forg s elem nincs a fban. Ellenkez esetben jellje x az 5-nek azt a cscst, amiben s l. Ezek utn TRL(s, S) knny, ha a szban forg x cscsnak legfeljebb egy fia van. Ekkor elegend, hogy x-et a fival helyettestjk: x <- fi(x). Ha viszont x-nek kt fia van, akkor ez az t nem jrhat; csak egyik fit tehetnnk x helyre, a msik rvn maradna. A megolds az lesz, hogy a feladatot visszavezetjk egy knny trlsre. Jellje y azt a cscsot, amiben az x bal rszfjnak a maximlis eleme van. Az x ismeretben y-t MAX(bal(x)) 0(1) kltsggel megadja. A recept ezutn egyszer. Az y-ban lev s' elemet tesszk s helyre x-be, majd trljk az y cscsot. Utbbi egy knny trlst jelent, mert y-nak nem lehet jobboldali fia. Azt is knny meggondolni, hogy az gy mdosult fra rvnyben marad a keresfatulajdonsg. Az s' defincija miatt kisebb az x jobb rszfjnak minden elemnl, s nagyobb a bal rszfa megmarad elemeinl. Az sszkltsg ekkor is 0(1). Plda: Az elz rajzon lthat S fbl trljk a nyolcast. Ez nehz trlsnek minsl, hiszen a szban forg x cscsnak kt fia van. Az x bal rszfjnak maximlis (s egyetlen) eleme 7. Ez kerl x-be; a hetest tartalmaz cscsot pedig kitrljk:

-.2. BINRIS KERESFK, NAIV ALGORITMUSOK

63

Naiv beszrsokkal ptett binris fk tlagos kltsge Ha egy binris fnak l szintje van, akkor a cscsok szmra n < l + 2 + 22 + --- + 2^-1 = 2l 1 addik, amibl l > log 2 (n + 1). A keress szempontjbl teht a legjobb - azaz legkisebb - szintszm, amit n-pont fnl elrhetnk, krlbell log2 n. A kvetkezkben rvet mutatunk amellett, hogy a naiv beszrsokkal ptett fk tlagos rtelemben nem rosszak; egy beilleszts tlagosan 0(log 2 n) sszehasonltsba kerl. A pontos modell a kvetkez: tegyk fel, hogy az U univerzum b\, < 2 < < bn elemeibl binris keresft ptnk. A bi elemeket egy vletlen I, . . . , an sorrendben szrjuk be a naiv mdszerrel a kezdetben res fba. Legyen T(n) a beszrsok sorn fellp sszehasonltsok tlagos szma. A T{n) mennyisggel szeretnnk mrni a fa ptsnek tlagos kltsgt. Az tlagot az elemek n! lehetsges rkezsi sorrendjre vesszk. Valsznsgi terminolgit hasznlva gy is fogalmazhatunk, hogy a b\, 6 2 , . . . , bn elemek minden rkezsi sorrendje egyenlen valszn. Ekkor tetszleges j-re i az eslye, hogy a\ = bj, hiszen mindegyik elem ppen ugyanannyi (nevezetesen (n - 1)!) rkezsi sorrendnl lesz els. Mindez azt jelenti, hogy 1 n T(n) = )
n *'

(*)

(az olyan fa tlagos kltsge, melyre 01 = bj).

Egy fa kltsgn a felptshez hasznlt sszehasonltsok szmt rtjk. Jellje F(j) a zrjelben lev tagot. Ha a\ = bj, akkor a keresfa-tulajdonsg miatt vgl az a\ bal rszfjban j - 1, a jobb rszfban pedig n j elem lesz.

64

3. KERESFK

Itt a baloldali rszfn belli sszehasonltsok szma T(j 1) lesz, amihez hozz kell adnunk a bj gykrrel val sszehasonltsokat. A bal rszfa tlagos kltsge teht j 1 + T(j - 1). Hasonl meggondolssal a jobb rszfa kltsge n j + T(n - j). A kettt sszegezve kapjuk, hogy F(j) = j 1 + T(j 1) + n j + T(n - j) = n - 1 + T(j - 1) + T(n - j). Mindezeket visszarhatjuk a (*) formulba. Hasznlva azt is, hogy az res fa ingyen van, azaz T(0) = 0, n > 0-ra a kvetkez rekurzit nyerjk:

r(n)=n-l+-J>).
j=o

2n _ 1

Vegyk szre, hogy ez megegyezik a gyorsrendezs elemzsekor kapott (+) rekurzival. Az ott taglalt mdon addik teht, hogy T{n) < 2n\nn + 0{n) 1, 39nlog 2 n + 0{n). Egy elem beszrshoz tlagosan teht legfeljebb 1,139 log2 n sszehasonlts elegend. A becsls rvnyes a keress tlagos kltsgre is. Hasonl mdszerekkel megmutathat, hogy az tlagos szintszm (azaz l vrhat rtke) is 0(logn). Ez nem rossz, ha figyelembe vesszk, hogy adott n mellett a legjobb, amit elrhetnk l = log 2 (n + 1). Ez akkor teljesl, ha a fa teljes (l szintje s sszesen 2l 1 cscsa van).

3.3.

2-3-fk

Ebben a szakaszban egy igen hatkony keresofa-konstrakcit mutatunk be. Ennek is fa a trolsi szerkezete, de a binrisnl valamivel bonyolultabb; egy nem-levl cscsnak 2 vagy 3 fia lehet. Innen szrmazik a szerkezet elnevezse. Egy kulcs (U eleme) a fa tbb cscsban is elfordulhat,, s egy cscsban egy vagy kt kulcs is lehet. gy rdemes elkpzelni a helyzetet, hogy U elemei egy rekordtpus kulcsai (pl. szemlyi szm egy szemlyi adatokat tartalmaz rekordban). A cl a rekordok hatkony elrse. Maguk a rekordok a fa legals szintjn helyezkednek el, a fa bels cscsai csak kulcsokat s mutatkat tartalmaznak (kivve, ha csak egy rekordunk van). A bels cscsokban lev kulcsok a levelekben trolt rekordok kulcsai kzl kerlnek ki. Szerepk az, hogy jelztblk mdjra segtsk a fban val kzlekedst. A 2-3-fa egy (lefel) irnytott gykeres fa, melyre igazak az albbiak: 1. A trolni kvnt rekordok a fa leveleiben helyezkednek el, a kulcs rtke szerint balrl jobbra nvekv sorrendben. Egy levl egy rekordot tartalmaz.

33.

2-3-FK

65

2 Minden bels (azaz nem levl) cscsbl 2 vagy 3 l megy lefel; ennek megfelelen a bels cscsok egy illetve kt s e U kulcsot tartalmaznak. A bels cscsok szerkezete teht ktfle lehet. Az egyik tpus gy brzolhat:
51

m2

52

m3

Itt m i , m2, "^3 mutatk a cscs rszfira, s, s 2 pedig C/-beli kulcsok, melyekre teljesl, hogy s < s 2 . Az mi ltal mutatott rszfa minden kulcsa kisebb, mint s 1 ( az m2 rszfjban s a legkisebb kulcs, s minden kulcs kisebb, mint s 2 . Vgl m 3 rszfjban s 2 a legkisebb kulcs. Elfordulhat, hogy egy cscsbl az utols kt mez hinyzik. A bels cscsoknak ez a tpusa valamivel egyszerbb alak:
mi
Sl

m2 |

Ez esetben a cscsnak csak kt rszfja van; a baloldaliban vannak az si-nl kisebb kulcs rekordok, a jobboldaliban pedig s a legkisebb kulcs. 3. A fa levelei a gykrtl egyforma tvolsgra vannak. A kvetkez llts a mveletek kltsgnek becslsekor lesz hasznos. Lnyegben azt mondja, hogy a fa szintjeinek szma bartsgosan alacsony a fban lev rekordok szmhoz mrten. llts: Ha fnak m szintje van, akkor a levelek szma legalbb 2 m _ 1 . Megfordtva, ha \S\ = n (itt S C U a fban trolt kulcsok halmaza; \S\ megegyezik a trolt rekordok szmval), akkor m < log 2 n + 1. Bizonyts: A 3. tulajdonsg szerint a fa -edik szintjn lev cscsok mind bels cscsok, ha 1 < i < m - 1. A 2. tulajdonsg szerint minden ilyen cscsnak legalbb kt fia van. Ezekbl knny indukcival addik, hogy az -edik szinten legalbb T~l cscs van (1 < i < m). Ezt i = m-re alkalmazva 2"1 < n, amibl logaritmusokat vve m - 1 < log 2 n. Keress 2-3-fkban A kulcsoknak a rszfkban val ilyen elosztsa lehetv teszi, hogy a binris fknl megismert mdszerhez hasonlan vgezzk a keresst. Legyen S egy 2-3-fa, s s < E U. A KERES(s,5) els lpseknt az s kulcsot sszehasonltjuk az S gykerben lev s s esetleg s 2 kulcsokkal. Ennek eredmnyekppen megtudjuk, hogy a hrom (vagy kt) rszfa kzl melyikben kell folytatni a keresst. Ha s < s, akkor az m i mutat mentn talljuk meg az rdekes rszfa gykert. Ha s i < s < s 2 , akkor a msodik mutatt kvetjk. Ha pedig 2 < s, akkor m 3

66

3.

KERESFK

mutatja a helyes irnyt. Termszetesen, ha S2 s 7773 hinyzik, akkor csak kt eset van: s < s\, illetve s < s. A keresst aztn ugyangy folytatjuk egy szinttel lejjebb. Legyen n a fban trolt rekordok szma, m pedig a fa szintjeinek a szma. Az elmondottak szerint szintenknt nem tbb, mint kt kulcs-sszehasonltssal, sszesen teht legfeljebb 2m-mel kiderthetjk, hogy a keresett rekord benne van-e a fban. Igenl vlasz esetn meg is talljuk az s kulcs rekordot. Az lltst figyelembe vve ltjuk, hogy az sszehasonltsok szma legfeljebb 2(log 2 n + 1); a tbbi kltsg arnyos ezzel. gy a keress sszkltsgre igen kedvez korltot kapunk: O(logn). A korlt minden esetben (teht nem csak tlagos rtelemben) rvnyes. Beszrs s trls A 2. s 3. kvetelmnyek igen szigoran szablyozzk a 2-3-fk alakjt. Ennek a kt tulajdonsgnak ksznhet a versenykpes keressi id. A beszrs s trls kapcsn a f gondot az jelenti, hogy megrizzk rvnyessgket. A mdszerek lnyeges tleteit pldkon keresztl mutatjuk be. Ennek sorn feltesszk, hogy U elemei nagybetk: A,B,C...,a szoksos rendezssel, f A BESZR(s, S) vgrehajtsa keresssel kezddik, s csak akkor van rdemi munka, ha nincs a fban s kulcs levl. Tegyk fel, hogy ez a helyzet, s jellje x a legals bels cscsot a keres t mentn. Tegyk fel, hogy x gy nz ki: m\

m2

Az m,\ ltal meghatrozott levl kulcsa legyen C (a msik levl szksgkppen J). Ha pldul s = K, akkor x gy mdosul: rri\ | J m2

m3

Az 7713 mutat fog az j levlre mutatni. Ha viszont s = I, akkor x tartalma a kvetkez lesz: rri\

777.3

7772

Ha s a legkisebb kulcsot is megelzi, mondjuk s = A, akkor x gy alakul:


7773

7771

777 2

Az j rekord beillesztse teht elg egyszer, ha x-nek csak kt fia van. Igazn rdekess akkor vlik a helyzet, ha a beszrs eltt x mr kt kulcsot tartalmaz. Tegyk fel, hogy x a legutbbi bra szerinti llapotban van, s nzzk,

3.3. 2-3-FK

67

mi a teend, ha most az s = H kulcs rekordot kell beilleszteni. Ekkor alkalmazzuk a cscsvgs elnevezs elegns tletet: az x mell egy tovbbi y cscsot vesznk. A kt cscs tartalma mz C m\
1714

m2

lesz. Az m\ fog a H kulcs rekordra mutatni. Ezutn az j y cscsot is a fba kell illeszteni. Ez azt jelenti, hogy az x apjba kell egy j kulcs-mutat prt tennnk. A beillesztend kulcs a hrom rintett (a kt rgi s az j) kzl mindig a nagysg szerint kzps. Ez a kulcs a jelen esetben H. Az egy szinttel feljebb trtn beszrst ugyanazzal a mdszerrel vgezzk, ahogy x-nl eljrtunk. Teht ha x apjnak csak kt gyermeke volt, akkor az egyszer gon fejezzk be a munkt. Ha nem, akkor itt is cscsvgst alkalmazunk. A cscsvgsok sora elgyrzhet esetleg a fa gykerig. Mi ilyenkor a teend? Tegyk fel, hogy az utols pldban x a fa gykere volt. (Ekkor az m, mutatk esetleg nagyobb rszfkra mutatnak.) A cscsvgs utn keletkez x s y rekordok fl egy j gykeret tesznk: m H m!

Itt m az x, m' pedig az y cscsra mutat. A fa szintjeinek szma eggyel ntt. A lnyeges mozzanat ebben, hogy a nvekeds a fa tetejn trtnt; ezltal megtartottuk a 2-3-fkkal kapcsolatos 3. kvetelmnyt. A gykrtl levlig men utak mindegyike hosszabb lett. A msodik kvetelmnyrl is gondoskodtunk: az eseteket vgignzve az olvas meggyzdhet arrl, hogy sehol sem hagytunk bels cscsot kettnl kevesebb gyermekkel. Nzzk mrmost a TRL(s, S) vgrehajtst. Legyen ismt x a legals bels cscs a keres t mentn. Ha x-nek hrom fia van, akkor az s kulcs levl trlse utn x-ben az rtelemszer vltoztatsokat elvgezve kszen vagyunk. Gondot jelent viszont, ha x-nek csak kt fia van. Ekkor a trls utn megsrlne a 2-3fkkal szembeni 2. kvetelmny, hiszen x-nek csak egy fia maradna. Mg mindig egyszer a dolgunk, ha x (valamelyik) szomszdos testvrnek 3 fia van; ekkor ugyanis ezek kzl egyet ttehetnk x-be. Csak x-et, adakoz kedv testvrt s az apjukat kell mdostani. Ezeket a mdostsokat elvgezve ismt kszen vagyunk. Mindezek nem lehetsgesek, ha x egyik szomszdos testvrnek sincs hrom rszfja. Ekkor hasznlhat a cscsvgs fordtottjt jelent gondolat, a cscssszevons. A cscssszevons lnyege, hogy x-et s az egyik testvrt egyetlen csccsal helyettestjk. Ennek a cscsnak hrom fia lesz. A cscssszevons kivitelezst is egy pldn keresztl mutatjuk be. Legyenek x s a fban szomszdos testvre, y az albbiak:

68
mi

3.

KERESFK

m2

m3

777.4

Legyenek az mi, illetve 7713 ltal mutatott levelek kulcsai A s K. (Az mo-hz s 7714-hez tartoz kulcsok szksgkppen J , illetve M.) Ha s = K a trlend kulcs, akkor az sszevons utn x gy nz ki.

7771

m-2

777.4

Az 7/ cscsot trljk. A K kulcsrtket s a hozz tartoz mutatt trlni kell x apjbl (trls egy szinttel feljebb). A tbbi hrom eset (azaz A vagy J vagy M trlse) hasonlan vgezhet. Cscssszevonshoz vezet trls utn egy szinttel magasabban is felmerl egy trlsi igny. Ezt az itt ismertetett mdon kezeljk. Ennek sorn is szksg lehet cscssszevonsra, ami trlst ignyel a nagyapk szintjn; s gy tovbb. A beszrsnl tapasztalt jelensghez hasonlan a trlsek is elgyrzhetnek egszen a gykrig. Kln figyelemre akkor van szksg, ha a trls utn a gykrnek csak egyetlen fia maradna. Pldul tegyk fel, hogy a gykr
lml

m2

alak, s trlnnk kell az L kulcsot s a hozz tartoz 7772 mutatt. Ekkor az m\ ltal mutatott rszfa gykere lesz az j gykr. A fa szintjeinek szma eggyel kevesebb lesz. A vltozs ismt a fa tetejn trtnt; ebbl knnyen kvetkezik, hogy a trls algoritmusa is megtartja a 2-3-fkkal kapcsolatos kvetelmnyeket. Mind a BESZR, mind a TRL kltsge O(logn), hiszen munkt csak a keres t cscsain, illetve azok kzvetlen szomszdain kell vgezni; tovbb egy cscsra konstans mennyisg sszehasonlts s mezmdosts jut. TLIG(a, b, S) megvalstsa hasonl a binris fknl trgyalt megoldshoz. Elszr megkeressk 5-ben a keressi intervallumba es legkisebb elemet; ennek kltsge az elbbiek szerint O(logn), majd vgiglpkednk a fels korltig. Ez utbbi fzis a fa leveleinek nv sorrend lncolsval segthet. Az sszkltsg 0 ( l o g n + d), ahol d az eredmnyl kapott rekordok szma. sszegezsl elmondhatjuk, hogy a 2-3-fk a keresfa adatszerkezet igen j megvalstst adjk. A hrom f mvelet - a keress, a beszrs s a trls elvgezhet O(logra) kltsggel, ahol n a trolt rekordok szma. A 2-3-fk algoritmusai viszonylag egyszeren programozhatk, s a gyakorlatban is kedvez viselkedst mutatnak.

3.4. B-FK

69

3.4.

B-fk

A B-fk s klnbz vltozataik (B*-fk, stb.) adjk a keresfa adatszerkezet ma ismert legjobb kls tras megvalstst. A mdszerek olyannyira fontosak s elfogadottak, hogy szabvnyok rszeiv vltak. Ilyen megoldst r el egyebek kztt az IBM VSAM szabvnya indexelt szekvencilis llomnyok ltrehozsra, kezelsre. A B-fkat s algoritmusaikat a feladat jelentsghez s a megoldsok egyszersghez kpest meglehetsen ksn fedeztk fel (R. Bayer, E. McCreight, 1972). A cl teht egy rekordokbl ll llomny trolsa kls trban gy, hogy az elrs alapjul egy (U, <) rendezett halmazbl val kulcsok szolglnak. A kitntetett mveletek itt is a kvetkezk: BESZR, TRL, KERES, MIN, MAX, TLIG. Ezeket szeretnnk hatkonyan megvalstani. A kls trak alapvet sajtossgairl mr szltunk a rendezs kapcsn. A trat lapokba szervezettnek fogjuk elkpzelni. Ennek folyomnya pldul, hogy a fk cscsai is lapok lesznek. A kltsgtnyez pedig, amivel a hatkonysgot mrjk, a lapelrsek szma. A B-fk a 2-3-fk termszetes ltalnostsai. A lnyegi klnbsg abban van, hogy a B-fk bels cscsainak hromnl tbb fia is lehet. Kevsb fontos klnbsg, hogy a fa egy levelben (amit egy lapnak kpzelhetnk el) egynl tbb rekord is helyet kaphat. Legyen m > 3 egy egsz. Egy m-edrendu B-fa, rviden Bm-fa egy gykeres, (lefel) irnytott fa, melyre rvnyesek az albbiaknak: (a) A gykr foka legalbb 2, kivve esetleg, ha a fa legfeljebb ktszintes. (b) Minden ms bels cscsnak legalbb [ y ] fia van. (c) A levelek a gykrtl egyforma messze vannak. (d) Egy cscsnak legfeljebb m fia lehet. A 2-3-fk esethez hasonlan a trolni kvnt rekordok itt is a fa leveleiben helyezkednek el; egy levlben a lapmrettl s a rekordhossztl fggen tbb rekord is lehet. A leveleket jelent lapok balrl jobbra, kulcsrtk szerint nvekv sorrendben lncolva helyezkednek el. A B-fk bels cscsai is hasonltanak a 2-3-fk bels cscsaira. Az eltrs annyi, hogy itt tbb bejegyzs lehetsges. Egy bels cscs gy nz ki: m0 s\ m\
52

m2

Si

mi

ahol a (b) s (d) kvetelmnyeknek megfelelen [ y ] - 1 < i < m - 1. Korbbijellseinkkel sszhangban az Sj U egy kulcs, nij pedig mutat egy rszfa gykerre. Az m,j mutat ltal meghatrozott rszfa minden s kulcsra igaz, hogy

70

3. KERESFK

Sj < s s s < Sj+\. Az mo, illetve mi rszfk kulcsaira csak egy felttel van: az elsben a kulcsoknak kisebbeknek kell lennik, mint s, az utolsban pedig legalbb akkorknak, mint s,-. Elrhat mg az is (br az algoritmusok mkdshez nem felttlenl szksges), hogy j > 0 esetn m-j rszfjban a minimlis kulcs Sj legyen. A fnak azon szintjeit, ahol a bels cscsok helyezkednek el, indexszinteknek szoks nevezni. A meghatroz tulajdonsgokbl kzvetlenl ltszik, hogy a 3-fk lnyegben a 2-3 fa. A I?-fk a 2-3-fk termszetes ltalnostsainak tekinthetk. Ahogy mr utaltunk r, a -fkat elssorban kls tras adatszerkezetknt alkalmazzk, s ebbl addan egy cscsnak ltalban egy lapot foglalnak le. gy m aktulis rtke a lapmret, a kulcshossz s a mutatk hossznak fggvnye. Ugyanakkor az is gyakran elfordul, hogy egy levlben tbb, mint egy rekord helyezkedik el. Tegyk fel, hogy egy 5-fnak n levele s k szintje van, s keressnk sszefggst e kt paramter kztt. Az rdektelen kicsi fktl eltekintve a gykrnek legalbb kt fia van, a tbbi bels cscsnak pedig legalbb |~y]. A 2-3fkra vonatkoz lltshoz hasonlan kapjuk ezekbl, hogy n > 2[y] f c ~ 2 , amibl logrmn | + 2 > k. Innen kettes alap logaritmusra trve log2 n 1

Keress sorn itt is a gykrtl haladunk a levelek fel; az aktulis cscsban lev kulcsokkal val sszehasonltsok mondjk meg, hogy melyik rszfba kell tovbblpni. Vegyk szre, hogy k ppen a keresshez szksges lapelrsek szma, feltve, hogy minden lap kls trban van. (Nem szokatlan gyorstsi tlet a fa fels nhny szintjnek a bels memriban val trolsa.) A kapott korlt mutatja, hogy nagy m rtk (nagy elgazsi tnyez) az elnys. Pldul, ha m = 32, n = 2 20 (itt n az als szint lapjainak szma), akkor k < ^ + 2 < 7. Egy rekord keresse teht legfeljebb 6 lap elrst ignyli. Megjegyezzk mg itt, hogy a becslsben gy vettk, hogy a lapok ppen a (b) felttelbeli minimlis mrtkben vannak kitltve. A gyakorlatban ez a szlssges helyzet meglehetsen ritkn fordul el; a tnyleges keressi id valamivel kedvezbb a becsltnl. A tovbbi keresfa-mveletek (MIN, MAX, TLIG, BESZR, TRL) is a 2-3-fk mveleteinek kzenfekv ltalnostsai. gy pldul a beszrsnl cscsvgst, a trlsnl cscssszevonst alkalmaznak. Ezeket a technikkat ebben az sszefggsben lapvgsnak, illetve lapsszevonsnak nevezzk. Az algoritmusok rszleteit mellzzk; csak annyit jegyznk itt meg, hogy a kltsgk - a TLIG kivtelvel - ez esetben is arnyos a szintek szmval.

3.5. AVL-FAK

71

plda: A B u - f k esetn keresztl szeretnnk rzkeltetni, hogy a (b) s (d) felttelek tnyleg megtarthatk lapvgs/sszevons sorn. Ekkor ugyanis m = 11 s f y l = 6. Lapvgsra akkor kerl sor, ha egy olyan cscsba kell j gyereket illeszteni, amelyben mr 11 mutat van. A vgs utn az sszesen 12 gyerek 2 hatgyermekes cscsot fog alkotni, teht (b) ppen teljesl. Lapsszevonsra akkor knyszerlnk, ha egy olyan hatgyermekes cscsbl kell trlni, amelynek a szomszdos testvreiben is csak hat mutat van. A trls s sszevons utn kt cscs helyett egyet kapunk; ebben 11 mutat lesz.

3.5. AVL-fk
Egy idre visszatrnk a binris keresfkhoz. Korbban lttuk, hogy a keress s a tbbi mvelet sebessgnek szemszgbl a lnyeges jellemz a fa szintjeinek szma, ms szval magassga. Minl kisebb a magassg, annl jobb becsls adhat a keress idejre. Mi ezt a legkedveztlenebb esetekre llaptottuk meg, de hasonl a helyzet az tlagos viselkedssel is. Egy fa magassga akkor mondhat jnak, ha legfeljebb clog 2 n, ahol n a cscsok szma s c egy kis pozitv lland. A legtereblyesebb fknl ez a c rtk 1 krl van: gondoljunk a teljes fkra, amelyek magassga log 2 (n + 1). Az olyan fa-konstrukcikat, amelyeknl c I-nl nem sokkal nagyobb, kiegyenslyozott fknak nevezzk. A c rtket illeten kt ellenttes irny tnyezt kell figyelembe vennnk. A keress szempontjbl a kisebb c a jobb; ugyanakkor nagyobb c-vel a felttel knnyebben teljesthet, algoritmikusn knyelmesebben elrhet. Az els kiegyenslyozott keresfa-konstrukcit, amit szemgyre vesznk, AVL-fnak nevezik. Az elnevezs a szerkezet szerzinek nvbetibl alkotott mozaiksz (G. M. Adelszon-Velszkij, E. M. Landisz, 1962). Hasznos lesz a kvetkez: jellje m(f) az / binris fa magassgt (szintjeinek szmt). Legyen x az / fa egy cscsa; ekkor m(x) jelli az x-gyker rszfa magassgt. Definci (AVL-tuIajdonsg): Egy binris keresfa AVL-fa, ha minden x cscsra teljesl, hogy \m(bal(x)) m(jobb(x))\ < 1. A felttel szerint egy cscs jobb s bal rszfjnak a magassga kzel egyenl. Most megmutatjuk, hogy az elrs tnyleg egy kiegyenslyozottsgi felttel. Ltszlag messzirl kezdjk: legyen G/, a k magassg (szintszm) AVL-fk minimlis cscsszma. Prbljuk meghatrozni Gk nagysgrendjt! Az els nhny fc-ra knnyen kapjuk a pontos rtkeket: Gx = 1, G2 = 2, G 3 = 4 s G4 7.

72

3. KERESFK ' /

Gi = 1

G2 = 2

A rajzon lthat szablyszersg ltalban is rvnyes. A k szintszm minimlis cscsszm AVL-fa. gykernek egyik rszfja k 1, a msik k 2 szint; az eredeti fa minimalitsa miatt pedig mindkt rszfa minimlis cscsszmt.

fc
k1

Innen fc > 3 esetn az albbi rekurzit nyerjk: Gfc = 1 + Gfc_i + Gk-2Emlkeztetjk az olvast, hogy Fi jelli az f-edik Fibonacci-szmot. rvnyes a kvetkez: Ttel: Gk = Fk+2 - 1 ha k > 1. Bizonyts: k = 1, 2 esetn az llts nyilvnval. Ha pedig k > 2, akkor a rekurzi alapjn indukcit hasznlhatunk: Gfc = 1 + Gjt-i + Gfc_2 = 1 + Fk+l - 1 + Fk - 1 = Fk+2 - 1. Az utols lpsben alkalmaztuk a Fibonacci-szmokra teljesl Fk+1+Fk sszefggst. D = Fk+2

Kvetkezmny: Egy n-pont AVL-fa szintjeinek k szma nem tbb mint O(logn), pontosabban k < 1.441og2(n + 1). Bizonyts: A ttel szerint n > Fk+2 ~ 1- Innen a Fibonacci-szmokra vonatkoz als becslsbl n + 1 > 4>k s ezrt log^(n-l-l) > A;, amibl k < 1.441og2(n + l).
D

3.5. AVL-FK

73

Az AVL-fk tnyleg tekinthetk kiegyenslyozott fknak. A krdses c rtk l,44 krl van. gy is fogalmazhatunk, hogy az AVL-fkban val keress hatkony, mert a magassguk legfeljebb 1.44-szer nagyobb az ugyanannyi cscsbl ll tkletes alak binris fnl. A krds ezek utn, hogy miknt lehet az AVL-tulajdonsgot megrizni, karbantartani? Hogyan lehet a BESZR s TRL eljrsokat gy megvalstani, hogy megtartsk az AVL-tulajdonsgot? Az alapvet eszkz a.forgats. Legyen S egy binris keresfa, melynek gykere az x cscs, ennek bal fia y. Jellje / az y bal, g pedig a jobb rszfjt. Legyen h az x jobb rszfja. A binris keresfatulajdonsg megmarad, ha az S ft talaktjuk gy, hogy y lesz a gykere, ennek bal rszfja marad / , az y jobb fia x, ennek rszfi g (bal) s h (jobb). Ezt az talaktst jobb forgatsnak nevezzk, az inverzt pedig bal forgatsnak.

Legyen az S binris keresfa, gykere az x cscs, ennek bal fia y, y jobb fia z. Vgezznk el egy bal forgatst az y gyker rszfra, majd egy jobb forgatst az gy kapott S-re. Ennek az opercinak a neve dupla forgats.
dupla forgats XX

Dupla forgatsnak nevezzk ennek a lpsprnak a tkrkpt is, amikor y az jobb fia, s z az y bal fia. A beszrs s trls megvalstsra a naiv algoritmusokat hasznljuk, kiegsztve azzal, hogy a mvelet elvgzse utn forgatsokkal visszalltjuk (ha szksges) az AVL-tulajdonsgot.
x

Ttel: Legyen S egy n cscsbl ll AVL-fa. BESZR(s, S) utn legfeljebb egy (esetleg dupla) forgatssal helyrellthat az AVL-tulajdonsg. A beszrs kltsge ezzel egytt is 0(log n).

74

3. KERESFK

Bizonyts: A korbbiakkal sszhangban egy / fa (z cscs) esetn jellje m(f) (m{z)) az / fa (a z gyker rszfa) magassgt. Az S fa minden cscsban feljegyezzk az itt gykerez rszfa szintjeinek szmt. Ez a mez knnyen karbantarthat a naiv beszrs s trls sorn. (Valjban mindssze 2 bit/cscs extra informci is elg az AVL-tulajdonsg helyrelltshoz. Ezt itt nem rszletezzk.) A naiv beszrs utn a keressi t ismtelt bejrsval megkapjuk a legals olyan cscsot (ez legyen x), ahol az AVL-tulajdonsg megsrl.

l
Az x defincijbl addik, hogy x bal s jobb rszfjnak nem lehet ugyanaz a magassga. Az ltalnossg csorbtsa nlkl feltehetjk, hogy a bal rszfa magasabb, jelesl nem res. (Ha a jobb rszfa a magasabb, akkor az albb kvetkez recept tkrkpvel, benne a jobb s a bal felcserlsvel rhetnk clt.) Legyen ezek utn a bal rszfa gykrpontja y, ennek a rszfi pedig / (bal) s g (jobb). Az x jobb rszfja legyen h. Legyen m(y) = l; ekkor szksgkppen m(h) = 1 1. Kt esetet klnbztetnk meg: a beszrs sorn (a) az s az /-be ketiil; (b) az s a g-be kerl. Nzzk elszr az (a) esetet. Ekkor m ( / ) = m(g) = 1 1. Ugyanis m(f) < m(g) esetn a beszrs nem tudn megsrteni az AVL-tulajdonsgot xben. Msfell m(f) > m(g) azt jelenten, hogy t/-ban is - teht x alatt - srl az AVL-tulajdonsg. Innen addik, hogy m(f) = m(g) = m(y) 1 = 1 1. Eme ismeretek birtokban lltjuk, hogy az i-nl elvgzett jobb forgats megoldja a problmt.

3.5. AVL-FAK

75

A forgats utn y mindkt rszfjnak a magassga / lesz, x j rszfi g s h, mindkett szintszma l - l . Ezen cscsok s rszfk rendben vannak. Az x defincija miatt /-ben az 5 beillesztse utn sem silhet az AVL-tulajdonsg. Vgl megjegyezzk, hogy az j helyre kerlt y feletti cscsok magassga ugyanannyi marad a beszrs s forgats utn, mint amennyi eredetileg volt; gy az AVL-felttel feljebb is megmarad a keres t mentn. Nzzk most a (b) lehetsget, amikor is s az y jobb rszfjba kerl. Ezt mindjrt kt alesetre bontjuk, (bl) az j cscs y fia, azaz l = 1; (b2) az j cscs y-nak nem fia, ms szval / > 1. A (bl) esetben y bal rszfja s x jobb rszfja is res, ezrt elegend egy dupla forgats x-n\.

A (b2) esetben a g rszfa nem res, hiszen m(g) l 1 > 0. Legyen a rszfa gykere z, ennek rszfi g' s g". Az s kulcs e kt rszfa valamelyikbe kerl, a tovbbiak szempontjbl kzmbs, hogy melyikbe. Ekkor m ( / ) = / 1 (mert 2/-ban az AVL-felttel teljesl), s m(g') = m{g") =1-2 (mert z-ben sincs baj az AVL-tulajdonsggal). Egy ketts forgats mindent helyretesz.

76

3. KERESFK

A rszfa j gykere z kiegyenslyozott lesz, m(z) = / + 1. Ennyi volt m(x) a beszrs eltt. A z bal fia y balslyos vagy kiegyenslyozott lesz aszerint, hogy s a g' vagy g" rszfba kerl-e. Ugyangy z jobb fia x lesz, ami jobbslyos vagy kiegyenslyozott. Ezzel az algoritmus ismertetst befejeztk. Az itt vzolt eljrs kltsge nyilvnvalan arnyos a naiv beszrs kltsgvel; az m(S) < 1.441og2(n 4- 1) egyenltlensgbl ltszik, hogy ez O(logn). D A trls algoritmusa is hasonl felpts. Elszr a naiv mdszerrel eltvoltjuk a trlni kvnt elemet, majd - ha szksges - alkalmas forgatsokkal helyrelltjuk az AVL-tulajdonsgot. Ttel: Az n szgpont AVL-fbl val naiv trls utn legfeljebb 1.441og2n (szimpla vagy dupla) forgats helyrelltja az AVL-tulajdonsgot. Ezt nem bizonytjuk. A helyrellt fzis valamivel bonyolultabb, mint a beszrsnl alkalmazott mdszer. Elfordulhat, hogy a trlsi t mentn tbb cscsnl is kell forgatst vgezni. A trls kltsge evvel egytt is O(logn). Feladat: Adjunk pldt egy olyan AVX-fra, melynl egy alkalmas trls utn nem llthat helyre az AVL-tulajdonsg egyetlen (szimpla vagy dupla) forgatssal. Megjegyzs: A forgatsok szoros kapcsolatban vannak az asszociatv szabllyal. Kpzeljk el, hogy van egy ktvltozs mveletnk, mondjuk *. E mvelet segtsgvel kifejezseket kszthetnk (pl. (x * y) * (z * u), ahol x, y, z, u vltozk). Egy kifejezsnek termszetes mdon megfelel egy binris fa, melynek levelei a vltozk. Ebben a kifejezsfban forgatsok felelnek meg a kifejezs asszociatv szably szerinti talaktsainak.

3.6. TOVBBI MEGJEGYZSEK KIEGYENSLYOZOTT FKRL

77

((x * y) * z) *u

(x * y) * (z * u)

Az brn baloldalt lev kifejezsfbl a gykrnl elvgzett jobbforgatssal keletkezett a msik fa. Lthat, hogy az j kifejezs a rgibl az asszociatv szably egyszeri alkalmazsval szrmaztathat.

3.6.

Tovbbi megjegyzsek kiegyenslyozott fkrl

Az AVL-tulajdonsg olyan szablyt, elrst jelent, melyet ha megtartunk, akkor kiegyenslyozott ft kapunk. Az AVL-fk magassga legfeljebb mintegy 1.44szerese az idelis fknak. Ez biztostja, hogy a bennk val keress hatkony. Az AVL-tulajdonsg csak egy a lehetsges kiegyenslyozottsgi felttelek kzl. Ms olyan tulajdonsgok is vannak, amelyek hasonl mdon szablyozzk a fa alakjt, s a megrzsk sem jelent tl nagy algoritmikus nehzsget. E tulajdonsgok (konstrukcik) kzl kettt rintnk a tovbbiakban. HB[k]-fk (C. C. Foster, 1973) Legyen k > 1 egy egsz szm. Egy binris keresfa BB[k]-i\ ha minden x cscsra teljesl, hogy \m(bal(x)) - m(jobb(x))\ < k. Az elrs az AVL-felttel ltalnostsa. Specilisan a HB[l}-fk ppen az AVL-fk. Az AVL-fk esethez hasonl, br valamivel bonyolultabb mdon megmutathat, hogy a HB[k]-felttel ltalban is kiegyenslyozott fkat eredmnyez. Feladat: Az elbbi defincibl kizrtuk a k 0 esetet. Mi lehet ennek a magyarzata? Mirt alkalmatlanok a ff?[0]-fk a keresfa adatszerkezet megvalstsra? Slyra kiegyenslyozott fk (J. Nievergelt, B. Reingold, C Wong, 70-es vek) Az elz felttel a rszfk magassgnak a szablyozsval biztostotta a kellen te lt alak fkat. Erre a clra ms kombinatorikus tulajdonsgok is alkalmasak, ilyen jellemz lehet pldul a rszfk cscsainak szma.

78

3.

KERESFK

Legyen x egy binris fa cscsa. Az x cscs slya az x-gyker rszfban lev cscsok szma. Az x cscs slynak a jele s(x). Pldul a kvetkez fban s{x) = 6, s(y) = 3 s s(z) = 2.

Definci: Egy binris keresft slyra kiegyenslyozott fnak (rviden SKfnak) neveznk, ha minden x bels cscsra teljesl, hogy

V2-1<4M^<V2 + 1.
s{jobb(x)) j Lthatjuk, hogy az SK-felttel jobb-bal szimmetrikus. Az egyenltlensgek reciprokat vve kidil, hogy \fl - 1 < ^ ^ < V2 + 1 is igaz. Feladat: Igazoljuk, hogy a leheletnyivel szigorbb 1/2 < / / ^ f j j v < 2 korltokat mr csak az / szintbl ll, 2' 1 pont binris fk a teljestik. Most megmutatjuk, hogy az 5'jF-felttel tnyleg kiegyenslyozott fkhoz vezet; a magassgkoiitban szerepl c lland 2-nek addik. Legyen evgbl S egy SK-fa, melyre s(S) = n s m(S) = k. Legyen x az S egy bels cscsa, melynek bal fia y, a jobb fia pedig z.

Ekkor s(x) > s(y) + s(z) > (V2 - l)s(z) + s(z) - y/2s(z). Az els egyenltlensg a sly defincija, a msodik pedig az .STf-felttel miatt igaz. Innen az SK-felttel jobb-bal szimmetrijt hasznlva megllapthatjuk, hogy rvnyes az s(x) > V2s(y) egyenltlensg is. Legyenek most x\, x2,... ,Xk

3.6. TOVBBI MEGJEGYZSEK KIEGYENSLYOZOTT FKRL


egy n

79

^-hosszsg gykrtl levlig men t cscsai. Az S gykere x\, amibl _ _ 3(5) = s(a;i), tovbb xi,x2,... ,xk_i bels cscsai 5-nek. Az elbb nyert egyenltlensgek ismtelt alkalmazsval kapjuk, hogy
n

= s(Xl)

> V2s(x2) > (V2)2s(x3)

>> (V2)k~ls(xk)

(V2)k~l.

A lnc elejt a vgvel sszevetve n > (V2)k~1, amibl logaritmusra trve 2 log2 n + 1 > k addik. Egy n cscsbl ll SK-fa. magassgnak maximuma legfeljebb 2 log2 n + 1. Egy tovbbi alkalmazs A kiegyenslyozott fk alkalmasak a trgyalt alapfeladatokon kvl ms problmk hatkony megoldsra is. Pldaknt emltjk a rendezett listk sszefzsnek feladatt. Az elemek inorder sorrendjre gondolva egy AVL-fa felfoghat rendezett listnak. Tegyk fel, hogy van kt rendezett listnk, S s S2, melyeket egy-egy AVL-fban trolunk. Tegyk fel tovbb, hogy az 62-ben szerepl kulcsok mind nagyobbak az S kulcsainl. Clunk a kt lista egyestse; a kt AVL-ft szeretnnk minl hatkonyabban egyetlen AVL-fv sszefzni. Megmutatjuk, hogy ez megtehet 0(log n) kltsggel, ahol n a kt lista sszestett elemszma. A fkrl felttelezzk, hogy a cscsai tartalmazzk az ott gykerez rszfk magassgt. Legyen m(Si) > m ^ ) - (A fordtott eset hasonlan kezelhet.) Az eljrs f lpsei a kvetkezk: 1. Megkeressk s trljk S2 legkisebb elemt (legyen ez s). A trls eredmnyeknt kapott ft jellje 5 3 . 2. S gykertl indulva, s rendletlenl jobbfel haladva megkeressk az els olyan x cscsot, melyre m(x) - m(S^) = 0 vagy 1. (A felttel azrt tartalmaz kt lehetsget, mert egy lpsnl a magassg 1-gyel vagy 2-vel cskkenhet.) 3. Ezutn x helyre egy j cscsot tesznk, melynek kulcsa s. Az j cscs jobb rszfja S3, bal rszfja pedig az S fa a;-gyker rszfja lesz. Vgl helyrelltjuk az AVL-tulajdonsgot. Erre a beszr algoritmus tletei alkalmazhatk: gy jrunk el, mintha az s cscsot szrtuk volna be a fba.

80

3. KERESFK

Knnyen ellenrizhet, hogy az gy kapott fa teljesti a keresfa-tulajdonsgot s az /WL-felttelt is. A kltsgkorlt azonnal kvetkezik abbl, hogy 5i s S2 magassga is 0(log n).

3.7. Egy nszervez megolds: az S-fk


Kvasztics felriadt lmbl, megltta az jult rt, s fradtan krlnzett. - Csak menjetek nyugodtan... mondta - az rt megvizsglom s elltom ktssel. -Az nem elg - sgta Tusk a szjt is tmje he, ha mr pols al vesziREJT JEN: A hrom testr Afrikban Az eddig vett hatkony keresfk algoritmusai zord szigorsggal vigyznak a fk alakjra. Ezltal a mveletek legkedveztlenebb eseteire is biztostani tudjk a O(logrc) nagysgrend korltot, ahol n a trolt elemek szma. Egszen msfle szemlletet kpvisel az itt bemutatsra kerl nszervez binris keresfakonstrukci, melynek neve 5-fa. Az elnevezs az angol splay tree (kifordtott fa) kezdbetjbl szrmazik. Az S-fkat D. D. Sleator s R. E. Tarjn javasoltk 1983-ban. Egy 5-fa a trolsi szerkezett illeten egyszeren egy binris keresfa. rdekess s hatkonny az alapmveletekre javasolt mdszerek teszik. Ezek az algoritmusok semmifle kzvetlen figyelmet nem szentelnek a fa alakjnak. Elfordulhat pldul, hogy a fban hossz utak vannak, s ezrt bizonyos keressek lassak. Az S-fk teht nem felttlenl kiegyenslyozottak. Ezzel szemben hosszabb opercisor (keressek, beszrsok, trlsek, stb.) alatt tanulnak": az egyes elemek elrsi gyakorisgai s ezen elrsek idbeli eloszlsa szerint vltoztatjk alakjukat. gy is mondhatjuk, hogy a fa idomul a felhasznli ignyekhez. Az S-fk algoritmusai mgtt egy nagyerej s sok esetben hasznlhat gondolat hzdik meg. Ha a felhasznli ignyek teljestse (mondjuk keress) kzben eljutunk valahova, akkor nem tvozunk onnan szkkebln, pusztn csak a ktelezket elvgezve. Rsznunk mg valamennyi idt, hogy szptsk, alaktsuk a krnyket ahov kerltnk. Ez az id (nagysgrendileg) nem tbb, mint amit a felhasznli krsre amgy is fordtanunk kell. A rfordts javtja a szerkezet hatkonysgt, aminek az eredmnye az lesz, hogy a jvbeli krseket gyorsabban tudjuk teljesteni. Ezzel a filozfival ksbb is tallkozni fogunk a szekvencilis keress nszervez mdszereinl s az UNI-HOLVAN adatszerkezetnl.

3.7. EGY NSZERVEZ MEGOLDS: AZ S-FK

81

Az 5-fk alkalmazkod kpessgnek kt konkrtabb megnyilvnulst emltjk: 1. Egy hossz mveletsor esetn az egy mveletre es kltsg konstans szorz erejig optimlis lesz. Ha teht a fa elg sokig l, akkor az sszestett idignye nem lesz szmotteven rosszabb a legjobb kiegyenslyozott fknl. E tulajdonsg pontosabb megfogalmazsa a szakasz vgn tallhat ttel. 2. A kiegyenslyozott fknl jobb teljestmnyt nyjtanak olyan alkalmazsi helyzetekben, ahol az egyes elemekkel kapcsolatos elrsi ignyek idben csomsodnak". Az ilyen csoms helyzetre suta, de szemlletes plda egy krhz betegnyilvntartsa. (A sutasg abbl ered, hogy egy krhzi nyilvntartst kls tron rdemes kezelni, mg a binris keresfk bels memris szerkezetek.) Ha valaki bekerl a krhzba, akkor a rla szl rekord igen aktv lesz; viszonylag gyors egymsutnban kerlnek bele a klnfle vizsglatokkal, kezelsekkel kapcsolatos feljegyzsek. Ha viszont az illet ppen nem beteg, akkor meglehetsen ritkn van szksg erre a rekordra. Az 5-fk ezen alkalmazkodsi kpessgt egy igen egyszer, ugyanakkor csillogan elegns visszacsatolsi mechanizmus biztostja. Ennek lnyege, hogy ha a fban trolt s G U elemmel kapcsolatos elrsi igny rkezik (pl. KERES(s,/)), akkor az ignyt kezel algoritmus ezt gy rtelmezi", hogy az s fontossga ntt. Az s elemet alkalmas forgatsokkal a fa gykerbe mozgatja. Ezen fell az 5-hez vezet keres t mentn lev elemek is valamivel fontosabbak lettek; a mdszer ket is kzelti a gykrhez. Ennek eredmnyeknt az adott idszakban gyakran hasznlt elemek kzel lesznek a fa tetejhez, a kevsb aktvak pedig lassan a levelek fel vndorolnak. A gyakran hasznlt elemek ezrt nagyon gyorsan elrhetk. A krhzi pldnl maradva a fa csaknem olyan teljestmnyt nyjt, mintha csupn az ppen kezelt betegek rekordjaibl llna a nyilvntarts. Az 5-fk mveleteinek pontos lershoz bevezetnk nhny jellst. Legyei k /) / ' 5-fk, x, y, z kulcsok, az U rendezett univerzum elemei. Utbbiakat azonostani fogjuk az ket tartalmaz fabeli cscsokkal. Ez nem fog flrertst okozni. A keresfkra jellemz KERES(x, / ) , BESZR(x, / ) s TRL(x, / ) mveleteket a szoksos mdon rtelmezzk. A RAGASZT(/, / ' ) mvelet az / s / ' ^-fkbl egyetlen 5-ft szervez, feltve, hogy x < y teljesl minden i G / s y e / ' kulcsra. A VG (a;, / ) mvelet sztvgja /-et az / ' s / " 5-fkra gy, hogy y ~ x < z teljesl minden y G / ' s z E f" cscsra.
el

A korbban emltett nszervez-szpt kpessg a KIFORDT elnevezs Jarsba van ptve. Ennek a defincija az erejhez kpest meglepen egyszer.

82

3. KERESFK

KIFORDIT(x, / ) tszervezi az / S-ft gy, hogy x lesz az j gykr, ha x / ; klnben / gykere x valamelyik szomszdja lesz: vagy max{y e / ; y < x} vagy min{y / ; y > x}. A KIFORDT mvelet az egsz mdszercsald lelke. Segtsgvel a tbbi eljrs knnyen megvalsthat: llts: Az ismertetett mveletek mindegyike megvalsthat konstans szm KIFORDT s konstans szm elemi operci (sszehasonlts, mutat bellts, stb.) segtsgvel. Bizonyts: Csak kt mvelet, a RAGASZT s a TRL esett nzzk meg kzelebbrl. A tbbi mdszer sszerakst feladatknt az olvasra hagyjuk. RAGASZT(/,/') vgrehajtst a KIFORDT(+00,/) hvssal kezdjk. Itt +00 U egy az / minden elemnl nagyobb kulcsot jelent. Legyen x az eredmnyl kapott /* fa gykere. A KIFORDT specifikcija szerint az x az /* legnagyobb kulcsa. Ebbl kvetkezik, hogy x-nek nincs jobboldali fia. Legyen teht az x jobboldali fia az / ' fa gykere. Az gy kapott fra teljesl a keresfa-tulajdonsg, mert a hvsi felttel szerint / ' kulcsai nagyobbak x-nl. TRL(x,/) els lpse KIFORDT(x,/). Ha az ekkor kapott fa gykere nem x, akkor kszen vagyunk; ez azt jelenti, hogy x 0 / . Feltehetjk ezutn, hogy a fa gykere x. Legyenek /1 s J2 az x gykr rszfi. A trlst RAGASZT(/i, / 2 ) vgrehajtsval fejezhetjk be. D KIFORDT(x,/) implementcija Hasznos lesz a kvetkez jells: legyen x az / fa egy cscsa, melynek apja y\ ez esetben FORGAT(x) jellje azt az egyszeres forgatst, mely x-et y apjv teszi. Elszr a binris keresfkban szoksos mdszerrel megprbljuk megtallni x-et /-ben. Ez vagy sikerl, vagy pedig ha x $ / , akkor az x-nek a rendezs szerinti egyik szomszdjnl (max{y < G / ; y < x} vagy min{j/ / ; y > x}) vgznk. Mindegyik esetben azt az elemet kell majd felvinnnk a fa tetejre, amelyet a keress sorn utoljra elrtnk. Feltehetjk ezrt, hogy x / , s mr meg is leltk x-et /-ben. Ezutn a keznkben lev x elemet az albb kvetkez recept ismtelt alkalmazsval felvisszk a fa tetejre. Az eljrsdarab egy vgrehajtsa maximum kt szinttel viszi feljebb x-et. Egy menetben a 0-3. lpsek kzl pontosan egy hajtdik vgre. A dntshez szksges ellenrzs knny, mert az x-hez vezet keres t utols nhny (legfeljebb hrom) cscsnak s a kztk men leknek az ismeretben elvgezhet.

3S.

SZFK

83

(0) Ha x gykr, akkor kszen vagyunk. (* A tovbbiakban jellje y az x apjt. *) (1) Ha x-nek nincs nagyapja, akkor FORGAT(x), klnben (2) ha x s y is baloldali (jobboldali) gyerek, akkor FORGAT(y), majd FORGAT(a;), klnben (3) ha x s y klnbz oldali gyerekek, akkor FORGAT(a;), majd ismt FORGAT(a;).

KIFORDT(a;,/) fontos jrulkos hatsa, hogy az x keres tjn lev cscsok kzelebb kerlnek a fa tetejhez. A keresfa-mveletek - a bennk lev KIFORDT-hvsnak ksznheten - vltoztatjk a fa alakjt. Ez a vltoztats annl tbb cscsot rint, minl mlyebben lev elemre alkalmazzuk a kifordt eljrst. A kvetkez eredmny a korbban emltett 1. tulajdonsg pontosabb megfogalmazsa. Lnyegben azt mondja, hogy egy hossz mveletsor sszkltsge lland szorz erejig a kiegyenslyozott fkra jellemz korlton bell marad: az egy mveletre es tlagos kltsg O(logn), ahol n a fa cscsainak a szma. A bizonytst mellzzk. Ttel: Egy res S-fbl indul olyan m mveletbl ll sorozat kltsge, melyben n beszrs van, O(mlogn). D

3.8.

Szfk

Az eddigi keresfa-konstrukcik csak annyit tteleztek fel az U kulcshalmazrl, hogy az rendezett halmaz. A rendez mdszereknl a kulcsokrl val finomabb ismeretek hatkonyabb algoritmusokhoz vezettek; gondoljunk csak a lda- vagy a radixrendezsre. Nmikpp hasonl a helyzet a keresfa-mveleteknl. Bizonyos specilis szerkezet kulcsokra rdekes ad hoc megoldsok adhatk. Szp s hasznos pldaknt emlthetk a szfk. A szerkezet angol neve egy fantziasz: trie, amely a retrieval sz kzepbl val ngy betre szndkozik utalni (kiejtse viszont a try mintjt kveti). Legyen E egy vges halmaz, amit gy tekintnk, mint egy nyelv betkszlett (a>c-jt). Jellje E* a E-beli elemekbl alkotott vges hossz sorozatok, azaz szavak halmazt. Itt most feltesszk, hogy adott egy rendezs (amit rc-sorrendnek tekintnk) a E halmazon. Ebbl azonnal addik egy rendezs E*-on, nevezetesen a betrenden alapul lexikografikus rendezs. A szfk hatkony keresfa-

84

3. KERESFK

konstrukcit adnak arra az esetre, amikor U ~ *, a rendezs pedig a lexikografikus. A szfk teht akkor alkalmazhatk, ha a kulcsok szavak. A szft gykeres, a gykrtl tvolodan irnytott fnak kpzelhetjk el. A fa cscsai lnyegben mutat tpus tmbk, E U {*} elemeivel indexelve. Itt * 0 S egy specilis vgjel, amirl feltesszk, hogy a betrend szerint S minden betje megelzi. gy is fogalmazhatunk, hogy a tmbk utols, |Sj + 1. elemnek az indexe *. A tmbk elemeiben lev mutatk adjk a fa leit. Egy cscsnak ezek szerint maximum | S | +1 fia lehet. Egy tmbelem vagy NULL (jelezve hogy res, teht nem tartalmaz igazi mutatt) vagy egy mutat egy fira (azaz egy msik tmbre) vagy a * vgjel. A fban trolt szavakat gykrtl levlig, azaz a * vgjelig men utak jelentik. Pldul ha a magyar abc, s a KAP szt szeretnnk trolni, akkor a gykeret jelent tmb K index elembl mutat mutat egy msik tmbre, ennek A index elemben mutat van egy tovbbi x tmbre, melyre x[P] = *. Bonyolultabb a helyzet, ha a KAPU sz is szerepel a szfnkban. Ekkor x\P] valdi mutat, mondjuk az y tmbre. Azt a tnyt pedig, hogy a KAP sz is szerepel, gy jelezhetjk, hogy *-ot runk j/[*]-ba. Mskppen fogalmazva: a problmt, hogy egyik sz prefixe a msiknak - mint a KAP a KAPU-nak - gy kezeljk, hogy minden sz vgre egy *-ot kpzelnk, s * csak a sz vgn fordulhat el. Az x[P]-ben gykerez rszfa azoknak a trolt szavaknak felel meg, amelyeknek az els hrom betje KAP. A tmbk helyett lineris listk is hasznlhatk. Ezltal megtakarthatjuk a NULL rtk tmbelemek helyt. Ennl a megkzeltsnl viszont nmi gondot okoz a listk hatkony kezelse. Legyen S tovbbra is a magyar abc. A KR, KVR, KAPS, KAP, KALAP szavakat tartalmaz fa lists brzolsa gy kpzelhet el:

Itt egy adott cscs fiai tekinthetk egy listn levknek. gy pldul a gykr egy

3,8.

SZFK

85

egyelem lista, a msodik szinten lev A bet fiai, L s P szintn egy (ktelem) listt kpeznek. . A szfa adatszerkezet rzketlen a beszrsok sorrendjre, a fa alakja csak a trolt szavak sszessgtl fgg. A tmbbel megvalstott szfban val keress igen hatkony. Ugyanis a bemen sz hosszhoz mrten nem kell tbbet lpnnk a mutatk mentn, mint amennyi a szban a betk szma. Megmutathat, hogy m bets abc feletti n vletlen kulcsbl ll szfa esetn a keress tlagosan mintegy logm n + c mutat kvetsvel befejezdik, ahol c az m-tl s n-tl is fggetlen lland.

You might also like