Vous êtes sur la page 1sur 65

sszefuttatsos rendezsek I.

, 2016/17
1. elads
Ebben a flvben a tovbbiakban < K,> egy teljesen rendezett halmaz lesz. K jelli s K -bl
kpzett vges sorozatok halmazt, mg K + az elbbiek kzl a nem reseket. Egy s K sorozat
(nven) rendezett, ha 1 i |s| 1 esetn si si+1 .
A rendezsi feladat az eredeti s sorozat olyan trendezse, hogy az eredmny rendezett legyen.
A pontos specikci a kvetkez:
s, s K (Korbbi konvencink alapjn itt s a rendezend sorozat, mg s az kezdrtke)
Q : s = s
R : s rendezett es s perm(s ) (Itt perm(s ) az s sszes permutciinak halmaza.)

Az sszefuttatsos rendezs absztrakt smja


Az sszefuttatsos rendezsek alapja a rendezettsg kvetkez tfogalmazsa:
s rendezett |s| 1 vagy lteznek olyan x, y K + rendezett sorozatok, hogy s ParKomp(x, y)
s valahnyszor si s si+1 klnbz sorozatbl valk, akkor si si+1 .
0.1. denci. Tetszleges x, y sorozatok esetn Parkomp(x, y) jelli azoknak az s sorozatoknak a
halmazt, melyeket x, y sszefslsvel kaphatunk meg.
Pl.: x = aaabc, y = bd
Parkomp(x, y) = {bdaabc, badabc, baadbc, baabdc, baabcd, abdabc, abadbc,
ababdc, ababcd, aabdbc, aabbdc, aabbcd, aabbdc, aabbcd, aabcbd}
Az tfogalmazs alapjn a kvetkez rendezsi sma adhat:

futRendSema(s)
|s| 1

Darabol(s, x, y)
AkrhogyRend(x)

SKIP

AkrhogyRend(y)
fut(x, y, s)

1. algoritmus. Az futRendSema.
1

2
Darabol(s, x, y) az s sorozat valamilyen stratgia szerinti sztosztsa 2 nem res rszsorozatt. A rszsorozatokat AkrhogyRend hvsai lerendezik, majd fut gondoskodik a megfelel,
a rendezettsget garantl prhuzamos kompozci ellltsrl. Az fut eljrs specikcija a
kvetkez:
x, x , y, y K
Q : x = x , y = y
R : s Parkomp(x, y) s s rendezett
Az eljrs struktogramja:

fut(x, y, s)
s :=

x, y 6=
pre(x, 1)) pre(y, 1)
ElejeKi(x, k)
ElejeKi(y, k)
VgreBe(s, k)
x=
s := sy
s := sy

2. algoritmus. Az fut(x, y, s) algoritmus.


Itt az ElejreBe, VgreBe, ElejeKi, VgeKi eljrsok rtelemszeren valamely sorozat elejre,
vgre betesznek, illetve onnan kivesznek egy-egy elemet.
Az futRendSema -ban nem rendelkeztnk mg a darabols mikntjrl, illetve arrl, milyen
legyen az AkrhogyRendez eljrs.
Valamilyen problma megoldsa sorn termszetes az az t, hogy a problmt egyszerbb
problmk megoldsra vezetjk vissza. Ennek a stratginak specilis esete a rekurz s az Oszd
meg s uralkodj elv.
A rekurzit olyan esetekben hasznlhatjuk, ha a problmt az eredetihez hasonl egyszerbb
rszproblmkra tudjuk felbontani. A megold rekurzv eljrs sorn egyrszt lekezeljk a legegyszerbb (tovbb nem bonthat) eseteket, mg az sszetett esetekben a megoldand rszproblmkra
- felttelezve, hogy rjuk mr helyesen mkdik az eljrsunk - meghvjuk (alkalmazzuk) az eljrst
nmagt, majd ezek eredmnybl lltjuk ssze az eredeti problma megoldst.
Az Oszd meg s uralkodj elv olyankor hasznlatos, amikor a problmk rszproblmkra val
visszavezetssnl a rszproblmk bonyolultsgi foka krlbell azonos, az eredeti bonyolultsg
valahnyada (mert gy cskken a leggyorsabban a megoldand rszfeladatok maximlis bonyolultsga).
A rekurzit s az Oszd meg s uralkodj elvet a legtbbszr egytt hasznljuk. A problmt
azonos mret hasonl rszproblmkra bontjuk, majd rekurzv eljrst ksztnk.
A elbbi smban ez gy jelentkezhet, hogy a darabolsnl mindig felezzk s -et (x s y hossza
legfeljebb 1-el trhet el), mg az akrhogy rendezst az eljrs rekurzv hvsval valstjuk meg.
Az gy kapott eljrs neve sszefuttatsos rendezs (hasznlatos mg az sszefslses rendezs
elnevezs is).

futRend(s)
|s| 1

Darabol(s, x, y)
futRend(x)
futRend(y)

SKIP

fut(x, y, s)

3. algoritmus. Az futRend(s) algoritmus.


Az sszefuttatsos rendezs elemzse. A legrosszbb eset vizsglatval fogunk foglalkozni.
Elszr az sszefuttatsi lpst vizsgljuk, a mret (n = |x | + |y |) fggvnyben:
A mozgatsok szmnak becslsekor abbl a nagyon pesszimista megkzeltsbl indulhatunk
ki, hogy az n elem mindegyiknek egyszer t kell kerlnie s -be, vagyis MMfut (n) = n. (A legtbb
reprezentciban kevesebb mozgats is elg, mert a maradk s -hez fzse annak hossztl fggetlen
id alatt trtnhet, pldul a lncols esetben).
Az elemsszehasonltsok szma 0, ha a sorozatok kzl brmelyik is res. Egybknt pedig
n m ahol m az algoritmus vgn tmsolssal s -be tkerl elemek szma. m legkisebb rtke
1, (hiszen egyszerre csak az egyik sorozat fogyhat el). Innen
fut (n) =
MO

n 1

, ha n = 0
, ha n 1

Trjnk r az sszefuttatsos rendez legrosszabb esetnek vizsglatra. :


Vilgos, hogy n 1 esetn az algoritmus nem csinl semmit. Egyb n-ekre a legrosszabb
eset akkor kvetkezik be, ha x s y rendezse sorn, tovbb az sszefuttatsnl is a legrosszabb
eset kvetkezik be. Ennek alapjn a kvetkez rekurzv kpleteket rhatjuk fel (a Darabol eljrs
mozgatsi szmt pesszimista mdon szintn n -nek tekintve).
MMfutRend (n) =

, ha n 1
futRend (n/2) + MMfutRend (n/2) , ha n > 1

2n + MM

, ha n 1
futRend (n) =
MO
n 1 + M O
futRend (n/2) + M O
futRend (n/2) , ha n > 1

Gondoljuk vgig most futRend rekurzv hvsi szintjeit abbl a szeempontbl, hogy mennyi
az egyes szinteken a hvsokban szerepl sorozatok
maximuma.
l hossznak
m
l
m
0. szinten: n , 1. szinten:n/2 ,...., h. szinten: n/2h . Ha h olyan nagy, hogy n/2h 1, akkor
tovbbi szint mr nincsen. Ezen az utols, h. szinten az algoritmus minden mkd pldnya a
nem rekurzv gra kerl (bizonyosak mr a korbbi szinteken), ahol se mozgats, se sszehasonlts nincs. A tbbi szinten az sszefuttatsok sorn vannak mozgatsok s sszehasonltsok, de
szintenknt sszessgben legfeljebb 2n, illetve n. Emiatt a mozgatsok szmra az 2hn, mg az
sszehasonltsok szmra hn fels becsls adhat. Knnyen belthat, hogy h = log2 (n)
sszefoglalva MMfutRend (n) = O(nlog2 (n)), MMfutRend (n) = O(nlog2 (n)), ami azt mutatja,
hogy az sszefuttatsos rendezs asszimptotikusan optimlis.

4
Megjegyezzk, hogy az sszefuttats algoritmust knnyen ltalnosthatjuk gy, hogy r( 2)
rendezett sorozatot futtatunk ssze. Ilyenkor persze a Darabol eljrsnak r egyenl rszre kell
oszatnia s -et. Az elemzs csak annyiban ms, hogy az eredmnyben 2 alap logaritmus helyett r
alap logaritmus van. Mi a tovbbiakban is az r = 2 esettel foglalkozunk.

A vegyes vltozat.
A vegyes vltozat alapeszmje, hogy a rvid sorozatokat valamilyen msik rendezsi stratgival
rendezzk le. Erre pldul okot adhat az, hogy az alapvltozat aszimtotikus gyorsasga rvid sorozatok esetben a ngyzetes rendezsi stratgihoz (pldul egyszer beilleszts) kpest mg nem
rvnyesl, de lehetnek mgtte iplementcis meggondolsok is, mint pldul a kls rendezseknl. Legyen teht M( 1) egy pozitv egsz kszbszm, az legfeljebb ilyen hossz sorozatokat
fogjuk a tovbbiakban rvid sorozatnak tekinteni s valamely ms rendezvel rendezni. Az eredeti sma annyiban vltozik, hogy most az |s| M felttelre krdeznk r, s a SKIP helyett egy
MsRendez eljrs hivsa trtnik s-re.
Az elemzst most is al rekurzv
 mszinteknek az alapsmhoz hasonl tgondolsa alapjn vgezn
= lesz az utols hvsi szint (ami log2 (M) -el kisebb, mint
hetjk el. Ilyenkor h = log2 M
l

n
log2 (n)). A legals szinten viszont jelentkezik mg M
- szer egy MvignyMsRendez (M) alak
lineris tag, ami persze az n log2 n -es nagysgrendet nem befolysolja.
M-re a kvetkez mdon adhatunk becslst: c1 Mlog2 (M) c2 M 2 , ahol c1 , illetve c2 (c1 > c2 )
rendre az nlog2 n-e, illetve ngyzetes rendezs aszimptotikus konstansa.

Az iteratv vltozat
Az sszefuttatsos rendez olyan vegyes vltozatbl indulunk ki, ahol a darabols a sorozat kettvgsval trtnik. Az eredeti rekurzv vltozat rekurzv hvsi fjnak legals szintje tartalmazza
a legfeljebb M hossz rszek Msrendezzel val rendezst. A rekurzv eljrs praktikusan maga
is ezeket hajtja vgre elszr, majd visszatrs utn a magasabb hvsi szintek vgzik el az sszefuttatsi lpseket. Ezt a vgrehajtsi sorrendet iteratv programmal is meg tudjuk valstani az
albbiak szerint:
A sorozatot az elejtl M hossz rszekre vgjuk, Msrendezzel rendezzk ket, majd a rekurzv hvsi fa szintfolytonos bejrsnak megfelelen, pronknt, szintenknt felfel haladva (egyre
hosszabb darabokkal) szisztematikusan sszefuttatjuk ket.
Az sszefuttatsi algoritmusok megrtst a tovbbiakban knnyebb teszik az albbi j fogalmak. Egy rendezett rszsorozatot a tovbbiakban futamnak fogunk hvni, a hosszt pedig
futamhossznak. A Msrendezzel ltrejtt futamok rendszert kezdeloszlsnak nevezzk. Egy futamrendszer leghosszabb futamnak hosszt maximlis futamhossznak fogjuk hvni s d-vel fogjuk
jellni. Vilgos, hogy az M kszbszm mellett a kezdeloszls d maximlis futamhossza M. Szintenknt felfel haladva a rekurzv hvsi fa bejrsval az adott szinten kialakul futamrendszer
maximlis futamhossza mindig duplzdik mindaddig, mg a legfels (0.) szintre rve n lesz. A
sma teht a kvetkez:

Iteratv sszefuttatsi sma(M)


Kezdeloszls ltrehozsa(M)
d := M
d<n
FutMenet(d)
d := 2d

4. algoritmus. Iteratv sszefuttatsi sma.


Az elbbi smban nem mondtuk meg, hogy hol keletkezik a kezdeloszls, tovbb azt sem, hol
keletkeznek az egyes szinteken az sszefuttatsok eredmnyeknt kialakul futamrendszerek. Azt
mg el tudnnk rni, hogy maga a kezdeloszls az s sorozaton bell keletkezzen, ha Msrendezknt
egy helyben rendezt vlasztunk. De 2 darab futam sszefuttatst mr sehogyan sem tudjuk
helyben megoldani, szksg van segdterletre. Erre egy s-el azonos hosszsg z segdsorozatot
hasznlunk.

futRend(s, z, ir)
M =1

ir := sz

kezdeloszls ltrehozsa(s, z, M)
ir := zs
d := M
d<n
ir = sz

futMenet(s,z,d)

futMenet(z,s,d)

ir := zs

ir := sz
d := 2d

5. algoritmus. Az futRend(s, z, ir) algoritmus.


Itt s-ben van az input sorozat, z a segdsorozat. ir vgrtktl fggen az eredmny s ben (ir = sz) vagy z- ben (ir = zs) keletkezik. Ennek a mg mindig meglehetsen absztrakt
vltozatnak kt konkrt implementcijt fogjuk majd vizsglni, M = 1 mellett az n. kttmbs
sszefuttatsos rendezst, illetve a kls rendezket.

sszefuttatsos rendezsek II., 2016/17 2. elads


Konkrt implementcis krdsek
A programnyelvek gyakran nem, vagy nem elg hatkonyan valstjk meg a sorozatokat. Ezrt a
sorozatokra megrt absztrakt rendezket t kell rni olyan adatszerkezetekre, melyek hatkonyan
implementlva vannak. Ilyenek a vektorok s a szekvencilis fjlok. Vektort akkor hasznlunk,
amikor a rendezend sorozat hossza nem nagy, s gy elfr a szmtgp bels memrijban (bels
rendezs). Ha a sorozat hossza meghaladja a memria mrett, akkor szekvencilis fjlba helyezzk
el (kls rendezs). A kls sszefutattsos rendez nyilvn a vegyes vltozatbl szrmaztathat,
ahol M a memriban elfr rekordok szma. Struktrja lnyegben megegyezik a vegyes vltozat
korbban mr ltott vektoros vltozatval.
sszefuttatsos rendezk szekvencilis fjlokban, a kls rendezs.
Jellje tovbbra is n a sorozat elemszmt. Tegyk
fel, hogy a kzponti memriba M rekord fr
l m
n
bele s legyen n M. Vezessk be mg a N := M jellst. Termszetes tlet, hogy az inputot
tartalmaz fjlt M rekordonknt beolvassuk a a memriba, ott valamilyen bels rendezvel lerendezzk, majd az gy kialakul kezdeloszlst a vektoros vltozatnak rtelemszer mdostsval,
valamilyen sma szerint sszefuttatjuk.
Lnyeges klnbsg viszont, hogy szekvencilis fjlok esetben egy sszefuttatsi lpshez mindenkpp kell hrom fjl, kt input s egy output, hiszen egy szekvencilis fjl kt futamt nem
lehet egyszerre olvasni. Emiatt a futamok sorozatt pronknt sszefuttatni csak gy lehetsges,
ha a prok els s msodik tagja rendre klnbz fjlban van. Amennyiben azok mgis egy
fjlban lennnek, akkor az sszefuttats eltt szt kell ket msolni kt fjlba. Ez a sztmsols
megsprolhat gy, hogy a kezdeloszls ltrehozsakor s az sszefuttatsi menetek sorn mr
eleve kt fjlba irjuk ki a futamainkat. Ezt tekintjk alapmodellnek
A ngy fjlos kls rendez
Legyenek teht f1 ,f 2 , illetve g1 ,g 2 szekvencilis fjlok, kezdetben a rendezend sorozat, s legyen
az f1 -ben. M: a memriba befr elemek szma, n M.
A kezdeloszls ltrehozsa
f1 -bl M hossz darabokat olvasunk a memriba, ott valamilyen (bels) rendezvel rendezzk,
majd a kapott M hossz futamokat ciklikusan vltogatva rendre g1 s g2 -be rjuk rszfjlknt.
Ezltal g1 -ben s g 2 mindegyikn legfeljebb 1-el eltr szm, sszesen N darab M hosszsg
futam keletkezik.
Tekintsnk el attl a rszlettl, hogy ezeket a futamokat az egyes fjlokban hogyan troljuk.
Annyit tegynk fel, hogy a futamokat, mint rszfjlokat egyenknt, egymsutn, elemenknt ki
lehet olvasni, tovbb, hogy ha valamelyik futamnak vge van, akkor azt le tudjuk tesztelni.
g1
f1
hossz

1. M-es
M

2. M-es
M

...

=
g2

1. fut.
M
2. fut.
M

3. fut.
M
4. fut
M

1. bra. 4-fjlos kls rendez: a kezdeloszls ltrehozsa.

...
...

2
sszefuttatsi menetek . Amg a d futamhossz kisebb, mint n, sszefuttatsi meneteket hajtunk vgre. Egy menet az ir
any vltoz rtktl fggen vagy a g jel fjlokbl futtat ssze
(ir
any = 1) az f jelekbe, vagy fordtva, az f jelekbl (ir
any = 0) a g jelekbe. Kicsit rszletezve
egy menetet:
ir
any = 1: amg g1 ki nem rl g1 ,g 2 ugyanannyiadik d hossz futamait (a msodik rvidebb,
illetve res is lehet, az utbbi esetben az els is lehet rvidebb), egyms utn sszefuttatjuk
s az eredmnyt ciklikusan vltogatva f1 ,f 2 -be tesszk. Ezltal a futamhossz ktszerezdik.
g1
g2
hossz

1. fut.
M
2. fut.
M

3. fut.
M
4. fut
M

f1
...
...

f2

1 2 fut.
2M
3 4 fut.
2M

5 6 fut.
2M
7 8. fut.
2M

...
...

2. bra. 4-fjlos kls rendez els sszefuttatsi menete.


ir
any = 0: mint elbb, csak az f s g betk rendre felcserldnek.
Ahogy azt mr a vegyes vltozat elemzsnl lttuk sszesen h = log 2 (n/M) sszefuttatsi
menet szksges, s ha ez pratlan, akkor az eredmny f1 -ben keletkezik, mg ellenkez esetben
g1 -ben. Ezt az ir
any vltoz vgrtkre lefordtva a 0 azt mutatja, hogy az eredmny f1 -ben
keletkezett, mg az 1 azt, hogy g1 -ben.
Az algoritmus fels szintjnek struktogramja a kvetkez kppen mdosul:

4FjlosKlsRend(f1 , f2 , g1, g2 , M)

KezdEloszlsKszt(f1 , g1 , g2 , M)
irny, d := 1, M
d<n
irny = 1

FutMenet(g1 , g2 , f1 , f2 , d)
FutMenet(f1 , f2 , g1 , g2 , d)
irny, d := irny + 1(mod(2), 2d
1. algoritmus. A 4 fjlos kls rendez
Elemzs:A kls rendezk esetben a legdrgbb mvelet a kls trrl val olvass, illetve az
oda val rs. Emiatt a kls rendezk mveletignynek vizsglatnl a rekordmveletek fogjuk
szmolni. Ha egy rekordot a memriba beolvasunk a httrtrbl, akkor azt egyszer mindenkpp
ki fogjuk rni. Egy ilyen mveletprt a ezrt rvidsg kedvrt jelljnk IO-val.
Vilgos, hogy a kezdeloszls ksztse, illetve az sszefuttatsi menetek sorn minden rekord
mozog. A menetek szma h = log 2 (n/M) , s gy a mveleti igny:
IO4FjlosKlsRend (n) = n + n log 2 (n/M) = O(n log 2 (n/M)).

3
A 3 fjlos kls rendez
Ha nem ll rendelkezsnkre 4 fjl, csak a minimlis hrom, akkor - ahogy mr volt rla sz sztmsolsi menetekre van szksg. Jelljk a fjlokat f1 -gyel (most is ez az input fjl) illetve
g1 ,g 2 -vel (ezekbl fogunk sszefuttatni).
A kezdeloszlst ugyangy hozzuk ltre g1 ,g 2 -ben, mint a 4-fjlos vltozatnl. Most viszont
csak f 1 ll rendelkezsnkre az sszefuttatshoz. Emiatt az els sszefuttatsi menet sorn f 1 -en
keletkezik az sszes (2M maximlis hossz) futam. Hogy jabb sszefuttatst tudjunk vgezni,
ezeket vltakozva szt kell msolnunk g1 ,g 2 -be. gy egy sszefuttatsi menet most kt rszbl ll,
egy valdi sszefuttatsbl, s egy sztmsolsbl. A sztmsolst a legutols valdi sszefuttats
utn mr nem kell elvgezni, hiszen ilyenkor f1 -ben mr csak egy futam, azaz a teljes rendezett
sorozat van. gy:
IO3FjlosKlsRend (n) = n + 2n log 2 (n/M) n = 2n log 2 (n/M) ,
ami lnyegben duplja az eredeti vltozatnak.
A Fibonacci-fle kls rendez. Tanulsgos s a matematika informatikai alkalmazhatsga
szempontjbl is rdekes az az tlet, amelynek segtsgvel az 3 fjlos sszefuttats esetben is
meg lehet sprolni a sztmsolsokat. Ezt a mdszert Fibonacci fle kls rendeznek hvjuk.
Az egyszersg kedvrt tegyk fel, hogy a rendelkezsre ll fjljaink f1 ,f 2 ,f 3 . Most is f1
tartalmazza az inputot, melyet M rekordonknt bels rendezvel rendeznk. Tegyk fel, hogy a
keletkez futamok szma valamely Fibonacci szm, azaz N = Fj , valamilyen j-re. (Ha nem gy
lenne, hozz vesznk res futamokat). Az tlet az , hogy a kezdeloszlst most nem kiegyenslyozott sztosztssal hozzuk ltre f 2 ,f 3 -ra, hanem gy, hogy f2 -re Fj2 darabot, ill. f 3 -ra Fj1 -et
darabot helyeznk, mindkettn M a regulris futamhossz. Ezek utn az sszefuttatsi menetek a
kvetkez mdon trtnnek.
1. menet: f2 s f3 -rl Fj2 futamot sszefuttatunk f1 -re (2M futamhossz), f3 -on marad Fj3
darab (M hossz) s f2 res lesz.
2. menet :f1 s f3 -rl Fj3 futamot sszefuttatunk f2 -re (3M futamhossz), Fj4 marad f1 -en
(2M hossz), f3 res lesz s gy tovbb ciklikusn.
A lnyeg az, hogy minden menet eltt van kt olyan fjlunk, ahol vannak futamok (szmuk kt
egyms utni Fibonacci szm), mg a harmadik res. A kt nem res fjlbl a kisebbiknek megfelel
szm futamot ssze lehet futtatni az eddigi resre, aminek eredmnyekn az eddigi hosszabb
fjlban a kettvel kisebb Fibonacci sorszm futam marad. A kvetkez futamban teht ugyanez
a szituci ismtldik, csak mr eggyel kisebb sorszm Fibonacci szmokkal (itt hasznltuk ki
a Fibonacci szmok Fi Fi1 = Fi2 rekurzv tulajdonsgt). Hasonl okoskodssal belthat,
hogy a maximlis futamhosszak a Fibonacci szmokkal arnyosan nnek. A mkds elvt a a
kvetkez tblzattal szemlltethetjk (futamszm; max. futamhossz):

f1
f2
f3

kezd
0
(Fj2 ; 1)
(Fj1 ; 1)

1. menet
(Fj2 ; 2M)
0
(Fj3 ; 1M)

2. menet
(Fj4 ; 2M)
(Fj3 ; 3M)
0

...
...
...
...

j-2. menet
lsd albb
lsd albb
lsd albb

1. tblzat. Szemlltets a Fibonacci kls rendez mkdshez. A rubrikkban a (futamszm;


maximlis futamhossz) prok szerepelnek.

A j2. ilyen lps utn (j(mod3) -tl fgg valamilyen ciklikus permutciban) a 0, (F0 ; Fj1M), (F1 ; Fj
hrmast kapjuk, ami F0 = 0 miatt azt jelenti, hogy pontosan egy nem res fjlunk van,
 benne a tel- 
jes rendezett sorozattal. j-re a Fibonacci-szmokra rvnyes elllts alapjn a j = log 1+5 (n/M)
2

1, 43 log 2 (n/M) becsls addik. De mivel az egyes menetekben nem minden elem mozog, ezrt
az 1.43 konstansnl jobb eredmny is adhat. Bizonythat, hogy a Fibonacci kls rendez IO
szma: 1, 041 log 2 (n/M) n , ami lnyeges javuls a korbbi 2 log 2 (n/M) n-hez kpest.

Egy mdszer a kezdfutamok elemszmnak nvelsre


A vegyes sszefuttatsos rendezkben szerepl M kszbszmnak a h menetszm meghatrozsban van szerepe (h = log 2 (n/M), minl nagyobb az M, annl kisebb a h). A kls rendezknl
M-et gy llaptjuk meg, hogy az megegyezzen a memriba befr elemek maximlis szmval.
Emiatt (legalbbis ezzel a stratgival) ltszlag nem lehetsges M-nl hosszabb kezd futamokat
ellltani (nem fr tbb elem a memriba).
Hogy volna lehetsges mgis M -nl hosszabb kezdfutamokat ellltani? Az tlet az, hogy az
ppen aktulis futamot nem a bels memriban ksztjk el, hanem folyamatos olvass mellett
az eredmny fjlban elemenknt lltjuk ssze. A bels memrit egy maximlisan M kapacits ksleltetknt hasznljuk. A ksleltets azt jelenti, hogy az eredmny fjlba az input M + 1.
elemnek olvassakor rdik ki az els elem. A ksleltetben lev elemek kt rszre bomlanak,
egyrszt azokra, melyek az aktulis futamba beilleszthetk, illetve azokra, melyek csak a kvetkezbe. Kezdetben, az els M elem olvassa sorn minden elem az aktulisba beilleszthetk kz
kerl, a kvetkez futamra mg nem vr senki. Az M + 1. olvassstl kezdve kezdjk el kirni az
eddig res eredmnybe a az aktulis futamra vrok kzl a legkisebb elemet. Az jonnal olvasott
elemet, amennyiben az nagyobbegyenl az utoljra kirtnl, az aktulisba mg beilleszthetk kz
tesszk, egybknt a kvetkez futamra vrk kz (ezltal az els rsz elemszma eggyel cskken,
a msik eggyel n, a kett sszelemszma pedig M marad). Amennyiben mr nincs beilleszthet
elem, akkor az aktulis futamot lezrjuk jat nyitunk, melybe az eddig a kvetkez futamra vr
elemeket fogjuk elhelyezni. Amennyiben nincs az inputon tbb elem, akkor a mg beilleszthetk
kirsval az aktulis futamot lezrjuk, majd a kvetkez futamra vrkat is elhelyezzk egy jabb
futamba. A ksleltetses futamhossznvels a kvetkez brval szemlltethet:
eredm
eny

Aktulisba illeszthetk
(M kapacits ksletet)
Kvetkezre vrk

input

3. bra. Futamhossz nvels ksleltetssel


Az elbbi gondolatot gy valstjuk meg, hogy a memrit kt, sszmretkben legfeljebb M
elem trolsra kpes minimum prioritsi sorknt mkdtetjk. AktF utSor szolgl az akutlis
futamba mg beilleszthet elemek szmra, mg K ovF utSor a kvetkez futamra vrk szmra.
AktF utSor prioritsi sor volta garantlja azt, hogy az eredmny tnyleg futam lesz (hiszen gy a
mg kirhat vrakozk kzl mindig a legkisebb kerl kirsra).
A rszletektl eltekintve feltesszk, hogy rendelkezsnkre llnak az f -re s g-re a szoksos
szekvencilis fjlokra jellemz mveletek, tovbb adottk a futamokra azok a mvletek, melyekkel
j futamot lehet nyitni, egy nyitott futamba rni lehet s egy futamot le lehet zrni.
Az algoritmus fels szintje:

Futamhossz nvel(f, g, M)
f sg megnyitsa

A ksleltet feltltse
f 6= res
KsleltetettFutambars
A ksleltet kirtse
f sg lezrsa
2. algoritmus. A futamhossz nvel smja.
A ksleltet feltltse AktF utSor s K ovF utSor inicializlst, majd f els M elemnek (ha
kevesebb van, sszes elemnek) AktF utSor -ba helyezst jelenti.
A KsleltetettFutambars sorn f -bl valamely x vltozba beolvassuk a kvetkez elemet,
tovbb egy msik y vltozba kivesszk (ha nem res) AktF utSor legkisebb elemt. Az y -t
beillesztjk az aktulis futamba (ksleltetett futambars), mg x-et a vrakozk kz helyezzk
(x y esetn az AktF utSor -ba, egybknt a K ovF utSor -ba). Ha az elbbiek utn AktF utSor
ress vlik (nincsen az aktulis futamba beilleszthet elem), akkor lezrjuk az aktulis futamot,
jat nyitunk s megcserljk AktF utSor s K ovF utSor szerept s ezek utn folytatjuk ugyangy,
mint az elbb.
Ha f elfogyott, akkor kirtjk a ksleltet oly mdon, hogy AktF utSor tartalmval befejezzk az aktulis futamot, majd K ovF utSor -bl ksztnk egy j futamot.
Ez a ksleltetsen alapul technika bizonyos esetekben nagyon hatkony. Pldul rendezett
input fjl esetn sszesen egy futam keletkezik.
Bizonythat, hogy vletlen sorozat esetn a vrhat futamhossz 2M.

Csere rendezsek, 2016/17 3. elads


A csere rendezk is gy szrmaztathatk, hogy a rendezs dencijt fogalmazzuk t. Emlkeztetnk r, hogy valamely s K sorozatban a i < j index elemek inverziban vannak , ha
si > sj . i(s) azoknak a proknak a szmt jelli, melyek inverziban vannak s -ben. A rendezettsg
tfogalmazsa:
s rendezett |s| 1 vagy |s| > 1 s i(s) = 0
Termszetes gondolat, hogy egy sorozatot gy rendezznk, hogy a rossz sorrendben lev prokat
rendre megcserljk, bzva abban, hogy gy cskkenni fog az inverzk szma elrve legvgl a 0-t.
Az elbbi stratgin alapul rendezket hvjuk csere rendezknek.
Br nyilvn mindenki rzi, hogy egy rossz sorrendben lev pr cserje valban cskkenti az
inverzik szmt, azrt van helye bizonyos ktelyeknek is, hiszen a pr cserjvel ugyan egy inverzi biztosan megsznik, de kzben keletkezhetnek (s keletkeznek is) j inverzik. A tnyleges
helyzetet az albbi lemmban mutatjuk be.
0.1. lemma. Lemma: Ha az s sorozatban az 1 i < j |s| indexekre si > sj , akkor a kt elem
cserjvel kapott s sorozatra i(s ) = i(s) (2D + E + 1), ahol
D := |{l; i < l < j s si > sl > sj }| s E := |{l; i < l < j s (si = sl vagy sj = sl )}|.
Bizonyts:
1. Az olyan indexprok esetn, ahol egyikk sem egyenl i vagy j valamelyikvel, az adott
helyen lv elemek nem vltoznak, s gy az inverzis helyzet sem.
2. Az (i, j) prra vonatkozan 1 inverzi a cservel megsznik.
3. Az olyan indexprokat, ahol ez egyik index valamilyen i s j -tl klnbz l, a msik pedig
i vagy j az l szerint prokba rendezve, egyttes hatsukat tekintve vizsgljuk.
(a) Ha l < i, akkor a csere utni s -ben az (l, i), illetve (l, j) inverzs helyzete egyezik
(l, j), illetve (l, i) eredeti, s -beli inverzis helyzetvel, ezrt az ilyen indexpr prok
sszessgkben az inverzszmot nem vltoztatjk. Hasonl a helyzet j < l esetben is.
(b) Olyan l-ekre, ahol i < l < j s (sl sj vagy si sl ) az (i, l) s (l, j) inverzis helyzete
ugyanolyan lesz a csere utni s -ben, mint az eredeti s -ben, ezeknek sincs hatsuk az
inverzk mennyisgre.
(c) Olyan l-ek esetben, ahol i < l < j s sj < sl < si az (i, l) s (l, j) indexprok is
inverziban voltak eredetileg, mg a csere utn mr nem. Ezekre az l-ekre teht kt
inverzi megsznik.
(d) Olyan l-ek esetben, ahol i < l < j s (si = sl vagy sj = sl ) az (i, l) s (l, j) indexprok
egyike volt inverziban eredetileg, ami a csere utn megsznik.
Mivel 1, 2, 3 vizsglatval az sszes lehetsges prt megvizsgltuk, az llts a 2. s 3.(c), (d)
esetek alapjn addik.
A rendezs tfogalmazsa azt sugallja, hogy mindaddig, amig az inverzk szma nem 0, keressnk inverzban lv prt s cservel szntessk meg a kztk lv inverzit (s esetleg jnhny
tovbbit is). Az eljrs smja a kvetkez:

CsereRend(s)
Elspr(i, j)
i(s) 6= 0
s i > sj

si sj
jpr+(i, j)

jpr-(i, j)

1. algoritmus. A CsereRend(s) algoritmus.


Itt az Elspr(i, j) meghatrozza az els sszehasonltand prt, mg jpr+(i, j), illetve jpr(i, j) - attl fggen, trtnt -e csere, vagy sem - valamilyen stratgia mentn elllt egy j,
sszehasonltand prt. Ha az aktulis pr inverziban van, akkor megcserli ket, ezzel cskkentve
az inverzik szmt.
Vilgos, hogy az elbbi sma akkor lesz tnyleges rendezs, ha valamilyen mdon gondoskodunk
az sszes inverziban lev pr - valamilyen sorrend szerinti minl hatkonyabb - feldertsrl. Ha
az rintett prok sorozata nem fgg magtl az s -tl, csak annak hossztl, statikus stratgirl
beszlnk, egybknt dinamikusrl. Kicsit mskpp fogalmazva:
Statikus stratgia: Az j prt elllt eljrs s hossztl fgg, elre rgztett prsorozat elemeit veszi sorra.
Dinamikus stratgia: Az j prt az algoritmus pillanatnyi helyzete alapjn (teht vgs soron
s-tl fggen) hatrozzuk meg.
A stratgia statikussga a smban gy jelentkezik, hogy az jpr+(i, j), illetve jpr-(i, j) megegyezik.
Plda dinamikus stratgira: a korbban mr ltott Quick-sort eljrs, ahol az sszehasonltott
indexpr egyik tagja a "lyuk (az ott lv rtket hatkonysgi okokbl egy vltozba tettk, de ez
a lnyeget nem rinti). Ha nincs inverzi, akkor a kvetkez pr keresse a lyuk fel trtnik. Ha
inverzit talltunk, akkor az elcserlt elem helyn j lyuk keletkezik, s a rgi lyuktl folytatdik
az inverz keress.
Plda statikus stratgira: A korbban mr ltott bubork rendezs n elemre. A vgignzett
prsorozat (1, 2), (2, 3), ..., (n 1, n), (1, 2), ...(n 2, n 1), ...(1, 2), (2, 3), (1, 2).
A csere rendezk hatkonysgt megnvelhetjk, ha megengedjk, hogy egy idben tbb indexprt is megvizsgljunk s inverzi esetn az ott lev elemeket megcserljk. Nevezzk az ilyen
eljrsokat prhuzamos csere rendezknek. Termszetesen csak olyan prok egyttes vizsglatt
engedjk meg, melyek egymstl fggetlenek. Ez motivlja a kvetkez dencit:
A H {1, ..., n}{1, ..., n} indexpr halmazt fggetlen halmaznak nevezzk, ha (i1 , i2 ), (i3 , i4 )
H esetn |{i1 , i2 , i3 , i4 }| = 4 (mind klnbznek).
A prhuzamostott csere rendez teht - az eredeti sma analgijra - mindig egy-egy j
fggetlen halmazt llt el, az inverzik vizsglata s az esetleges cserk egyszerre, prhuzamosan
trtnnek.
A prhuzamostott csere rendezknl is van rtelme a dinamikus s statikus stratginak. Az
is vilgos, hogy a szekvencilis vltozat specilis esete a prhuzamostottnak.

3
A tovbbiakban a statikus, prhuzamostott rendezkkel fogunk foglalkozni.
Legyen teht H1 , H2 , ..., Hd valamilyen, fggetlen halmazokbl ll, rgztett sorozat. A prhuzamosan hasonltunk s cserlnk stratgia nagyon jl megvalsthat egy absztrakt szmtgpmodellen, melyet rendez hlzat-nak hvunk. (Ltni fogjuk, hogy nem minden rendez hlzat
rendez, ezrt tettk az elnevezst idz jelek kz. A tovbbiakban idz jelek nlkl hasznljuk a
rendez hlzat elnevezst, tudva, hogy az nem felttlenl jelenti annak funkcijt.)
A H1 , H2 , ..., Hd fggetlen halmazokbl ll sorozatra pl rendez hlzat smja a kvetkez:

s1
s2
s3
si
kapu
sj
sn
H1

H2

Hl

Hd

1. bra. A H1 , H2 , ..., Hd -ra pl rendez hlzat


A hlzatnak n darab vonala (1-tl n-ig sorszmozva) s m darab gynevezett kapurendszere
van. Az i. s j. vonal ssze van ktve a Hl -nek megfelel l. vonalon (i, j) Hl .
A hlzat diszkrt idsklban, temenknt mkdik gy, hogy a vonalakon valamely
K rendezett halmazbl vett rtkek haladnak balrl jobbra. Minden temben egy kapurendszeren lpnek t, szinkronizlt mdon. Kt, kapuval sszekttt vonalon lev rtk megcserldik a
kapu hatsra, ha a kapu eltt a kisebb sorszm vonalon lev rtk nagyobb volt, mint a nagyobb
sorszmn.
A hlzatot gy inicializljuk, hogy a legels kapurendszer el a vonalakra egy s K n elem
sorozat elemeit helyezzk. A hlzat ezt az s sorozatot rendezi t gy, hogy megsznteti cservel
a kapuknak megfelel esetleges inverizkat. A vgeredmny az utols kapurendszer utn kialakult
sorozat.
Lemmnk alapjn vilgos, hogy egy kapurendszer cskkenti vagy nem vltoztatja az s sorozat
inverziszmt, ezrt a vgeredmny sorozatban soha nem lehet tbb inverzi, mint az eredetiben
volt. Egy rendez hlzat teht a bemen sorozat egy inverizszmot nem nvel trendezst
hajtja vgre (nem felttlenl rendez!). Ha minden bemenet esetn a vgeredmny sorozat inverziszma 0, akkor persze a hlzat funkcionlisan is rendez hlzat.
Ha egy hlzat minden kapurendszere 1 kaput tartalmaz (ami a prhuzamos mkds szempontjbl a lehet legrosszabb), akkor a hlzat szekvencilis, statikus, csern alapul algoritmust
valst meg.
Valamely R rendez hlzat vgrehajtsi idejt R temeinek (kapurendszereinek) szmval
mrjk s U R -el jelljk.

4
Pldk rendez hlzatokra:
Szekvencilis maximum kivlaszt n elemre, a Maxn hlzat:

Maxn

H1

H2

H3

Hn1 Hn

2. bra. A szekvencilis maximum kivlasztsnak megfelel hlzat.


Vilgos, hogy Maxn a legnagyobb sorszm vonalon adja vissza a maximlis elemet. Az is
vilgos, hogy Maxn -ben nem haszltuk ki a prhuzamostsban lv elnyket, az temszm
UMaxn = n 1.
Ahogy a pldbl is ltszik, rendez hlzatok esetben valamely feladat megoldst nem
egy konkrt hlzat, hanem egy paramterezett hlzati sma szolgltatja, ahol a paramter a
vonalszm fggvnye (legtbbszr maga a vonalszm). A tovbbiakban mindig a feladatot megold
smt fogjuk elkszteni, amibl egy konkrt mrethez tartoz egyedi hlzat megkaphat.
Ksztsnk most olyan maximum kivlaszt hlzatot, ahol kihasznljuk a prhuzamosts
elnyeit. A maximlis elemet most is az utols vonalon (a rajz szerinti legals) vrjuk. Az tlet az
Oszd meg s uralkodj stratga s a rekurzi elve alapjn az, hogy a hlzatot elfelezzk egy als
(kisebb index) s egy fels rszre. Mindkettre rekurzvan, egymssal prhuzamosan odaillesztjk
a mr denilt kisebb vonalszm hlzatunkat, majd mindkt rsz legutos vonalra odaillesztnk
egy kaput. Elszr vizsgljuk azt az eset, amikor n kett hatvny, azaz n = 2m . A hlzat
elnevezsben tradicionlisan m = log2 n -et hasznlunk.
PrhMax1 nylvn kapuval sszekttt, 2 vonalbl ll hlzat. Legyen m > 2, tovbb tegyk
fel, hogy PrhMaxm1 -et mr megptettk. Helyezznk el prhuzamosan egy-egy PrhMaxm1 -et
az els 2m1 vonalra, illetve a msodik 2m1 vonalra. Ezek rendre a 2m1 . vonalon, illetve a 2m .
vonalon adjk az als, illetve fels rsz maximumt. Ezeket a vonalakat kapuval sszektve 2m .
vonalon most mr az sszes elem maximumt kapjuk. Vilgos, hogy az gy kapott PrhMaxm a
tournamenttel val maximum kivlaszts prhuzamostsa.
PrhMaxm smja:

5
PrhMaxm1
z1
z2
b

z2m1
z2m1 +1
b

z2m 1
z2m
PrhMaxm1
3. bra. A prhuzamostott maximum-kivlaszt.
(Megjegyzs: Ugyanezt a hlzatot szolgltatja a kvetkez konsturkci is. Az els temben
rendre kssk ssze kapuval a pratlan s pros vonalakat. A prok maximuma nyilvn a pros
vonalak valamelyikn lesz. Helyezznk el ezek utn a pros vonalakra egy PrhMaxm1 -et. Ez az
utos pros vonalra kiteszi a pros vonalak maximumt, ami most is az sszes elem maximuma
lesz.)
ParhMaxm1 + 1 Innen
Vilgos, hogy PrhMax1 temszma 1, mg m 2 esetn ParhMaxm = U
ParhMaxm = m = log2 n =-et
kapjuk.
Trjnk r arra az esetre, amikor n nem kett hatvny. Egsztsk kis sorozatunkat az elejn
annyi mnusz vgtelen -nel, hogy a sorozat hossza, a lehet legkisebb 2m alak szm legyen. Erre
az m -re ksztsk el a mr ltott PrhMaxm -et. Vilgos, hogy PrhMaxm -ben a hlzat elejn
lev, -t tartalmaz vonalakon nincs rdemi mkds (hiszen k brminl kisebbegyenlk).
Emiatt a smbl ezeket a vonalakat s a rjuk ptett kapukat kihagyva az eredeti sorozat maximuma jelenik meg a legutols vonalon. Az temszm becslsben annyi az eltrs az ltalnos
esetben log2 (n) helyett annak fels egsz rsze, log2 (n) szerepel.
Trjnk most t egy valban rendez pldra, a szekvencilis bubork rendezs hlzati smjra:

Maxn

Maxn1

Max2

4. bra. A bubork rendezsnek megfelel hlzat.

6
Speciliasan n = 5-re:

A ksbbi temekben vgzett, fggetlen sszehasonltsok kapui balra betolhatk, ezltal kapjuk meg a bubork rendezs egy prhuzamostott vltozatt, a piramis rendezst. Ezt is n = 5-re
szemlltetjk:

A rendez hlzatoknl a vgrehajts temszmt, vagyis a kapurendszerek szmt szmoljuk


ki a mveletigny jellemzsre. Ez a piramis rendezsnl:
Piramisn = 2n 3
U
(A betols utn Maxn ,Maxn1 , ..., Max3 , mindegyike egy - egy ferde vonalon helyezkedik el,
melyeket els kt kapujukkal azonosthatunk, ez 2(n 2) = 2n 4 tem. A tovbbi +1 tem a
vgn lv Max2 egy tembl addik.)
Egy kicsit hatkonyabb az gynevezett pratlan/pros rendezs, mely n tembl ll. Az els
temben ssze van ktve minden pratlan index vonal a kvetkez prossal (kivve termszetesen

7
az utolst). A msodik temben minden pros vonal van sszektve az t kvet prossal (itt is
kivve az utolst). A tovbbi temekben az elbbi kt temet ismteljk periodikusan ( pratlan
n esetn csak az elst). (bra kszlben.)
Van-e jobb temszm rendez hlzat a linerisnl? A krds vizsglathoz elszr als
becslst egy funkcionlisan is rendez hlzat temszmra.
0.1. ttel. Legyen Rendn egy n elemet rendez rendez hlzat.
Ekkor URendn = (log2 (n)).
Bizonyts:
h i
Vilgos, hogy egy temben (a fggetlensg miatt) maximum n2 kapu lehet. Vizsgljuk azt a
SzekRend szekvencilis sszehasonltsos rendezst, mely a kapurendszer elemn szekvencilisan
vgigmegy. Erre
SzekRend (n) n URendn (a)
MO
2
Az sszehasonltsos rendezk alapttelbl addan K, n0 , hogy n n0 -ra
SzekRend (n) (b)
Knlog2 (n) M O
(a) s (b) sszevetsvel, n n0 -ra
Knlog2 (n)

n
URendn
2

ahonnan 2Klog2 (n) URendn , azaz URendn = (log2 (n)).


Ksztnk egy (log2 (n))2 -es rendez hlzatot.
A Batcher-fle rendez hlzat
Elszr tekintsk az albbi, cipzrszeren sszefsl szekvencilis algoritmust. Elfelttele: x = x
, y = y ; mindkett rendezett sorozat.

CipFsl(x, y, z)
|x||y| = 0

Cipszt(x, x , x )
Cipszt(y, y , y )
z := xy

fut(x , y , z )
fut(x , y , z )
Cipssze(z , z , z)

2. algoritmus. A CipFsl(x, y, z) algoritmus.


Plda:
x = 2, 23, 28, 43, 79, 100
y = 22, 25, 46, 48, 50, 90

8
x = 2, 28, 79, x = 23, 43, 100, z = 2, 22, 28, 49, 50, 79
y = 22, 49, 50, y = 25, 48, 90, z = 23, 25, 43, 48, 90, 100
z = 2, 23, 22, 25, 28, 43, 49, 48, 50, 90, 79, 100
A pldabeli z majdnem rendezett lett az algoritmus vgrahajtsa utnn, csak nhny (2i, 2i+1)
alak indexpr esetn ltunk inverzit. Krds, hogy ez vletlen-e?
0.2. ttel. A CipFsl eredmnyeknt kapott z sorozatban inverzi legfeljebb a (2i, 2i + 1) alak
prok kztt lehet.
Bizonyts:
Ha x vagy y brmelyike res, az llts nyilvnval.
Az lltst elszr az |x|, |y| pros esetre ltjuk be. Legyen |x| = 2n, |y| = 2m (n, m > 0).
Mivel Cipssze miatt z 2-rendezett, ezrt elg azt beltni, hogy a) i = 1, . . . , n + m-re
z2i1 z2i s b) i = 1, . . . , n + m 2-re z2i z2i+3 .

A Cipssze miatt z2i1 = zi , z2i = z i s z2i+3 = zi+1


. Ezrt

a) i = 1, ..., n + m-re zi z i s

b) i = 1, ..., n + m 2-re z i zi+2


-t kell beltni.

a) x e x , y e y (x, y rendezettek!)
Innen x y e x y , ahonnan a ltra lemmval z e z , teht 1 i n + m-re zi z i .
b) A ltra lemma kvetkez tfogalmazst hasznljuk:
0.2. lemma. Ha az x s y sorozatok esetn olyan i1 , ...ir ill. j1 , ..., jr klnbz elemekbl
ll sorozatok, hogy xi1 yj1 , ..., xir yjr , akkor az x, y rendezsvel kapott x , y sorozatokra
pre(x , r) e su(y , r).
Bizonyts:
Rendezzk az x ill. y-t gy, hogy x elejn legyenek az i1 , ..., ir index elemek, mg y vgn
legyenek a j1 , ..., jr index elemek. Az gy kapott x s y sorozatokra pre(
x, r) e su(
y , r), tovbb
x rendezettje = x rendezettje = x y rendezettje = y rendezettje = y
Az eredeti lemmbl teht pre(x , r) e su(y , r).
Visszatrve az eredeti problmra:
pre(x , n 1) e su(x , n 1)
pre(y , m 1) e su(x m 1) (x, y rendezettek)
Ekkor x y -ben = n + m 2 helyen van x y -beli elemnl kisebb elem. Emiatt

pre(z , n + m 2) e su(z , n + m 2) , ahonnan z i zi+2


i = 1, 2..., n + m 2-re.
Legyenek most x, y olyanok, hogy van kzttk pratlan. Egsztsk ki ket +-nel pross,
legyenek ezek x, y. Alkalmazzuk x, y-ra a mr bizonytott rsz lltst. Teht z-ban csak (2i,
2i + 1) helyek kztt lehet inverzi. q-val jellve x, y elemeinek maximumt, z a kvetkez alak:
a) z + , ha csak |x|, |y| egyike pratlan. (a + a prosok kztt az utols lesz)
b) pre(z, |z| 1)q , ha |x|, |y| mindegyike pratlan. (a kt + a prosak vgn, q a
pratlanok vgn lesz.)
Az a) esetben vilgos, hogy z-ben is csak pros-pratlan helyen lehet inverzi.
A b) esetben z utols elem nlkli rszben csak a pros pratlan helyek kztt lehet inverzi,
mg q - ami nylvn z utols eleme - nem okozhat inverzit semmivel, hiszen nagyobbegyenl az
sszes tbbi elemnl.
A CipFsl eljrst a pros-pratlan helyeken val inverzik megszntetsvel kiegsztve a
lemma alapjn egy sszefuttat algoritmust kapunk, melyet a tovbbiakban prospratlan sszefuttatsnak fogunk nevezni.

5. bra. A pros pratlan sszefuttat m=1 -re


Mirt lehet j a prospratlan sszefuttats algoritmusa egy hatkony rendezhlzat ksztsre. Azrt, mert a prospratlan helyeken val inverzik megszntetse sorn vizsglt (2i, 2i + 1)
(1 2i < 2i + 1 n + m) alak prok fggetlen prhalmazt alkotnak, s gy egy prhuzamos
lpsben az sszes z -beli inverzi megszntethet.
A Batcher fle rendez hlzat az sszefuttatsos rendez smjt kveti. A kt rszre bontott
sorozatot rszenknt rendezzk, majd a kt rendezett sorozatot prospratlan sszefuttatssal
sszerendezzk. Vizsgljuk elszr azt az esetet, amikor a rendezend sorozat hossza 2 pozitv
egsz hatvnya (ksbb foglalkozun az ltalnos esetettel). Elszr az sszefuttat rszt tervezzk
meg. Ahogy a maximum kivlasztsnl is csinltuk, a hlzat elnevezsben n = 2m helyett annak
logaritmust, m-et hasznljuk.
Jelljk PPm -el az |x| = |y| = 2m1 hossz rendezett sorozatokat un. prospratlan sszefuttatssal sszerendez rendez hlzatot, ahol x-et a n vonalszm hlzat elejre, mg y-t a
vgre helyezzk. A topolgia miatt a a Cipszt s Cipssze algoritmusokat kln nem kell vgrehajtanunk, azok a pratlan, illetve pros index vonalakra val hivatkozssal automatikusan
megtrtnnek.P P1 nylvn a kvetkez:
PPm1 pratlanokon

PPm :

z1
z2
x
z3

z2m
PPm1 prosokon
6. bra. A pros-pratlan sszefuttatssal sszerendez rendez hlzat.
Legyen m > 1 . Feltve, hogy PPm1 -et mr elksztettk, helyezzk el annak egy pldnyt
a pratlan vonalakon (a topolgia miatt ez x s y sszefuttatst jelenti), egy pldnyt a pros
vonalakon (x s y sszefuttatsa). Ezek ugyanazon temekre illeszthetk, hiszen a pratlan illetve pros indexek a fggetlensg szempontjbl egymssal nincsenek interakciban. A topolgia

10
miatt az gy kialakul eredmny mr az cipzr szeren sszefztt z, melyre mr csak a prospratlan helyeket vizsgl kapurendszert kell alkalmazni, hogy a vgn megkapjuk az sszefuttatott
rendezett sorozatot.
A mveletignyre a kvetkez rekurzit adhatjuk:

1
m=1
P Pm =
U
U
P Pm1 + 1 m 2
A rekurzi feloldsval UP Pm = m = log2 (n) .
Most ksztsk el az elbbi prospratlan sszefuttatson alapul Batcher fle rendez hlzatot, Bm -et, 2 egsz hatvnyai mellett. B 0 nyilvn egy vonal, B 1 megegyezik PP1 -el. Ha B m1 -et
mr megptettk, akkor helyezzk el ennek egy pldnyt az els 2m1 vonalon (kis indexek), mg
egy msikat a msodik 2m1 vonalon (nagy indexek). Ezek ugyanazon temekre illeszthetk, hiszen a kis, illetve nagy indexek a fggetlensg szempontjbl egymssal nincsenek interakciban.
Az gy kialakult sorozatra alkalmazhatjuk a PPm hlzatot, melynek eredmnyeknt megkapjuk a
rendezett sorozatot.
Bm :

Bm1

PPm
z1
z2
b

zn/2
zn/2+1
b

z2m
Bm1
7. bra. A Batcher-rendez.
A hlzat
temszmra a kvetkez rekurzi adhat:

m=1
Bm = 1
U
U
Bm1 + UP Pm m 2
Innen felhasznlva az UP Pm = m sszefggst s feloldva a rekurzit UBm = 1 + 2 + ... + m =
m(m+1)
2 (n)+1)
= log2 (n)(log
.
2
2
Mi a helyzet akkor, ha n nem 2-hatvny? Egsztsk ki a sorozatot a vgn +-el gy, hogy
hossza a legkisebb n-nl nagyobb kett hatvny, 2m legyen s erre ksztsk el a Bm hlzatot.
Vilgos, hogy az n + 1, ..., 2m vonalakra illeszked kapukon soha nem lesz csere, emiatt ezeket a
kapukat s vonalakat elhagyva n vonalra illeszked Batcher-rendezt kapunk.
Az temszmot illeten annyi a vltozs, hogy a kpletben m = log2 (n) szerepel. sszessgben nagysgrendben teht n elem esetben a Batcher rendez ((log2 (n))2 ) id alatt, teht
polilogaritmikusan rendez.

Edny rendezk, 2016/17 4. elads


Az eddigiekben olyen rendezsi mdszerekkel foglakoztunk, ahol a < K , > teljesen rendezett
halmazrl csak azokat az informcikat hasznljuk, melyek a K-n adott rendezssel kapcsolatosak.
Az s input sorozatrl feltehettnk si sj alak krdseket, s a kapott eredmnyek rendszere
alapjn lltottuk el a rendezett sorozatot. Az ilyen rendezkrl lttuk, hogy a legrosszabb esetben
az sszehasonltsi szm legalbb nlog2 (n)-es.
Ha a K halmaz olyan, hogy a rendezsi relcit K elemeinek szerkeztete hatrozza meg, akkor
ms fajta rendezs is elkpzelhet. Nem sszehasoltsokat vgznk, hanem az elemek szerkezete alapjn trtn sztvlogatst. Az egyes sztvlogatsok eredmnyei rszsorozatok lesznek,
melyeket ednyeknek szoks nevezni. Emiatt az ilyen mdszereket ednyrendezknek hvjuk.
A tovbbiakban hast fggvny alatt egy : K [0...M 1] alak fggvnyt rtnk.
(A nevet az indokolja, hogy - ahogy azt ksbb ltni fogjuk - ennek rtkei alapjn hastjuk szt
sorozatainkat rszekre.) Egy hast fggvny illeszkedik a K-n adott rendezshez (k1 ) <
(k2 ) k1 < k2

Az ednyrendezs smja
Tekintsk t elszr a mdszer smjt, melyet EdnySma -nak fogunk hvni. Ennek bemen
paramtere az s K sorozat s egy , a rendezettsghez illeszked hast fggvny. Az s mellett
felvesznk mg M db j, kezdetben res, q0 , q1 , . . . , qM 1 -el jellt K -beli sorozatot, ezek lesznek
az ednyek. Mind s-et, mind q0 , q1 , . . . , qM 1 -et sorknt fogjuk kezelni, azaz elemet kivenni bellk
az elejkrl, mg betenni csak a vgkre lehet (gy a kivtel sorn megmarad a beraksi sorrend).
Kezdetben az ednyek resek. Az algoritmus ciklusban feldolgozza s-et s a kiolvasott elemeket
rtkk szerint a megfelel ednyekbe teszi (sztraks), majd az ednyeket a az indexk szerint
nvekven s-be sszefzi (sszefzs).

EdnySma(s, )

q0 , q1 , . . . , qM 1 :=
s 6=
Kivesz(s, x)
Betesz(q(x) , x)
s := q0 q1 . . . qM 1

1. algoritmus. Az edny rendezs smja

2
Az EdnySma, s ltalban az ednyrendezsek esetn az algoritmusok mveleti idejt, illetve
helyfoglalst szekvencilis brzolst felttlezve fogjuk vizsglni. Bizonyos esetekben utaluk r,
hogy mi volna mskpp lncolt megvalsts esetn. Felttelezzk tovbb, hogy K minden eleme
egyforma mret.
EdnySma minden elemet ktszer mozgat, egyszer a sztraks s egyszer az sszefzs sorn,
vagyis M EdenySema (n) = 2n ( n az s hossza). (Lncols esetn az sszefzs n -tl fggetlenl, M
pointer tlltssal hajthat vgre).
A sma memriaignynek vizsglatakor egysgnek egy K-beli elem hosszt vesszk. n helyet
foglal el maga az s, mg Mn hely kell az ednyeknak, hiszen minden ednyt arra kell felkszteni,
hogy akr az sszes elem bele fog kerlni. gy S EdenySema (s) = (M + 1)n. M = 2 esetben a
3n helyfoglals cskkenthet azzal az gyes fogssal, hogy a q0 , q1 ednyeket egymssal szembe
fordtjuk, dinamikusan megosztva kzttk az n helyet. Ily mdon a helyfoglals a 2/3 -ra, 2n
-re cskkenthet.
Mg nem vilgos, mi kze van EdnySma -nak a rendezsekhez. Mivel illeszkedik az elrendezettsghez, a sztraks utn a kisebb index ednyek elemei rendre mind kisebbek, mint a
nagyobb index ednyek elemei. Vilgos, hogy ha az ednyek a sztraks utn valamilyen okbl
mind kln-kln rendezettek, akkor az sszefzs - az elbbiek miatt - rendezett sorozatot eredmnyez, vagyis a sma rendez. Ha ez bekvetkezik, akkor tkletes ednyrendezsrl beszlnk.
Az ednyek rendezettsge gy ltalban nem teljesl, csak bizonyos felttelekkel. Ilyen felttel
lehet pldul, hogy ha esetben (k1 ) = (k2 ) -bl kvetkezik k1 = k2 (hiszen ilyenkor minden
edny legfeljebb egy fle elemet tartalmaz). Erre egy konkrt plda. Legyen K = [A . . . B] egsz
intervallum a szoksos rendezssel, M = B A + 1 0 , tovbb (x) = x A. Vilgos, hogy
illeszkedik a K-n lv rendezshez s az ednyek mindegyikbe csak egy fle elem kerlhet (qi -be
A + i). Kvetkezskpp a pldban EdnySma tkletes rendezs.
Hogyan rhetjk el ltalnossgban, hogy az sszefzs eltt minden edny rendezett legyen?
Az egyik lehetsg, hogy csak bizonyos - az ednyek rendezettsgt garantl - s-eket engednk
meg az eljrs bemeneteknt (elrendezses vltozat).
A msik, durvbb, de mindig mkd lehetsg, hogy az ssszefzs eltt (a sztraks utn)
minden ednyt lerendeznk valamilyen rendezssel (utrendezses vltozat).
Az elfeltteles vltozat esetben valamilyen elfeldolgozs eredmnyeknt alakul ki a sma
alkalmazhatsgnak elfelttele. Az utrendezses vltozatnl pedig az ednyek rendezse jelentkezik tbbletknt az eredeti smhoz kpest.
A tovbbiakban kt klasszikus pldn, a szmjegypozci szerinti rendezs kt vltozatn keresztl mutatjuk be az elrendezses s utrendezses strratgia hasznlatt. d jegy, r-ris szmrendszerben felrt szmokat fogunk rendezni az ednysma hasznlatval.

Szmjegypozici szerinti rendezs


Legyen teht K = [0...r 1]d , ahol r 2 s d 1, K-n a rendezs pedig legyen a szoksos
lexikograkus rendezs.
Valamely e K szmot jegyenknt ed ed1 ...e2 e1 alakban runk, ahol az e1 a legkisebb helyirtk, mg ed a legnagyobb helyirtk jegy.
Deniljuk K-n a i -vel jellt (i = 0, . . . , d) ,i rendezsnek hvott relcikat a kvetkez
rekurzival:
0 legyen a teljes relci, mg e i+1 f ei+1 < fi+1 vagy ei+1 = fi+1 s e i f
(i csak a szmok utols i jegyt vesszi gyelembe a rendezs sorn.).

3
Az i rendezsi relci annyival gyengbb fogalom a teljes rendezsnl, hogy nem teljesl r a
trichotmia. Viszont tranzitivitsa miatt egy sorozat i rendezettsge ugyangy rtelmezhet, mint
egy teljes rendezs esetben. Van rtelme teht hogy i szerint rendezni, az ilyen eljrsokat i
rendezsnek fogjuk hvni.
A denci alapjn vilgos, hogy d megegyezik az eredeti relcival, ezrt elegend d rendez
eljrst kszteni.
A rendezs sorn a kvetkez mdon denilt i (i = 1, 2,...d ) hast fggvnyeket hasznljuk:
i (e) := ei (i teht a szm i. jegyt vlasztja ki). A denci alapjn vilgos, hogy i
illeszkedik a i rendezsi relcihoz
ltalnosabb feladatot oldunk meg, tetszleges i = 0, 1, . . . , d mellett ksztnk i rendezt.
Erre EdnySma-t szeretnnk hasznlni a i hastfggvnnyel (melyrl tudjuk, hogy illeszkedik
a i rendezshez). Az eredmnyl kapott sorozat akkor i rendezett, ha az sszefzs eltt minden
edny i rendezett. Ehhez elegend, hogy minden edny i 1 rendezett legyen (hiszen az egy
ednybe kerl elemek i. jegye - i dencija miatt - egyenl). Az ednyek i 1 rendezettsge
egyrszt kvetkezhet abbl, hogy az eredeti sorozat i 1rendezett volt (hiszen az elemek sorrendje
az ednyekben egyezik az s-ben lv sorrendjkkel) (elrendezses vltozat), illetve abbl, hogy az
sszefzs eltt direkt mdon i 1 rendezzk ket (utrendezses vltozat).

A legkisebb helyirtktl indul szmjegypozicis rendezs, RAD(s)


Az elbb lttuk, hogy az EdnySma i rendez, ha a bemenete i 1 rendezett. Ezt egy korbbi
EdnySma-val tudjuk elrni, mennek elfelttele az i2 rendezettsg, ... Az 1rendezs elfelttele
a 0 rendezettsg, ami minden sorozatra fennll. Emiatt az i rendezst gy valsthatjuk meg, hogy
ciklusban meghvjuk egyms utn az az Ednysma-t a 1 , 2 . . . i hastfggvnyekkel.

Az eljrs legyen: RAD(s, i), ahol RAD a szmjegypozicissgra utal, a szmjegyeket milyen
sorrendben veszi gyelembe. .

RAD(s, i)
j := 0

j d1
j := j + 1
Edny(s, j )
2. algoritmus. Az edny rendezs elrendezses vltozatnak algoritmusa.

(s, i) = 2in.
RAD(s, i) i-szer ismtli az EdnySma-t, emiatt RAD(s, i) mozgatsi szma M
RAD
A helyfoglals megegyezik EdenySema helyfoglalsval.

Ha RAD(s, i) -t i = d -vel hvjuk, az pontosan az eredeti relci szerinti rendezst jelenti,

amit egyszerenRAD(s) formban fogjuk rni.

RAD(s) mkdst r = 2 s d = 3 esetben mutatjuk be, tmbs reprezentci mellett.


Az brkban a tmbket gy szemlltetjk, hogy az elemek indexe az bra szerint fellrl lefel
n, azaz a legkisebb index elem van az bra szerint fell, mg a legnagyobb index alul. A
tovbbiakban a fell, illetve alul kifejezsek mindig az bra szerinti elhelyezsre vonatkoznak.

4
Kezdetben teht s az A tmbben van, q0 , q1 pedig szembe fordtva, egyelre resen a B-ben.
Ezek utn s elemeit az utols jegyk szerint sztosztjuk q0 es q1 kztt, q0 -t az bra szerint
fellrl lefel, mg q1 -t alulrl felfel rakva. Most az A-ba ( tartalmazta kezdetben az s-et) val
sszefzsnek kellene kvetkeznie. Ezt a lpst meg lehet sprolni virtulis sszefzssel, amikor
nem tmozgatjuk az elemeket, hanem gy tekintjk, hogy kvetkez menetre s a B-ben van s
kiolvasni gy kell, hogy elszr fellrl lefel a rgi q0 hatrig, majd a tbbi elemet alulrl felfel.
A kvetkez ednysma menet teht B-bl olvassa ki s-et (az elbbiek szerinti sorrendben) s az
utols eltti jegy szerint sztrakssal keletkeznek A ban szembefordtva az j q0 , q1 ednyek. A
kvektez menetben jra A -ban van s, virtulisan sszefzve. A s B szerepnek ezt a ippopp
szer vltst addig ismteljk, mg a menetszm elri d-t. Ha d pros volt, akkor a vgeredmny
A-ban keletkezik, egybknt pedig B-ben. Az eredmny most is virtulisan van sszefzve, teht
kiolvasst elszr fellrl lefele vgezzk q0 hatrig, majd a tbbieket alulrl felfel. Ezen gy
segithetnk, hogy a legvgn egy valdi sszefzst is vgrehajtunk.
A

o
)

A
0
0
0
0

0 1 0

0
1
0

1
0
1

0
1
0
q

0
1
q

1 1 1
1 1 0
1 1 0
0 1 0 0
q0

0 1
visszafordts
0 1 0
1 1 1
1 0 1
0 1 0

q0

q1
1 0

1 1 1
1 1 0
0 1 0
1 1 0
q1

1 1
q

1
1 1 1 1 1 0 1
0 1 0
0 1
1
1 1
1 1
0 rend
1 rend
2 rend
3 rend
Csak virtulis sszefzs van: elszr q0 -at olvassuk, utna q1 -et.

A legnagyobb helyirtktl indul szmjegypozicis rendezs, RAD(s)


Lttuk, hogy ha i-rendezsre az EdnySma-t akarjuk hasznlni, akkor az ednyek i 1 rendezettsgt garantlhatjuk gy is, hogy az sszefzs eltt i 1 rendezzk ket (utrendezses vltozat).
Mdostsuk teht EdnySma-t gy, hogy a sztrakst vgrehajtjuk i -vel, majd az sszefzs

eltt minden ednyt i 1 rendeznk ugyanilyen stratgival. A mdostot eljrs neve RAD(s, i).

RAD(s, i)

|s| 1 i = 0

SKIP

Sztrak(s, q0 , . . . , qr1 , i)
j = 0, . . . , r 1

RAD(qj , i 1)
s = q0 . . . qr1

3. algoritmus. Az edny rendezs utrendezses vltozatnak algoritmusa.

A tnyleges rendezst most is az i = d hvssal rjk el, amit egyszeren RAD(s) formban
fogjuk rni.

Vizsgljuk meg RAD(s, i) mozgatsi szmt. i = 0-ra ez nyilvn 0. Egybknt RAD(s, i)


vgrehajtja egyrszt EdnySema-t, tovbb r- szer meghvja nmagt az ednyekre, az i 1. jegy

0
0
1
0
1

5
szerint.
(s, i)=MEd
(q , i 1) + M (q1 , i 1) + . . . Mh (qr1 , i 1).
Innen M
enyS
ema (s) + M
RAD
RAD 0
RAD
RAD
(s, i) = 2in. Az eljrs
Ebbl i-re vonatkoz teljes indukcival bizonythat, hogy most is M
RAD
helyfoglalsa szempontjbl alapvet krds, hogy a rekurzv hvsok lncolatban maximlisan
hny edny l egyidejleg. Ha i = 0, akkor egy edny sem kell. Egybknt vilgos, hogy a legfels
szint hvshoz tartoz r edny mindig l. Kzttk mindig pontosan egy van i-1 rendezs alatt,
a tbbiek vagy i 1 rendezve vannak mr, vagy mg vrnak sorukra. Emiatt a kvetkez rekurzi
rhat fel MaxEdSzam(0) =0, MaxEdSzam(i) =r + MaxEdSzam(i 1),amibl az l ednyek
(s, i) n+irn addik.
maximlis szma ir. Ebbl a helyfoglalsra S
RAD
gyes szervezssel most is jelents trbeli nyeresg rhet el. Ha az ednyeket sikerlne magban az s-ben ltrehozni, akkor nem is kell semmi plussz az eredeti n helyen kvl. Ez csak r = 2

esetben megy knnyen, ugyanazt a szebefordts technikt hasznlva, mint RAD esetben.

RAD(s) mkdst is r = 2 s d = 3 esetben mutatjuk be, tmbs reprezentci mellett. Az s


kindul sorozatot most is a A tmbben helyezzk el. Az els lpsben EdnySma-t alkalmazzuk a
legnagyobb helyirtk szerint (3 ) mellett az A ra, mgpedig gy, hogy a q0 s q1 ednyek helyben,
teht magban az A -ban keletkezzenek. Erre a clra jl hasznlhat mdszer az gynevezett
binris csere sma. Ennek tlete, hogy fellrl lefel keresnk egy elemet, melynek legmagasabb
helyirtk jegye 1, majd alulrl felfel egy olyat, melyenek legnagyobb helyirtk jegye 0, majd
megcserljk ket. Ezt mindaddig folytatjuk, amig q 0 s q1 sszernek.
Ezek utn a kialakult ednyekre (A egy-egy rsztmbje) kln-kln alkalmazzuk EdnySmat, azaz az elbbi binris csert, de most mr a kzps jegy szerint (2 ). Ezek utn sszesen 4
ednykeletkezik (melyek kztt res is van), melyekre a legkisebb helyirtk jegy szerint (1 )
alkalmazzuk EdnySma-t, azaz az elbbi binris csert. Az eredmnyt az gy trendezett A
szolgltatja.
Plda:

0
1
1
0
1

A
1
1
0
1
1

0
0
1
0
1

A
0 1 0
0 1 0
sztraks
1 0 1
1 1 0
1 1 1
d=3

q0

q1

A
0 1 0
0 1 0
1 0 1
1 1 0
1 1 1
d=2

A
0 1 0
0 1 0
1 0 1
1 1 0
1 1 1
d=1

A kt vltozatot sszehasonltva- ahogy a pldkbl is ltszik - RAD(s) minden menete magval

az egsz s -el dolgozik, mg RAD(s) menetei a mr kialakult ednyeket nomtjk tovbb.

Kivlasztsi feladatok, 2016/17 5.


elads
Legyen < K,> egy legalbb kt elem, de legfeljebb megszmllhat szmossg teljesen rendezett halmaz. Jellje K a K -bl kpzett vges sorozatok halmazt, mg K + az elbbiek kzl a
nem reseket. Egy s K sorozat (nven) rendezett, ha 1 i |s| 1 esetn si si+1 . lni
fogunk azzal a konvencival, hogy esetlegesen |s| helyett n-et hasznlunk.
0.1. denci. Legyen s K + tetszleges sorozat s 1 l |s| tetszleges egsz. Az x K
elem az s sorozat nagysg szerinti l. eleme, ha megegyezik az s rendezettjnek l index elemvel.
Ha l = 1, akkor minimlis elemrl, ha l = |s| maximlis elemrl, ha l = |s|2, akkor medinrl
beszlnk.
Pldul az s = 31, 45, 13, 24, 7, 12, 8 sorozat nagysg szerinti 2. eleme 8, minimuma 7, maximuma 45 s a medinja (s rendezettjnek 72 = 4 index eleme) 13.
Legyen valamilyen tulajdonsg K elemein. Vezessk be az s jellst az s tulajdonsg
elemeibl ll rszsorozatra. Ezt a jellsmdot hasznlva a kvetkez ekvivalens dencit adhatjuk: Az x K elem az s sorozat nagysg szerinti l. eleme, ha |s<x | l 1 s |s>x | n l.
A tovbbiakban lnk azzal a konvencival, hogy egy s sorozat nagysg szerinti l. elemt egyszeren l. elemnek hvjuk, mg sl -et l index elemnek.A kivlasztsi feladat az s K sorozat nagysg
szerint l. elemnek, specilisan a minimumnal, maximumnak s medinja meghatrozsa.
A pontos specikci a kvetkez:
s, s K , x K, l N (Korbbi konvencink alapjn itt s a rendezend sorozat, mg s az
kezdrtke)
Q : s = s s 1 l |s|
R : s P erm(s ) es x az s l. eleme.
Gyakran elvrs mg, hogy az algoritmus megrizze az eredeti sorozatot, tovbb az utbbi
esetben adja meg mg az l. elem s -beli r indext is. A kiterjesztett feladat megoldst az alapfeladat rtelemszer mdostsval knnyen megkaphatjuk.
A megold algoritmusainktl azt vrjuk, hogy ne fggjenek magtl az aktulis K-tl, csak
rajta adott rendezsi relci tulajdonsgaitl. Mkdsk sorn si sj (1 i, j |s|), i6=j) alak
krdseket tesznek fel, s ezek eredmnyeknt adjk meg a megoldst. Az ilyen algoritmusokat
sszehasonltsos algoritmusoknak nevezzk.
Egy adott feladatra kszlt sszehasonltsos algoritmust teljesnek neveznk, ha minden teljesen rendezett halmaz s abbl kpzett minden sorozat esetn jl mkdik.
A szemlletessg kedvrt az sszehasonltsban szerepl elemekre a kiesses sportversenyekhez
hasonl terminolgit hasznlunk. Ha valamely x y alak krdsre a vlasz igen, akkor x-et
vesztesnek, mg y -t gyztesnek nevezzk. Ha a vlasz nem, akkor x ersen gyztes s y ersen
vesztes.
1

0.0.1.

Maximum (minimum) kivlaszts.

Csak a maximum kivlasztssal foglalkozunk, a minimum kivlaszts ennek analogonja. Elszr


bizonytjuk a maximum kivlasztsokra vonatkoz alapttelt.
0.1. ttel. Legyen MaxKiv egy teljes sszehasonltsos maximumkeressi mdszer. Ekkor MaxKiv
-nek brmely n hosszsg bemenet esetn legalbb n 1 sszehasonltst kell vgeznie. (Termszetesen hasonl ttel igaz a minimum kivlasztsra is.)
Bizonyts:
A bizonytst n -re vonatkoz indukcival vgezzk. n = 1 esetn valban nincs szksg
sszehasonltsra, hiszen a maximum megegyezik a sorozat egyetlen elemvel.Legyen n 2.
1. Vizsgljuk elszr azt az esetet, amikor az sszehasonltsok legalbb egyikben volt ers
vesztes. Legyen si sj egy ilyen sszehasonlts. Ers vesztesknt sj nem lehet a maximum.
Tekintsk ezutn a maradk n 1 elemet. A tovbbi sszehasonltsok ebbl az n 1 elembl
helyesen hatrozzk meg a maximumot. Ehhez, az indukcis felttelnk szerint kell legalbb n 2
sszehasonlts. sszessgben az sszehasonltsok szma legalbb 1 + n 2 = n 1.
2. Trjnk r arra az esetre, amikor egyik sszehasonlts sem eredmnyez ers vesztest.
a.) Tegyk fel, hogy vannak olyan j1 , j2 , ..jm (m 2) indexek, hogy sj1 sj2 , sj2 sj3 ,... sjm
sj1 , (nevezzk az ilyet krnek). Ezzel az m sszehasonltssal azt detektltuk, hogy sj1 = sj2 , ... =
sjm . Egyestve egy pontt ket s megtartva az sszes kron kvli sszehasonltst azok helyesen
fogjk megllaptani az gy kapott n m + 1 elem maximumt. Indukcis felttelnk szerint ehhez
kell legalbb n m sszehasonlts. Innen az sszehasonltsok szma m + n m = n n 1
b.) Tekintsk most azt az esetet, amikor az sszehasonltsok rendszerben nincsen kr. Ekkor
biztosan van olyan j index, hogy sj minden sszehasonltsban vesztes volt (klnben volna benne
kr). Ezt az elemet a maximum keressbl az algoritmusunknak ki kell zrnia. Ha ugyanis az
sszes sszehasonlts eredmnynek tudatban sj -t mgis maximumknt nevezn meg, akkor a
teljessg miatt minden olyan sorozatra, ahol az sszehasonltsok eredmnye ugyanez, gy kellene
tennie. Alaktsuk t s-et a kvetkez mdon: Vltoztassuk meg sj -t a-ra, mg az sszes tbbit b-re,
ahol a < b a K kt eleme. Vilgos, hogy a megvltoztatott sorozatban az egyes sszehasonltsok
eredmnye ugyanaz, teht az algoritmus most is sj -t nevezn meg maximumknt, ami ellentmond
a < b-nek. Innen a bizonyts ugyangy megy, mint 1. pont esetben.
A legegyszerbb algoritmus a maximum kivlasztsra a sorozat elejtl a vgig val tnzse.
Legyen ennek neve LinMaxKiv

LinMaxKiv(s, x, r)

x : s1 , r := 1, i := 2
in
s( i) > x
x := si , r := i

SKIP

i := i + 1
1. algoritmus. A LinMaxKiv(s, x, r) algoritmus.

3
LinMaxKiv (n) = n 1, teht LinMaxKiv optimlis maximum kivlaszt.
Vilgos, hogy O
Ha az eredeti sorozatot t lehet rendezni, akkor a maximumot kivlaszthatjuk az egyszer csere
rendezs legels buborkoltat lpsvel is. Ilyenkor a maximum s utols elemben lesz.

BubMaxKiv(s)

i := 1
i |s| 1
s( i) > s( i + 1)
s( i)
s( i + 1)

SKIP

i := i + 1
2. algoritmus. A BubMaxKiv(s) algoritmus.
BubMaxKiv (n) = n 1,
Ebben az esetben is O
Ahogy mr korbban lttuk, kivlaszthatjuk a maximumot tournament segtsgvel is. A
KTour tournament pt eljrs n 1sszehasonltssal elhelyezi a levelek maximumt a tournament gykerbe. A tournament hasznlatnak elnye, hogy ha a maximum kivlasztsra megplt
egy torunament, akkor a 2, 3.... legnagyobbat az MTour eljrssal rendre O(log2(n) id alatt meg
tudjuk hatrozni.

0.0.2.

l. elem kivlasztsa

Az l. elem meghatrozsra a legkzenfekvbb, hogy a dencinak megfelelen a sorozatot lerendezzk, majd kivesszk annak l index elemt. Ez a megolds az sszehasonltsos rendezk
alapttele alapjn a legrosszabb esetben nlog2 n mveleti igny. Ugyanakkor a rendezs az l.
elem kivlasztsa szempontjbl felesleges munkt vgez, hiszen elegend lenne az l.-nl kisebb s
nagyobb elemek halmazt meghatrozni, a rendezettsgkre nincs szksg. Ez felveti a krdst,
lehet-e nlog2 n -nl jobb kivlaszt eljrst tallni. Azt remljk, hogy az l. elem kivlasztsra kszthetnk lineris idej algoritmust. Mieltt erre rtrnnk, bizonytjuk az l. elem kivlasztsra
vonatkoz alapttelt.
Kiv (n, l)
0.2. ttel. Legyen Kiv egy teljes, sszehasonltsos, l. elemet kivlaszt algoritmus. Ekkor M O
n 1 + min(l 1, n l).
Bizonyts:
A bizonyts alaptlete, hogy megkonstruljuk a Kiv eljrst a legtbb sszehasonltsra ksztet sorozatot. A konstrukcit a csalanta vlaszol mdszervel lltjuk el (az angol irodalomban ellensg mdszernek hvjk). A technika s elnevezse a barkohba jtkra vezethet vissza.
A jtk lnyege, hogy a jtkosok kzsen rgztenek egy vges halmazt, a keressi teret. Ezek
utn egyikk, a vlaszol kivlaszt ebbl a halmazbl egy elemet. A msik, a krdez igen-nem
krdsekkel megprblja ezt az elemet a lehet leghamarabb kitallni. Egy krds az ppen aktulis keressi teret kt rszre bontja. A vlaszol az igen, illetve nem vlaszaival megmondja, a
keresett elem melyik rszben van. A krdez ezt a rszt tekintve aktulis keressi trnek ugyangy

4
halad tovbb. Ha az aktulis keressi tr mr csak egy elem, akkor ezt az elemet adja vlaszknt.
A csalnta vlaszol a krdezt - annak minden lehetsges krdezsi stratgija mellett - a lehet
legtbb krdsre akarja knyszerteni. Ebbl a clbl a jtk elejn nem rgzti le a kitalland
elemet, hanem a krdez szempontjbl lehet legkellemetlenebb mdon folyamatosan vltoztatja.
Ha valamely krds az aktulis keressi teret nem pontosan felezte, akkor csalntn azt a vlaszt
adja, hogy a kitallt elem a nagyobbik rszben van (persze gyelnie kell vlaszainak konzisztencijra, klnben a jtk komoly atrocitsokkal vgzdhet). A kvetkez bra a kt krds utni
helyzetet mutatja, ahol a +-al a nagyobbik felet jelltk.

-+

++

--

+-

A vlaszol az elemet esetnkben a legnagyobb, (++) -os rszbe helyezi. A krdez a csalanta
vlaszol ellen gy vdekezhet, hogy lehetleg mindig olyan krdst tesz fel, amely az aktulis
keressi teret felezi. Ez a krdeznek a legrosszabb esetre nzve optimlis (minimlis krdsszmmal
jr) stratgija.
Trjnk vissza az eredeti problmnkra. Estnkben a krdez maga a Kiv keres algoritmus,
a vlaszol pedig az a krdsek megvlaszolja.
Milyen informcit kell megszerznie az l. elemrl a krdeznek. Azt, hogy van nl nla nagyobb
s l 1 nla kisebbegyenl elem. Ennek megllaptshoz a krdez feltesz bizonyos krdseket,
melyekre vlaszokat kap. Az eredmnyek rendszert szemlletesen grfban brzolhatjuk, mely
pontjai s elemei. A grfban si -bl akkor vezet irnytott l sj -be, ha az si sj krdsre a vlasz
igen vagy sj si -re hamis.
A grfban kiemeljk az l. elemet, s a rajzban a nla nagyobbakat felette brzoljuk, mg a
nla kisebbeket alatta.

n l + 1 nagy elem

itt van minimum n l db sszehasonlts

b
b

l. elem
b

l + 1 kiselem
b
b

itt is van minimum l db sszehasonlts


b

A fels n l + 1 nagy elem kztt az l. a minimlis. Kzttk teht biztosan szksges n l


sszehasonlts. Hasonlan az als l kis elem kztt mindenkpp szksges l 1sszehasonlts.
Ezeket az sszehasonltsokat lnyegi sszehasonltsoknak nevezzk (az brn folytonos lek, folytonos lek). Az als s fels rsz kztti sszehasonltsokat pedig nem lnyegieknek (a grfban
szagatott lek) nevezzk. Az elzek miatt a krdeznek n l + l 1 = n 1 lnyegi sszehasonltst biztosan el kell vgeznie, de - mivel az l. elemet nem ismeri, ezrt vgezni fog nem lnyegi
sszehasonltsokat is. A csalanta vlaszol pontosan az ilyen nem lnyegi krdsekre knyszerti
a krdezt.
A vlaszol a krdez szmra legrosszabb s sorozat elemeit folyamatosan rgzti le a kvetkez
stratgival. Elre rgzt egy x rtket; ez lesz az l. elem rtke, amit a krdsek sorn legutoljra
elkerl elem rtkeknt fog rgzteni. Kszt magnak egy n sorbl ll konzisztencia tblzatot,
ahol az i.elemben si aktulis rtke van/lesz, mellette egy llapotbejegyzssel. A bejegyzsek:
N: mg nincs rgztve
S: rgztve x-nl kisebbnek
L: rgztve x-nl nagyobbnak
Amikor a krdez felteszi az si sj krdst, akkor a kvetkez akcitblzat szerint jr el:
N
N
N
L
S
L

N
L
S
L
S
S

!S
!S
!L
L
S
L

!L
L
S
L
S
S

A akcitblzat sorainak jelentse: Ha mg egyik krdezett elemnek sincs rtke, akkor az


egyiket kicsinek, a msikat nagynak rgzti (! mutatja a rgztst). Amennyiben csak az egyiknek
nincs rtke, akkor azt az ellenttes bejegyzssel rgzti (az ilyen sszehasonltsok mindenkpp
nem lnyegiek lesznek). A vlaszt ezek utn a konzisztencia alapjn adja meg. Persze ez a stratgia
csak addig mehet, amig az S bejegyzs elemek szma legfeljebb l 1, illetve az L bejegyzsek
legfeljebb n l, ami utn mr mindig a mg nem teltett rtkre rgzt. Ez a stratgia mg akkor
is legalbb min (l 1, n l) nem lnyegi sszehasonltsra knyszerti a krdezt, ha az az elejn
csupa N, N krdst tesz fel. gy valban
Kiv (n, l) n 1+ min (l 1, n l)
MO
Felmerl a krds, hogy milyen l mellett lesz min (l 1, n l) mennyisg a lehet legnagyobb.
Ezt a koordinta rendszerben brzolva x 1 s n x egyenesek metszspontja, illetve az ahhoz

6
legkzelebb lv egsz adja. Innen l =

n+1
2

, vagyis a medin keresse esetben lesz az als korlt

a lehet legnagyobb. Knnyen addik, hogy a medin esetben az als korlt: n 1 +


j

2(n1)+n+12
2

3(n1)
2

=
Azt a kvetkezmnyt kaptuk, hogy

n+1
2

MedKiv (n)
0.1. kvetkezmny. Tetszleges MedKiv medin-kivlaszt eljrs esetn M O

1 =

3(n1)
2

Az alapttel azt mondja ki, hogy van olyan n hosszsg s K sorozat, melyre a maximumminimum egyttes kivlasztsa legalbb n1+min(n1, nk) sszehasonltssal jr. Ez kevsb
negatv eremny, mint az sszehasonltsos rendezkre vonatkoz alapttel, nincs benne semmi,
ami kizrn, hogy a feladatra lehessen lineris idej algoritmust kszteni.
Az megolds azon az ltalnos tleten alapul, hogy egy objektumot gy prblunk megkeresni,
hogy valamilyen mdon tippet adunk r. Ha a tipp nem j, akkor a keresst a tippre vonatkoz
plussz ismeretek birtokban folytatjuk tovbb.Tipikus plda a mdszerre a logaritmikus keress.
Esetnkben x-et egy s-bl valahogyan (akr vletlenszeren) kivlasztott y-al megtippeljk.
Ha |sy | =l, akkor y l. eleme s-nek, jl tippeltnk. Ha |sy | <l, akkor az l.elem biztosan |s>y |-ban
van, annak l |sy |. eleme. Ha pedig |sy | >l, akkor x az |(s y)y | l. eleme. Mindezek alapjn
a kvetkez algoritmust kszthetjk

Kiv(s, l, x)
y : s

s1 := (s y)y , s2 := (s y)>y
j := |s1 | + 1
j <l1
Kiv(s2 , l |s1 | 1, x)

j=l
x := y
s := s1 xs2

j>l
Kiv(s1 , l, x)

3. algoritmus. Az l. elem kivlasztsnak vletlentett algoritmusa


Az y : s rtkkivlaszts miatt Kiv nemdeterminisztikus. A bevezetett segdsorozatokra
s1 := (s y)y , illetve s2 := (s y)>y ), tovbb j = |s1 | + 1 = |sy |.
Vizsgljuk meg Kiv mveleti ignyt, most is az sszehasonltsok szmt rtve ez alatt. s1 s s2
sszesen n1 y -al val sszehasonltssal ll el. Ha a tipp helyes volt, akkor tbb sszehasonltsra
Kiv (n, l) = n 1. A legrosszabb eset akkor kvetkezik be, amikor a
nincs is szksg, teht mO
rekurzv hvsok mindegyike csak eggyel rvidebb bemenetre kvetkezik be. Ekkor
Kiv (n, l) = (n 1) + (n 2) + ... + 1 = n(n1) = O(n2 )
MO
2
Mivel a legjobb s legrosszabb sszehasonltsi szm nagysgrendben klnbz, rdekes krds,
hogy mennyi az sszehasonltsok vrhat szma abban az esetben, ha y : s egyforma, 1/n
valsznsggel szolgltatja s brmelyik elemlt.
Vezessk be a kvetkez jellseket:
Kiv (n, l) (a keresett vrhat rtk), fj (n, l) := E O
Kiv (n, l/j). (Ez utbbi olyan
f (n, l) := E O
felttel mellett jelenti a vrhat rtket, amikor y az s j. eleme.) A teljes vrhat rtk ttel
Kiv (n, l) = Pn E O
Kiv(n, l/j)P (y = s j. eleme) Hasznlva az elbbi jellsekekt:
alapjn E O
j=1

7
P

f (n, l) = nj=1 f (n, l/j)1/n


A hrom gnak megfelelen fj (n, l)-nek hrom rtke van - l s j viszonytl fggen.

j=l

(n 1) + 0
fj (n, l) = (n 1) + f (j 1, l)
j>l

(n 1) + f (n j, l j) j < l
Innen
P
P
P
f (n, l) = nj=1 fj (n, l) n1 = (n 1) + n1 nj=i+1 f (j 1, l) + n1 i1
j=1 f (n j, l j)

0.1. llts. n, i-re: f (n, l) 4n

Az llts azt mondja ki, hogy a Kiv eljrsunk vrhat rtkben lineris.
Bizonyts:
A bizonytst teljes indukcival vgezzk. Kis n-ekre az knnyen ellenrizhet, pl. n = 1-re
04
Tegyk fel, hogy 1..n 1-re igaz az llts s beltjuk n-re. A szummban csupa n-s kisebb
sorozathossz szerepel, teht alkalmazahat az indukcis felttelben szerepl egyenltlensg.

f (n, i) n 1 +

n
l1
1 X
1X
4(n j) =
4(j 1) +
n j=l+1
n j=1

= (n 1) +
= (n 1) +
= (n 1) +

l1
X
4 n1
4X
j+
(n j) =
n j=l
n j=1

l1
l1
X
4 n1
4X
4X
j
j+
(n j) =
n j=1
n j=1
n j=1
l1
4 n(n 1) 4 X
+
(n 2j) =
n
2
n j=1

4
n 2(l 1) + n 2
(l 1)
=
n
2
4
= 3(n 1) + (l 1)(n l)
n


4 n1 2
4 n2
3(n 1) +
< 3n +
= 4n.
n
2
n 4

= 3(n 1) +

A levezets sorn tindexeltnk, alkalmaztuk a szntani sorozatok sszegre vonatkoz kpletet,


tovbb a szmtani s mrtani kzpre vonatkoz azonossgot.
Felmerl a krds, ltezik-e legrosszabb esetben is lineris sszehasonltsi szm kivlasztsi algoritmus. Ha egyltaln ilyen van, az csak gy kpzelhet el, hogy az y tippet nem vletlenszeren,
hanem elfeldolgozs utn, clzottan lltjuk el. Megjegyzend, hogy egy ilyen elfeldolgozs kis
mretek esetn nem ri meg. Ha s hossza kicsi, akkor gazdasgosabb lerendezni s-et s visszaadni
annak l index elemt.
Az tlet az, hogy egy olyan yt elllt eljrst ksztnk, amely esetben nem fordul el,
hogy a rekurzv hvs mindig pontosan 1-el cskkenti a hosszt. Nevezzk y vlasztst Kiegyenslyozottnak, ha 0 < r < 1 : |s1 |, |s2| r|s|. Clunk ilyen kiegyenslyozott sztvgs ellltsa.
A terv vzlata:
(1) s-et osszuk fel 5-s csoportokra,

8
(2) Keressk meg minden csoport medinjt,
(3) Vlasszuk y-nak a medinok medinjt.
7
3
Azt ltjuk be, hogy |s1 |, |s2 | 10
n. Ehhez elegend bizonytani, hogy |s1 |, |s2 | 10
n. (Kicsit
pontatlanul fogunk szmolni, mintha n oszthat lenne 5-el. Az egsz csak nagy n-ekre rdekes, s
ilyenkor a hiba elhanyagolhat.)
n/5 csoport van. y ezek szerint az n/5 medin medinja.
m
l
elem, amely y. Minden 5-s csoportban van 2 elem, amely
A medinok kztt van n/5
2

az adott ts medinjnl. Emiatt biztosan van mg tovbbi 2


l

n/5
2

n/5
2

elem s-ben, amely y.

3
Ezrt az y-nl nagyobb-egyenl elemek szmra als becsls: 3

gy |s2 | 10
n. Az |s1 |
vonatkoz becsls hasonlan megy.
Vilgos, hogy ha gy vlasztjuk y-t, akkor r = 0, 3-mal teljesl a kiegyenslyozottsg.
Tekintsk most y kivlasztssnak sszehasonlti szmt :
A csoportkpzsben nincs sszehasonlts.
(2) Knnyen bizonythat, hogy 5 elembl 6 sszehasonltssal meghatrozhat a medin, ezrt
itt az sszehasonltsi
szm kivlasztsa 6 lpssel n5 6


Kiv n, n
(3) M O
5
A teljes sszehsoltsi szmra

Kiv (n, l) 6n + M O
Kiv n ,
MO
5
5
|

Kiv (n) 22n


0.2. llts. M O

{z

&

y kivlasztsa

n/5
2

'!
}

(n 1)
| {z }

s1 , s2 -ellltsa

n
3 10
.

Kiv
+M O

7
n, l .
10


Bizonyts:
A bizonyts most is teljes indukcival trtnik. Kis n-ekre ( pl. n 5-re.) az lls knnyen
ellenrizhat. Indukcis bizonyts: legyen n > 5 s tegyk fel, hogy 1, 2, . . . , n 1-re az llts
igaz, lssuk be n-re
Kiv (n)
MO

6n 22n
7
110n
+
+ n 1 + 22n
= 22n.
5
5
10
5

Trjnk most t arra, hogyan lehet 5 elem medinjt 6 sszehasonltssal meghatrozni. ptsnk az els 4 elembl tournamentet (3 sszehasonlts). A gykerben lev rtket kizrhatjuk,
hiszen van nla 3 kisebb. rjuk be az 5. elemet a tournamentbe az eddigi legnagyobb helybe,
majd ptsk jra a tournamentet. Ehhez most csak 2 sszehasonlts kell, hiszen egy korbbi
sszehasonlts eredmnyt fel tudjuk hasznlni. Az jjptett tournament gykere jlag kizrhat. A maradk 3 kzl kell a maximumot meghatroznunk. Ehhez ugyan kt sszehasonltsra
volna szksg, de az egyiket a tournament ptsnl
j
kmr elvgeztk. gy az sszehasonltsok
szma 3+2+1=6. Az alapttel kvetkezmnye 3(51)
= 6 -ot ad als korltknt,gy a mdszer
2
n = 5 -re optimlis.

0.0.3.

Az r legnagyobb elem kivlasztsa s rendezett kivlasztsa

A mindennapi letben is gyakran addnak olyan esetek, amikor egy sorozatbl nem csak a maximlis elemet, hanem a sorozat r darab legnagyobb elemt kell meghatrozni rendezetlen, illetve

9
rendezett mdon (pldul plyzati rangsorolsok, tovbbjutsos sportversenyek). A feladat teht
az, hogy valamely s sorozat esetben
1. megadjunk egy, az s r darab legnagyobb elemt tartalmaz sorozatot (rendezetlen kivlaszts),
2. megadjuk az s r darab legnagyobb elemnek nvekv sorozatt (rendezett kivlaszts).
1. A rendezetlen kivlaszts nagyon egyszeren oldhat meg. A mr megismert Kiv eljrssal
kivlasztjuk a sorozat n r + 1. elemt, majd egy jabb menetben vgignzzk a sorozatot, s
kivlasztjuk a nla nagyobbakat (ha egyenl elemek is megengedettek, egy kicsit bonyolultabb a
helyzet). Mivel az n r + 1. elem kivlasztsa megoldhat lineris id alatt, ezrt ezzel az jabb,
n 1 sszehasonltssal jr menettel is lineris futsi idt kapunk. Ennl nagysgrendben jobbat
el sem kpzelhetnk. Persze azt ltnunk kell, hogy az n r + 1. elem kivlasztsa nem olcs, hiszen
4n vrhat rtk vletlentett, illetve 22n legrosszabb eset determinisztikus algoritmust tudtunk
kszteni hozz. Ehhez jn mg hozz a tovbbi n sszehasonlts.
2. A rendezett kivlasztsra kt t is knlkozik.
Az els t az, hogy elvgezzk a rendezett kivlasztst, majd a kapott r elem sorozatot
lerendezzk. Ez az utbbi rendezs elvgezhet rlog2 r id alatt. Ha r nem fgg n-tl, (pldul
a legnagyobb hrom elemet kell rangsorolunk), akkor ennek a rendezsnek a mveleti ideje n-tl
fggetlen, gy az egsz algoritmus lineris, azzal a konstanssal, ami a Kiv eljrsbl addik. Ha
r fgg n-tl, akkor ennek a rendezs mveleti ignye lnyegi hatssal lehet az egsz algoritmus
mveleti gnyre. Ha r = cn valamilyen 0 s 1 kztti c konstansra (pldul c = 1/2), akkor a
mveleti igny cnlog2 cn-el arnyos, teht nlog2 n-es lesz. Ksbb ltni fogjuk, hogy r = cn esetn
ennl jobb nem is lehetsges
A msodik t sorn s elemeibl elszr ptnk egy maximum tornamentet, majd a tournament
rendezshez hasonlan rendre kivlasztjuk az n 1, ..., n r + 1edik elemet. Ennek sszehasonltsi
szma becslhat n 1 + (r 1)log2 n -el. Vilgos, hogy ez a megolds sokkal jobb az elznl.
Ha r = cn , akkor a nagysgrendet tekintve itt is nlog2 n-es futsi idt kapunk.
Felmerl a krds, hogy a rendezett kivlasztsra r = cn esetben lehete-e nlog2 n -l jobb
nagysgrendet elrni.
Rendkiv (n, r) = (nlog2 n).
0.3. llts. r = cn esetben M O
Rendkiv (n, r) = O(f(n)) lenne, melyre f (n) tart a 0-hoz. LeBizonyts: Tegyk fel, hogy M O
nlog2 n
gyen s tetszleges n hossz sorozat. Egsztsk ki s-et az elejn annyi -el, hogy annak m
hosszra teljesljn cm = n. Legyen a kiegsztettt sorozat s . Vlasszuk ki s -bl rendezetten a
legnagyobb cm = n elemet. Ez lerendezi s-et. Jelljk az gy kapott rendezsi eljrst Rend -vel.
Rendkiv (m, r) Kf(m)
A felttelezsnk szerint van olyan K konstans, melyre elg nagy m-ekre M O
Rend (n) K(f(cn)) Osszuk el mindkt oldalt nlog2 n Ez Rend- re azt adja, hogy elg nagy M O

MO
(n)
M
O
(n)
K(f(cn)
K(f (cn)
Rend
Rend
el, cnlog
cnlog
cnlog
). Itt cnlog
) tart 0-hoz, ami elentmond az sszehasonltsor
2n
2 cn
2 cn
2 cn
rendezk alapttelnek.

0.1.

A maximum s minimum egyttes kivlasztsa

Egy adott sorozat esetn szksg lehet mind annak maximlis, mind minimlis elemre. A maximumot s minimumot egy eljrsban kezel algoritmusokat a tovbbiakban maxmin kivlasztsnak
fogjuk nevezni. A feladatra knnyen adhat naiv algoritmus. Elszr meghatrozzuk a sorozat
maximumt, majd az eggyel rvidebb sorozatbl annak minimumt. Ehhez ltszlag legalbb

10
n 1 + n 2 = 2n 3 sszehasonltsra mindenkpp szksg van. Ugyanakkor elvehetnk
egy korbban bevlt tletet, a minimum kivlaszts sorn megprblhatjuk a maximum kivlasztsa sorn elvgzett sszehasonltsok eredmnyeit felhasznlni. Az ilyen eljrsokat prhuzamos
maxmin kivlasztsnak fogjuk nevezni.
Legyen PrhMaxMin a kvetkez mdon denilt prhuzamos maxmin kivlaszt eljrs: Diszjunt prokra bontjuk a sorozatot s a prok elemein elvgezzk az sszehasonltsokat. Ezek utn
meghatrozzuk a vesztesek minimumt, illetve a gyztesek maximumt. Ha a sorozat hossza pros
volt, kszen vagyunk. Ha pratlan, akkor a kilg elemet sszehasonltjuk az elbbi maximummal,
illetve minimummal. Ha nagyobb az elbbi maximumnl,
k
jHak kisebb az elbbi mij k aj maximum.
n
n
nimumnl, a minimum. Mindkt esetben elvgznk 2 + 2( 2 1) = 3 n2 2 sszehasonltst.
Pratlan esetben ehhez jn mg tovbbi kt sszehasonlts, vagyis az eredmny 3
j

j k
n

k2

. Esetszt-

vlasztssal knnyen igazolhat, hogy mindkt eredmnyt ki lehet fejezni a 3(n1)


kifejezssel.
2
Lehet-e az elbb denilt PrhMaxMin-nl gyosabban mkd maxmin kivlasztt kszteni? Az
albbi ttel szerint nem, PrhMaxMin optimlis.
PMaxMin (n)
ttel.
Ha PMaxMin teljes prhuzamos max-min. kivlaszt eljrs, akkor M O
k
3(n1)
.
2

0.3.
j

Bizonyts:
A bizonytsra most is a csalnta vlaszol mdszert hasznljuk. A krdeznek a megoldshoz
tallnia kell egy olyan elemet, amely mindig gyztes volt, egy olyat, amely mindig vesztes volt,
tovbb n 2 olyat, mely gyztes s vesztes is. Ez sszesen 2 + 2(n 2) = 2n 2 informci.
A csalanta vlaszol stratgija, hogy gy alaktja a sorozat elemeit, hogy a vlasz a lehet
legkevesebb infomcit szolgltassa a krdeznek, s ezltal a lehet legtbb krdsre knyszertse.
Most is kszl egy n sorbl ll konzisztencia tblzat, ahol az i.sorban si aktulis rtke van/lesz,
mellette egy llapotbejegyzssel. A bejegyzsek:
N: mg nincs rtke
W : van mr rtke, eddig mindig gyztes volt
L: van mr rtke, eddig mindig gyztes volt
LW : van mr rtke, volt gyztes s vesztes is
Kezdetben minden elem bejegyzse N. Amikor a krdez feltesz egy si sj krdst, akkor a
vlaszol gy alaktja ki ezek rtkt, hogy a vlasz minl kevesebb informcit adjon a krdeznek.
Itt olyen egyszer dologokrara kell gondolni, hogy ha egy elem eddig mindig vesztes volt, akkor
lehetleg tovbbra is maradjon az. A krdez szmra a lehet legrosszabb esetet elllt stratgit
a kvetkez stratgia tblzat tartalmazza:
A tblzatban ! az els rtk hozzrendelst jelent; , = az rtkek le/fel mdostst. A
harmadik sor jelelentse pldul: egy j elem s egy mindig gyztes sszehasonltsakor az j elem
gy kapjon rtket, hogy vesztes legyen. Az tdik sor azt jelenti, hogy ha egy mindig vesztes
s egy mindig gyztes kerl sszehasonltsra, akkor a mindig gyztes rtket gy nveli meg a
vlaszol, hogy a vesztes vesztes maradjon, a gyztes tovbbra is gyztes maradjon. Egy ilyen
rtknvels a konzisztencit nem rontja el. Ha az elem eddig mindig gyztes volt, akkor a nvels
a korbbi krdsek eredmnyt nem rontja el. A tblzatot kiegsztettk egy tovbbi oszloppal,
mely azt mutatja, hogy az adott tpus krdssel mennyi j informcihoz jut hozz a krdez.
Ltszik a tblzatbl, hogy ha egy krdsben van N bejegyzs (rtket mg nem kapott elem),
akkor az a krds annyi informciat ad, ahny N van benne. 1-1 informcit adnak mg az olyan
sszehasonltsok, ahol kt vesztest, illetve gyztes kerl sszehasonltsra.

11
Ilyen bejegyzs
elemek viszonyt
krdezik
N
N
N
L
N
W
N
LW
L
L
L
W
L
LW
W
W
W
LW
LW
LW

informci

Ez lesz/marad
a bejegyzs
!L
!W
!L
W
! /L
L
L
L
W
W
LW

2
1
1
1
1
0
0
1
0
0

!W
L
W
LW
LW
W
LW
LW
LW
LW

1. tblzat. A csalanta vlaszol stratgijnak a illusztcija a prhuzamos maximum, minimum


kivlaszts ttelnek bizonytshoz.
A krdez legjobb
stratgija: csupa olyan krdst tesz fel, amivel legalbb 1 informcit
j k
szerez. Krdez n2 szm lehetsges (N, N)- es krdst, melyek mindegyike kt informcit ad, ez
j k

sszesen 2 n2 informci. Ezek utn csupa 1 informcit ad krdst tesz fel (pratlan esetben a
mg meglev N-re vonatkozt, majd (L, L) s (W, W ) tpsakat,
j k egsz addig,
j kmg sszessgben
n
el nem ri a 2n 2 informcit). Ez az optimlis stratgia 2 +2n 2 2 n2 krdssel jr. Ez
j k

azt jelenti, hogy a vlaszol mg a leggyesebb krdezt is legalbb 2n n2 2 krdsre tudja


knyszerteni.
Knnyen
belthat (a pros, illetve pratlan esetre kln kln), hogy ez utbbi
k
j
3(n1)
alakban is.
felrhat a
2
j
k
PMaxMin (n) 3(n1) .
gy tetszleges PMaxMin-re valban M O
2

Keressek, 2016/17 6. elads


A legtbb szoftverfeladat megoldsa sorn elkerl rszfeladatknt, hogy valamely halmaznak,
sorzatnak keressk meg egy adott tulajdonsg elemt, elemeit. Pldul egy vllalalat dolgozinak
adatait tartalmaz adatbzisbl keressk valamely munkatrs adatatait. Egy adott tantrgyat
felvett hallgatk kzl kerssk azokat, akik vizsgja csak msodszorra sikerlt. Az ilyen tpus
feladatokat keressi feladatnak hvjuk. Vilgos, hogy egy keressi feladat sorn meg kell adni,
a keressi teret (amely elemei kztt a keresst vgezzk), illetve a keress kritriumt (amilyen
tulajdonsg elemeket keresnk). Mi a feladat olyan absztrakt vltozatval fogunk foglalkozni, ahol
a keressi tr valamely asszociatv adatszerkezet lesz, a tulajdonsg pedig a benne lev rekordok
kulcsra vonatkozik.

A keressi feladat
A legfontosabb fogalmak
Legyen K egy legfeljebb megszmllhat halmaz, a lehetsges kulcsok halmaza. A kulcshalmaztl
gyakran megkveteljk azt is, hogy legyen adott rajta egy -vel jellt rendezsi relci. Legyenek
Ei : i = 1, 2, ..., r (r 0) szintn legfeljebb megszmllhat halmazok, Ei -t az i. rtkhalmaznak
hvjuk.
A D = K ri=1 Ei direkt szorzatot a keress univerzumnak, alaphalmaznak nevezzk. A
univerzum elemeinek neve rekord, mg egy adott rekord direkt szorzat komponenseit mezknek
nevezzk. Ha h egy rekord, akkor h.kulcs, h.rtki formban fogunk hivatkozni annak megfelel
mezjre. (Valjban ez azt jelenti, hogy a vett fggvnyeknek adunk nevet, s ezek h -ra
vonatkoz rtkt adja az elbbi jells).
Egy H D vges halmazt a tovbbiakban asszociatv adatszerkezetnek neveznk. rtelemszer a H.kulcs, H.rtki jells. (H.kulcs = {h.kulcs; h H, }, H.rtki = {h.rtki ; h H, })
Vilgos, hogy egy asszociatv adatszerkezet egy olyan absztrakt adatszerkezet, ahol az elemek kztt nincsen semmilyen rkvektezsi relci.
A kulcs mez kulcs tulajdonsg a H asszociatv adatszerkezetre nzve, ha |H| = |H.kulcs|
(a kulcsok egyediek). Azokat az asszociatv adatszerkezeteket, melyekben a kulcs mez kulcs
tulajdonsg, sztraknak nevezzk. A sztrakra az albbi absztrakt mveleteket deniljuk
(itt Szt jelli a kulcs mezhz kapcsold lehetsges sztrak sszessgt.)
res : Szt
res-e: Szt Bool
Keres: Szt K D Bool
Beszr: Szt D Szt
Trl: Szt K Szt

2
Itt res az res sztrat (res halmaz) jelli, res-e rkrdez egy sztr ressgre, Keres a sztrban keres egy adott kulcs elemet, Beszr j elemet (h) illeszt a sztrba, azzal az elfelttellel,
hogy annak kulcsa mg nem szerel benne (h.kulcs
/ H.kulcs), Trl pedig kiveszi a sztrbl az
adott kulcs elemet (k), azzal az elfelttellel, hogy van benne ilyen kulcs rekord (k H.kulcs ).
A konkrt megvalsts sorn elfelttelek nlkl deniljk a Beszr s Trl mveleteket,
hibajelzst adva, ha a mvelet nem elvgezhet.
Beszr: Szt D SztBool
Trl: Szt K SztBool. A tovbbiakban mi is ezt az utat kvetjk.
A sztrakra vonatkozan a f mvelet a keress. A beszrs s trls algoritmusa is tartalmaz
egy keressi komponenst.
A sztrakat, illetve a rajtuk vgzett mveleteket alapveten kt megvalstsi stratgival
implementljk, a visszavezetssel, illetve a hastssal.
A visszavezets sorn a sztr elemei kztt rkvetkezsi relcit vezetnk be, majd az gy
denilt adatszerkezettel s az azon rtelmezett mveletekkel valstjuk meg a sztrt (rtkeit,
mveleleteit).
A hasts sorn egy, a kulcsokon adott tulajdonsg alapjn a sztrt kisebb rszekre daraboljuk, hogy aztn a mveleteket a kisebb sztrakon vgzett mveletekre vezessk vissza. Persze a
kisebb mret sztrakat is kezelni kell valahogy, emiatt a darabolsi folyamat vgn elll kis
sztrakat itt is visszavezetssel kell megvalstatani.
A tovbbiakban mind a visszavezets, mind a hasts esetben rszletesen foglalkozunk H reprezentcijval s elksztjk az egyes sztrmveleteknek az adott reprezentci szerinti megvalstst. Elssorban a Keres mvelettel foglalkozunk, a Beszr, Trl mveleteknl csak utalunk
arra, hogy a keressi algoritmust felhasznlva hogyan lehet ket elkszteni.

Sztrak megvalstsa visszavezetssel


Ahogy mr utaltunk r, itt arrl van sz, hogy a H sztr rekordjai kztt bevezetnk valamilyen
rkvetkezsi relcit, s a sztrmveleteket az gy ltrejv adatszerkezeteken valstjuk meg.
Kt ilyen absztrakt adatstruktrt fogunk hasznlni, a sorozatot s a ft. A legtbb programnyelv
esetben ezek szerkezetek nincsenek beptve, ezrt kitrnk arra is, hogyan kell a sztrakat a
nyelvekben megengedett szerkezetekkel megvalstani.

Linearizci
Ebben az esetben H sztrt sorozatknt tekintjk, azaz H = {hi }ni=1 . Ha K-n van rendezs, akkor
megkvetelhetjk, hogy a sorozat a kulcs mez szerint rendezve legyen.
A sztrmveleteket sorozatokra vonatkoz algoritmusokkal valstjuk meg. Az res s res-e
mveletek nyilvnvalak. A tbbi hrom mvelet a sorozat elemeinek vizsglatra, a sorozatba
val beszrsra, illetve abbl val trlsre vezethet vissza. A Keres mveletet fogjuk rszletesen
trgyalni (a Beszr, Trl ezen alapul). Kln vizsgljuk a rendezetlen s a rendezett esetet.
Rendezetlen eset
Rendezetlen sztr esetn nincs jobb, mint sorozat rekordjait az elejtl kezdve megvizsglni s ha
megadott kulcs elemet tallunk, azt eredmnyknt visszadani. Ez a lineris keressi stratgia.

LinKeres(H, k, h, T )

i := 1
i |H| hi .kulcs 6= k
i := i + 1
i > |H|
T :=

T :=
h := hi

1. algoritmus. A Keres(H, k, h, T ) megvalstsa lineris keresssel.


LinBesz
ur(H, h, T ) keresi h.kulcs -ot. Ha benne volt, hibajelzst ad, egybknt az j elemet a
sorozat vgre tesszi.
LinTorol(H, k, h, T ) esetn keresi k -t. Ha nem volt benne, hibajelzst adunk, egybknt a
megtallt elemet a sorzatbl kivesszi.
A lineris keress elemzse.
. . A LinKeres mveletet vizsgljuk, f kltsgknt az kulcssszehasonltsi mveletek szmt
tekintve. A LinBeszr s LinTrl mveleti ignye lnyegben ugyenaz (hiszen a keressen alapulnak ). Ha |H| = 0, akkor a kulcssszehasonltsok szma nyilvn 0, ezzel az esettel a tovbbiakban
nem foglalkozunk.
LinKeres (n) = 1 , ha az els elem volt a keresett.
mO
LinKeres (n) = n , hiszen annak megllaptsra, hogy az adott kulcs nem fordul el H-ban,
MO
nyilvn az sszes elemet vgig kell nzni.
Vizsgljuk most a keress vrhat sszehasonltsi szmt. Tegyk fel, hogy pi a hi .kulcs
keressnek valsznsge, mg q az olyan kulcsok keressnek valsznsge, melyek nincsenek
benne H-ban. Ekkor a vrhat rtk denicija alapjn
LinKeres (n) = Pn ipi + nq
EO
i=1
Ha pi -k s q elre ismertek s jogunk van H trendezsre, akkor a vrahat rtk abban az esetben lesz minimlis, ha H -t az elemekhez tartoz valsznsgek szerint fordtva rendezzk (teht
a leggyakrabban keresett kulcs rekordot tesszk az els helyre, utna a kvetekez legnagyobbat,
...)
Sajnos a pi s q valsznsgeket ltalban nem ismerjk elre. Ilyenkor azt tehetjk, hogy
elindulunk valamilyen rgztett rekordsorrenddel, s a keressi trtnet alapjn idnknt a sorozatot
trendezzk. Ennek termszetes, de kiss kltsges mdja, ha statisztikt ksztnk az egyes
kulcsok keressi gyakorisgrl s az trendezst a gyakorisgok fogy sorrendje szerint vgezzk
el. Azonban a statisztika karbantartsa az esetek tbbsgben nagyobb kltsggel jr, mint az
ltala elrhet nyeresg. Emiatt inkbb olyan heurisztikus algoritmusokat hasznlunk, amelyek a
gyakran keresett kulcsokat lehetleg elre teszik. Kt lehetsges ilyen heurisztika:
1. Az ppen megtallt kulcs elemet az elzvel megcserljk. 2. Az ppen megtallt kulcs
elemet az thelyezzk a sorozat elejre.
Vilgos, hogy mindkt heurisztikhoz adhat olyan keressi sorrend, amely a lehet legrosszabb
eredmnyt adja.

4
A lineris keressen alapul algoritmusok jl hasznlhatk minden olyan konkrt adatsturktra
esetn, ahol valamely elembl meg lehet tallni a rkvetkezt. Ilyenek a vektor, a lista, szekvencilis fjl. A dinamikus mveleteket (Beszrs, Trls) lncols mellett knnyen kezelhetjk pointer
tlltsokkal, de vektorok esetben az elemek egy rsznek lptetsre is szksg van.
Rendezett eset
Ilyenkor is hasznlhat a lineris keressi stratgia. A sorozat rendezettsget gy hasznljuk ki,
hogy amikor az aktulisan vizsglt rekord kulcsa mr nagyobb, mint a keresett kulcs, akkor a
keressbl nem vlasszal kilpnk.
A sorozat rendezettsgt jobban kihasznlhatjuk az oszd meg s uralkodj elv alkalmazsval.
sszehasonltjuk a kzps elem kulcst a keresett kulccsal. Ha egyenlk, igen vlasszal kilpnk.
Ha a keresett kulcs kisebb a kzpsnl, akkor a rendezettsg miatt csak az als flben lehet, teht
ott folytathatjuk a keresst. Hasonl gondolatmenettel a fels flben folytatjuk a keresst, ha a
keresett kulcs nagyobb a kzpsnl. Ez a binris/logaritmikus keressi stratgia
A binris keress alapvet lpse a rendezett sorozat kzps elemnek megkeresse. Ez megkveteli, hogy a sorozat elemeit az indexk alapjn el lehessen rni. Vektorral val implementlsnl
ez a kvetelmny teljesl, de mr lncols esetn nem. Ezrt a binris keressen alapul stratgit
- ebben a formjban - csak vektorral val implementci esetben hasznlhatjuk.

BinKeres(H, k, h, T )

a := 1, f := |H|, i :=

a+f
2

a i f hi .kulcs 6= k
hi .kulcs < k
f := i 1

a := i + 1
i :=

a+f
2

i :=

a+f
2

i
/ [a, f ]
T :=

T :=
h := hi

2. algoritmus. Keres(H, k, h, T ) megvalstsa binris keresssel.


Megjegyzsek:
1. Knnyen ltszik, hogy a binris keressi sorn invarins az a tulajdonsg, hogy H -ban az a
eltti helyeken k-nl kisebb kulcs, mg az f utni helyeken k-nl nagyobb kulcs elemek vannak.
Ha a keress nem adott pozitv eredmnyt (a = f + 1), akkor a pontosan arra a helyre mutat, ahol
k -nak lennie kellett volna.
2. Az is knnyen addik, hogy a felezs sorn a nagyobbik fl hosszt gy kapjuk meg, hogy
az eredeti hossz binris reprezentci szerinti utols jegyt elhagyjuk.
BinBesz
ur(H, h, T ) keresi h.kulcs -ot. Ha benne volt, hibajelzst ad, egybknt pedig h t
beszrja H -ba a. elemknt (lsd az elz els megjegyzst).

5
6
4
2 5

12
20

1. bra. Plda keresfra


BinTorol(H, k, h, T ) esetn keressk k -t. Ha nem volt benne, hibajelzst adunk, egybknt a
megtallt elemet a sorzatbl kivesszk.
A binris keress elemzse. . Most is csak a keresssel foglalkozunk.
Keres (n) = 1 , ha a keresett kulcs pont kzpen van.
mO
keres (n) = log2 (n + 1) = O(log2 (n)). A legrosszabb eset akkor kvetkezik be, amikor az
MO
adott kulcs nincs benne H -ban s minden felezs sorn a nagyobb hosszsgban kell a keresst
tovbb folytatni. Ez a msodik megjegyzs alapjn azt jelenti, hogy legrosszabb esetben annyi
felezst vgznk, amennyi n binris alakjnak jegyszma ( log2 (n + 1)).

Fkkal trtn reprezentci


Utaltunk r, hogy a binris keressi stratgia a sorozatok lncolt megvalstsa esetben nem
mddik, mert index szerint nem tudjuk elrni az elemeket. Ez indokolja, hogy olyan adatsturktrkat hasznljuk, melyek lncoltan knnyen implementlhatk, s ahol a felezs tlete knnyen
megvalsthat. A tovbbiakban teht a H sztr valamilyen tulajdonsg fa lesz, melyre fkra
megszokott t jellst fogjuk hasznlni. Elszr a binris fkkal trtn megvalstst vizsgljuk

Binris keresfk
Denci: Egy D univerzum elemeivel cscscmkzett t binris fa binris keresfa, ha h(t) 0
vagy h(t) 1, 0(t), 1(t) keresfk s 0(t).kulcs < gy(t).kulcs < 1(t).kulcs.
Ez a denci teljesti azt az elvrsunkat, hogy a t-ben lev rekordokat fel tudjuk osztani
a tovbbi keresshez kis kulcs (baloldali rszfa) s nagy kulcs (jobboldali rszfa) rekordokra,
meghatrozva a kzpen levt is (gykr). Ez - ahogy majd ltni fogjuk - a binris keresshez
hasonl keressi stratgit tesz lehetv.
A dencibl kzvetlenl addik, hogy ha egy keresft inorder stratgival (bal rszfa, gykr,
jobb rszfa) jrunk be, akkor pontosan a benne lev rekordok kulcs szerint rendezett sorozatt
kapjuk.
Trjnk r a sztrmveletek keresfval trtn megvalstsra. Az res s res-e mveletek
itt is nyilvnvalak. A tbbi hrom mvelet a fban val naviglssal, fba trtn beszrssal,
illetve onnan val valsthat meg. Itt is a Keres mveletet fogjuk rszletesen trgyalni, mert a
msik kt mvelet ezen alapszik.
Az algoritmusok lnyegben a binris keress felezs tlett kvetik (br itt nem pontos felezsrl van sz, hanem a kis s nagy elemeknek a fa struktrja alapjn trtn meghatrozsrl).
Emiatt a keresfa algoritmusokat a binris keress lnolt vltozatnak tekinthetjk, hiszen a keresfkat lncolssal valstjuk meg.
A fk rekurzv dencijhoz illeszked rekurzv algoritmusokat ksztnk.

BinFaKeres(H, k, h, T )

t=
gy(t).kulcs = k
T :=

h := gy(t)
T :=

k < gy(t).kulcs
Keres(0(t), k, h, T )
Keres(1(t), k, h, T )

3. algoritmus. A a BinFaKeres(H, k, h, T ) eljrs rekurzv algorimusa


BinFaBeszr: A keress negatv (t = ) eddig res gba elhelyezett t := h utastssal trtnik.
BinFaTrls: A trls most egy kicsit bonyolultabb, mint sorozat esetn, mert a trlend rekord
pontjnak egyszer trlse trln annak rszfit is. Ha a trlend elemnek csak egy nem res
rszfja van, a helyzet viszonyag egyszer, a pont helyre a meglev nem res rszft akasztjuk be.
Ha egyik rszfa seem res, akkor megkeressk a gykrben lev rekord megelzjnek (baloldali
rszfa maximuma), illetve rkvetkezjnek (jobboldali rszfa minimuma) valamelyikt, s azt
helyrl trlve a gykr tartalmt erre rjuk. (Mi mindig a hosszabbikbl trlnk.)

BinFaTrl(H, k, h, T )

0(t) =
t := 1(t)

1(t) =

egybknt
h(0(t)) < h(1(t))
Mintrl(1(t), h)
Maxtrl(0(t), h)
gy(t) := h

t := 0(t)

4. algoritmus. A keres fbl val trls algoritmusa


Most mr csak azt kell vgiggondolnunk, hogy hogyan lehet egy keresfa maximlis, illetve
minimlis kulcs elemt megkeresni, rtkt visszaadni s helyrl trlni. Ezt nem res fkra
vonatkozan egy kln eljrsban fogalmazzuk meg. Csak a maximummal foglakozunk, a minimum
hasol. Mivel egy fa maximuma mindig olyan pontban van, melynek jobboldali rszfja res ezrt
trlse a meglev baloldai rszfjnak takasztsval trtnik.

Maxtrl(t, h)

h := gy(t)
t := 0(t)

1(t) =

Maxtrl(1(t), h)

5. algoritmus. A maximlis kulcs elem trlse keresfbl

7
6
8

4
I0

I1

I3

I4

2. bra. Virtulisan kiegsztett fa a 4,6,8 kulcsorozathoz


Ha olyan programnyelven dolgozunk, ahol a rekurzi nem megengedett, akkor az algoritmusainkat t kell rnunk iteratvv. Ezt gy tehetjk meg, hogy lekvetjk a rekurzv leszlls folyamatt.
Pldul a keressre:

BinFaKeres(t, k, h, T )

tv := t
tv =
6 gy(tv).kulcs 6= k

gy(tv).kulcs < k
tv := 0(tv)
tv := 1(tv)
tv =
T :=

T :=
h := gy(tv)

6. algoritmus. A keresfkban val keress iteratv algorimusa.


Elemzs. Az elmleti vizsglatok esetben eltekintnk a pontokban lev rtkmezktl, csak
a kulcsokkal foglalkozunk. Legyenek kulcsaink nvekv sorredben k1 , . . . , kn s vezessk be mg
az I0 , I1 , . . . , In jellseket a kzttk lev intervallumokra.
(, k1 ) < k1 < (k1 , k2 ) < k2 < . . . (kn1 , kn ) < kn < (kn , +)
I0
I1
...
In1
In
A t keresft minden olyan helyen, ahol benne res legazs van, egsztsk kis virtulisan
j, gynevezett kls pontokkal, melyek az elbbi denilt intervallumoknak felenek meg (megklnbztetsl az eredeti pontokra bels pontknt hivatkozunk). A kiegsztett ft - ha kell vesszzssel klnbztatjk meg az eredetitl. Vilgos, hogy az gy kapott virtulisan kiegsztett
fa tkletes (minden pontnak 0 vagy 2 legazsa van) s klcsnsen egyrtelmen megfeleltethet az eredeti fnak. Az is ltszik hogy a kiegsztett fa inorder stratgivalval bejrsval az
I0 , k1 , I1 , k2 , . . . ,kn , In sorozatot kapjuk. Plda virtulisan kiegsztett fra:
A kls pontok elssorban arra jk, hogy ha egy, a fban nem megtallhat kulcsot keresnk,
akkor annak is feleljen meg - legalbb virtulisan - egy pont. Pldul az 5 kulcsrtknek az brban
az I1 pont felel meg.
Ha egy olyan k kulcsot keresnk, mely elfordul a fban, akkor azt a gykrbl a hozzvezet
ton lev sszes kulccsal (bele rtve sajt magt is) ssze kell hasonltani. Igy k keressnek
sszehasonltsi szma a k magassga + 1. Ha a kereset k nincs a fban, akkor csak a neki
megfelel kls ponthoz vezet t kulcsaival kell az sszehasonltst elvgeznnk.

8
6;0.1
4;0.1

8;0.4

I0 ;0.1 I1 ;0.1

I3 ;0.1

I4 ;0.4

3. bra. Plda t a valsznsgekkel


8;0.4
6;0.1
4;0.1

I4 ;0.1
I3 ;0.1

I0 ;0.1 I1 ;0.1
4. bra. 4, 6, 8 kulcsokat tartalmaz t1 kiegsztett fa a valsznsgekkel

h(k) + 1

BinFaKeres (t, k) =
O

h(I)

ha k benne van a fban


ha k nincs a fban, s k I

BinFaKeres (t, k) = 1 s M O
BinFaKeres (t, k) = h(t) + 1
Innen azt kapjuk, hogy mO
A vrhat kltsgek szmtshoz tegyk fel, hogy valamely k = ki kulcsot pi valsznsggel
keresnk, mg k Ij valsznsge qj (i = 1, ..., n; j = 0, ..., n) (sszegknek nyilvn 1 -nek kell
lennie).
BinFaKeres (t) = Pn (h(ki )+1)pi +Pn h(Ij )qj Ha a ponthoz tatoz valsznsgeket slyknt
EO
i=1
j=0
berjuk az egyes pontokban, akkor az elbbi sszeget a virtulis fa slyozott magassgsszegvel
BinFaKeres (t) = whsum(t ) + Pn pi .
is kifejezhetjk, E O
i=1
Ha az elbbi pldnkban p1 , p2 , p3 = 0.1, 0.1, 0.4 s q0 , q1 , q2 , q3 = 0.1, 0.1, 0.1, 0.1, akkor a
slyozott t fa a kvetkez:
Innen a vrhat sszehasonltsi szm:
BinFakeres (t) = (0 0.1 + 1 0.1 + 1 0.4 + 4 2 0.1) + (0.1 + 0.1 + 0.4) = 1, 9
EO
Ugyanazokkel a kulcsokkal s valsznsgekkel ms alak keresft is pthetnk, ahogy azt a
kvetkez plda is mutatja.
BinFakeres (t1 ) =
A t1 fa magassga t-hez kpest 1-el nagyobb. A vrhat sszehasonltsi szm E O
(0 0.4 + 2 1 0.1 + 2 2 0.1 + 2 3 0.1) + (0.1 + 0.1 + 0.4) = 1, 8. Ez t1 -re 0.1el kevesebb,
mint t-re..
Ahogy a plda mutatja, ugyanazon kulcsok s valsznsgek mellett ms alak ft rdemes
hasznlni a legrosszab eset minimalizlsa szempontjbl, s mst a vrhat eset szempontjbl.

Binris keresfk ptse


A feladatunk az, hogy egy H sztrhoz ksztsnk elemeit tartalmaz keresft. Vezessnk be erre
egy j, BinFapit(s, t) -vel jellt mveletet, mely a sztrt alkot rekordok valamilyen sorozatbl
felpt egy, a sorozat elemeit tartalmaz keresft.
A faptst gy kell elvgeznnk, hogy a kapott fa alakja (ettl fgg a mveleti id) valamilyen
szempont szerint a lehet legjobb, de legalbb j legyen.

9
k1
I0

k2
I1

...
In

kn

5. bra. Plda nven rendezett sorozatbl ksztett keresfra.


Az egyik szempont, hogy a fa magassga pontjainak szmhoz kpest a lehet legkisebb legyen.
Ez akkor telejesl, ha a fa majdnem teljes s ilyenkor a legrosszabb esetben is log2 n-es az sszehasonltsi szm. Ha a magassg szempontjbl optimlis fa ptse valamirt nem ri meg (pldul
azrt, mert a gyakori beszrsok s trlsek a fa alakjt gyorsan elrontjk), akkor legalbb arra
kell trekedni, hogy a fa magassga lehetleg kicsi, O(log2n) legyen.
Ms szempont lp el, ha ismertek a keressi valsznsgek is, mert ilyenkor a legkisebb vrhat
sszehasonltsi szmot ad ft (optimlis fa) szeretnnk ellltani.
A lehet legjobb fa felptsbe akkor rdemes befektetni, ha a fa alakjt nem rontjk el a
dinamikus mveletek (beszrs, trls). Ezt leginkbb gy teljesl, hogy a dinamikus mveletek
nem megengedettek. Elszr ezzel a statikus esettel fogunk foglakozni, majd ttrnk a dinamikus
esetre.
Statikus eset, magassgra otimalizls:
Az s rekordsorozatot kulcsa szerint lerendezzk, majd ksztnk egy n pontot tartalmaz majdnem
teljes ft, egyelre res pontokkal. Ezutn a ft inorder stratgival bejrjuk, s az gy rintett
pontokba rendre elhelyezzk a sorozat elemeit. A f kltsg ebben az esetben a rendezs (nlog2 n)
-es ideje.
Statikus eset, slyozott magassgsszegre otimalizls.
A r = q0 , p1 , q1 , . . . , pn , qn sorozathoz ksztnk olyan t kiterjesztett keresft, melyre InBej
ar(t ) =
r, a q-k levlben, a p-k bels pontban vannak s whsum(t ) a lehet legkisebb (optimlis fa). Ebbl
mr a rekordokat tartalmaz fa elllthat. Mivel csak vges sok, az elbbi feltteleket teljest
fa van, ezrt az optimum mindig ltezik. Hatkony megkeressre a dinamikus programozs trgyalsnl vissztrnk. Itt csak annyit jegyznk meg, hogy az optimlis fa ellltsa dinamikus
programozssal O(n3 ) id alatt vgezhet el.
Dinamikus eset, magassgra otimalizls:
Ha a beszrsok s trlsek a fa alakjt a ksbbiekben gyis elronthatjk, akkor nem rdemes a
lehet legjobb ft megpteni. Megtehetjk azt, hogy minden klnsebb elkszlet nlkl, az res
fbl kiindulva, egyms utn beszrjuk a fba a sorozat elemeit. Legyen ez az EBinFapt eljrs.
(EBinFapt nem ms, mint a rendezseknl mr ltott RendFa fapt eljrs.) EBinFapt
bizonyos sorozatokra hossz ideig tarthat s a kszlt fa magassga is messze van az optimumtl.
Ha pldul sorozatunk a kulcsok szerint rendezett, akkor lncc degenerld ft kapunk (csupa
jobboldali legazssal). Ebben a vrt logaritmikus jelleg keress helyett praktikusan csak lineris
keresst vgezhetnk. (ltalban igaz, hogy minl kiegyenslyozatlanabb a fa, annl rosszabb
benne a keress hatkonysga)

10
EBinFapt mveleti ignye nyilvn nem fgg a tnyleges kulcsoktl, csak attl, hogy a bemen
sorozat milyen permutcija a kulcsok rendezett sorozatnak. gy a maximlis, minimlis s
vrhat sszehasonltsi szm csak a sorozat hossztl, n tl fgg. A rendezfknl ltottakat
adoptlva:
n(n1)

MO
(lncc degenerldott alak fa az eredmny)
EBinFapt (n) =
2

mOEBinFapt (n) nlog2 n (ha majdnem teljes fa az eredmny)

EO
EBinFapt (n) 2n ln n (ha minden permutci egyformn valszn).
Az is vilgos, hogy ha lncc degenerldott t keresft ptett fel EBinFapt, akkor erre a fa
BinFaKeres (t, k) = n.
magassga n 1,s gy M O
Azt szeretnnk elrni, hogy a felpt eljrs ilyen degenerlt ft soha ne ptsen. Ebbl a clbl
vezettk be a rendezseknl a kiegyenslyozott, ms nven AVL fa fogalmt Lttuk, hogy egy
kiegyenslyozott fa magassga O(log2 n) s a kiegyenslyozottsgot megtart mdostott beszr
eljrs a fa magasgval arnyos id alatt mkdik. Emiatt a kiegyenslyozott fapts kltsge
O(nlog2 n), tovbb a felplt fa magassga, s gy keress ideje O(log2n).
Hogy minden mvelet O(log2 n) -es legyen, mg el kellene elrni, hogy az AVL-fbl val trls
is a fa magassggval arnyos id alatt mkdjn.
Emlkeztetnk r, hogy az AVL-fba val beszrs tlete az volt, hogy ha a beszrs a fa
kiegyenslyozottsgt elrontotta, akkor azt a fa magassgval arnyos id alatt, megfel transzformcikkal (forgatsokkal) kijavtottuk. Ugyanez a helyzet a trlsek esetben is. Lttuk, hogy a
trls sorn egy olyan pont sznik meg, melynek egyik legazsa biztosan res. A msik legazs
az ltalunk viszglt AVL fk esetben vagy maga is res, vagy egyetlen pontbl ll (a kiegyenslyozottsg dencija miatt). A msik legazsnak a papba val bekapcsolsa (gy trtnik az
adott pont trlse) utn a papa bejegyzst mdostani kell a megfelel irnyba (jobbra billenteni,
ha a a baloldalon trltnk s balra, ha a jobb oldalon trltnk.).
Ha a papa bejegyzse +, illetve - lesz, akkor az ltala meghatrozott rszfa kiegyenslyozott
marad s magasga sem vltozik meg (csak egyik ga rvidl le eggyel). Ekkor az eljrsbl ki
lehet lpni.
Ha a papa bejegyzse = lett, akkor az ltalal meghatrozott rszfa kiegyenslyozott, viszont a
magasga 1-el cskkent a trls elttihez kpest. Emiatt a papa papjban lehet kiegyenslyozsi
problma, vizsglni kell.
Ha a papa bejegyzse ++, lett, akkor elromlott a papa ltal meghatrozott rszfa kiegyenslyozottsga. Most is csak a ++ esettel foglalkozva a jobb oldal bejegyzse lehet +, - (ahogy a
beszrsnl) s = is.
A ++,+, illetve ++, - esetben alkalmazzuk a mr ltott transzformcikat. Ilyenkor az talaktott rszfa kiegyenslyozott lesz, gykerbe = kerl. Magassga viszont a trlsi eltti magassghoz
kpest lecskkent. Emiatt most is vizsglni kell (ha van) az papjt.
A ++, = esetben az talakts pontosan ugyanazokkal az tkapcsolsokkal jr, mint a ++,+
esetnl. Lnyeges eltrs viszont, hogya papba nem =, hanem - bejegyzs kerl, tovbb ez a
transzfomci nem cskkenti a magasgot. Most is kszen vagyunk, az eljrsbl ki lehet lpni.
Az elzek szerint ha billents s az esetleges tkapcsols utn a papban = bejegyzs alakult
ki, akkor a trlssel a papa ltal meghatrozott rszfa magassga lecskkent. Emiatt elromolhatott
a fa felsbb szintjeinek kiegyenslyozottsga, amit ugyancsak vizsglni s ha kell, helyrelltani kell.
Ugyanazt kell tenni az elbbi papa papjval, mint az elbb magval a papval. Ezt egsz addig
vgezzk a fban felfel haladva, amig vagy elll a kilps felttele (+,-) bejegyzs az akkutlis
papban, vagy mr elrtk a fa gykert.
sszefoglalva a trls sorn egyrsz le kell mennnk addig a levlig, amit trlni fogunk, majd a

11
trlttl - billentve s ha kell, tkapcsolva - haladni felfel mindaddig, amg vagy teljesl a kilps
felttele (+,- bejegyzs), vagy elrtk a fa tetejt. Ez mutatja, hogy az eljrs fa magassgval
arnyos, teht O(log2 n) futsi idvel jr.

Keressek, 2016/17 7. elads


Utaltunk r, hogy a binris keressi stratgia a sorozatok lncolt megvalstsa esetben nem
mddik, mert index szerint nem tudjuk elrni az elemeket. Ez indokolja, hogy olyan adatsturktrkat hasznljuk, melyek lncoltan knnyen implementlhatk, s ahol az oszd meg s uralkodj
elv alkalmazsa megvalsthat. Erre a clra jl hasznlhat adatstruktrt szolgltatnak a fk.
Rszletesen vizsgltuk mr a binris keresfkat. Trjnk r ezek tbbg ltalnostsaira.

ltalnostott keresfk, B-fk


A (binris) keresfa fogalmt gy ltalnostjuk, hogy a vele reprezentlt sztrat a fa gykernek
vizsglatval nem kett, hanem akrhny rendezett rszre vghatjuk fel. A tovbbiakban fa alatt
mindig olyan ft rtnk, melyenek pontjai D-bl kpzett, nem res rendezett sorozatokkal vannak
cimkzve
Denci:
t ltalnostott keres fa t = vagy t 6= s ha valamely m( 1) mellett gy(t) =
(h1 , ..., hm ), akkor a gykr legazsai a 0, ..., m cmkkkel vannak cmkzve, 0(t), ..., m(t) ltalnostott keres fk s 0(t).kulcs h1 .kulcs 1(t).kulcs . . . hm .kulcs m(t).kulcs.
Pl.: (Csak a kulcsokat kirva)
30/60/90
0
10/20
0
1

1
12/16

40/50

70

3
120/200
0
95

140

Vilgos, hogy egy ltalnostott keresft (rtelemszeren mdostott) inorder bejrssal bejrva most is a benne lev rekordok kulcs szerinti rendezett sorozatt kapjuk.
Denici
r-korltos keres fa Olyan ltalnostott keres fa, melynek minden pontjban legfeljebb
r 1 rtk lehet.
r = 2-re visszakapjuk a binris keres fkat.
Az ltalnostott keresfkra vonatkoz mveletek ugyanazok, mint a binris keresfk esetben. Az elnevezsben a Bin nvrszlet helyett lt -ot fogunk hasznlni. A keress most is a
gykrben val keresssel kezddik. Ha keresett kulcs ott tallhat, akkor pozitv vlszt adunk,
egybknt a megfelel legazsban keresnk tovbb.

ltFaKeres(H, k, h, T )

t=
Gykeres(gy(t), k, i, T )
T :=

T :=
h := gy(t)i

ltFaKeres(i(t), k, h, T )

1. algoritmus. Az ltFaKeres(H, k, h, T ) eljrs


Itt Gykeres a gykrben lv D + -beli rendezett sorozatban keresi a k kulcsot. Ha megtallja,
visszaadja i-ben annak indext. Ha nem tallja, akkor azon rszfa indext adja, amelyben k benne
lehet.
Az ltFaBeszr eljrs most is a keressi eljrsra pl. Az res fba trtn beszrs itt is
nyilvnval t := .h. Ha Gykeres h.kulcs-al trtn meghvsa utn T = s i(t) = , akkor h-t
beszrhatjuk a gykrben lev sorozatba i + 1.elemnek, megfelelen tszmozva a legazsokat.
(Ezt persze r korltos esetben csak addig tehetjk, amg a gykr el nem ri a maximlis, r 1-es
teltettsget!)
Ha Gykeres h.kulcs-al trtn meghvsa utn T = s i(t) 6= , akkor rekurzv mdon i(t)ben kell folytatnunk a beszrst. Megtehetjk ezt persze T = s i(t) = esetben is. (r korltos
esetben a gykr teltettsge esetn nem is tehetnk mst).
Az ltFaTrl eljrs szintn a binris eset analogonja. Amikor a Gykeres meghvsa sorn
azt kapjuk, hogy a trlend k kulcs a gykr i. rekordjnak kulcsa, kt eset lehetsges.
1.) (i 1)(t) s i(t) egyike . Ekkor az i. elemet s az res legazst trlhetjk, megfelelen
tszmozva a legazsokat.
2.) (i 1)(t) s i(t) egyike sem res. Ilyenkor vagy (i 1)(t) maximumt vagy i(t) minimumt
trljk a helyrl, ttve azt az eredetileg trlend elem helyre. Egy ltalnostott keresfbl
most is knnyen megy a minimum, illeve maximum trlse, mert az csak pontjnak els, illetve
utols rtke lehet, s a megelz, illetve kvet legazsa mindenkpp res.
Vilgos, hogy mindhrom eljrs legfeljebb a fa szintszmnak megfelel rekurzis mlysgig
hvdik meg. Ha a fa r-ris, akkor egy szint sszehasonltsi szma maximum r1. Ezrt r-korltos
keresfra

MO
ltFaKeres (t, k) (r1)(h(t)+1) s ugyanez igaz az ltFaBeszr s ltFaTrl eljrsokra
is.
Foglalkozzunk a tovbbiakban csak az r 3 korltos esettel (az r = 2 esetet rszletesen
trgyltuk a korbbiakban). A fa alakja itt is lehet nagyon kedveztlen, amikoris a fa magassga a
benne lv rekordok szmhoz kpest nagy. Pl.: r = 3
1/2/3

4/5/6

7/8/9

Emiatt itt is kellen egy olyan kiegyenslyozsi kritrium, mely az t kielgt fk esetn garantlja h(t) = O(log2 n(t)) teljeslst. Itt n(t) a fban lv rtkek szmt jelli, mg a fban lev

3
pontok szmra az N(t) jellst fogjuk hasznlni. (Binris esetben a kt mennyisg megegyezik, hiszem minden pontban pontosan egy rtk van). Egy lehetsges kiegyenslyozs a B-fa tulajdonsg.
Rgztsk le az r rtkt. Ksbb visszatrnk mg arra, hogyan clszer megvlasztani.
Denci: Egy r-korltos keresfa B-fa, ha r a kvetkez tulajdonsgok teljeslnek
a gykr kivtelvel minden pontban legalbb r/2 1 elem van,
a bels pontok sszes legazsa nem res,
minden levl azonos szinten van.
Legyen t egy (r-korltos) B-fa
l

0.1. llts. h(t) logr/2 n(t) , ahol n(t) a fban lv rekordok szma.
Bizonyts:
Megkeressk egy adott h magassghoz a legkisebb rtkszm t B-ft s erre bizonytjuk az
lltst. t szintjein a pontok s rekordok szma:
0. szint
1. szint
2. szint
...
h. szint

N
1
2
2 r/2
...
2 r/2h1


n
1
r
2 ( /2 1)
2 r/2 (r/2 1)
...
h1
2 r/2
(r/2 1)


n = 1 + 2 (r/2 1) 1 + r/2 + ... + r/2h1 =


= 1 + 2 (r/2 1)
l

r/2h 1
= 2 r/2h 1 r/2h ,
r/2 1

ahonnan logr/2 (n) h addik.


Tekintsk t a B-fkra vonatkoz mveleteket (nevkbenaz lt nvrszlet helyett B van). A
keress ugyanaz, mint ltalnostott keresfk esetben.
Beszrs B-fba.
Tekintsk t elszr informlisan, hogyan is trtnik egy j rekord B-fba val beszrsa. Az
j rekord beszrsa mindig levlbe trtnik, mg akkor is, ha a levl ezzel tlcsordul (a megengedettnl 1-el tbb, r rtk lesz benne). Ha az adott levl nem csordult tl, kszen vagyunk.
Ha tlcsordult, akkor a levelet a benne lv kzps rekord, a medin, kiemelsvel hrom rszre
vgjuk. Egy j gykrpontra, mely a kiemelt rekordot tartalmazza, tovbb annak 0. legazsaknt a maradk levl als rszre, illetve 1. elgazsaknt annak fels rszre (Medkiemel). Ezzel
persze az aktulis levl, mint rszfa magassga megntt, ami a levelek azonos szinten val elhelyezkedst, vagyis a kiegyenslyozst elrontja (ezt egy ag (NTT) belltsval fogja jelezni).
Hogy a levelek tovbbra is azonos szinten legyenek, az elbb keletkezett hibs rszft fel kell tolni
a felette lev pontba, a papjba (Feltol). A feltols azt jelenti, hogy a papa pontba a megfel
helyre beillesztdik egy tovbbi rtk, a rossz rszfa gykerben lv (szksgszeren egyetlen)
rtk, mgpedig gy, hogy annak baloldalra legazsknt bekerl a rossz rszfa baloldala, mg
jobb oldalra a rossz rszfa jobboldala. Ha a papa pont a feltols utn is legfeljebb r 1 rtket

4
tartalmaz, kszen vagyunk. Ha a papa pont tlcsordult, akkor r elbbi stratgit alkalmazzuk,
a kzept kiemeljk, majd az gy hosszabb vlt rszfa gykert feltoljuk. Ez a kiemels feltols
pros addig hajtdik vgre, amig egyrszt van hova feltolni, illetve a feltols utn a papa pont
nem lesz teltett. Ha nincs hova feltolni, akkor a legutols medinkiemels utn kapott fa lesz az
eredmny. Ilyenkor az egsz fnak egy kiemelt j gykere lesz, amivel magassga eggyel megn
(gy szoktuk ezt interpretlni, hogy a fa felfel hzott). A kiemelt j gykr egy rtket s kt
legazst tartalmaz, amit a denci megenged.
Az elbbi beszrsi stratgia sorn gyeltnk arra, hogy a levelek azonos szinten legyenek,
s azt is automatikusan teljestettk, hogy a bels pontok legazsai nem resek. Az egyetlen
problma az lehetne, ha a kzps rekord kiemelse sorn, a balflbl s a jobbflbl keletkez
kt j pont nem tartalmazna elg rtket. A medin kiemelse akkor trtnik, amikor a pont
tlcsordult, teht r rekordot tartalmaz. A medin ezek kzl az r/2. rekord, teht a baloldali
pontba r/2 1rekord kerl, mg a jobboldalban r r/2 . Szerencsre r r/2 = [r/2] r/2 1
ezrt a nem gykr pontokra kirtt minimum-felttel teljesl.
Az algoritmust a fa struktrjnak megfelelen rekurzvknt ksztjk el. Ennek logikja a
rekurzivits miatt kiss eltr az elbbi informlis kptl. A fban val lefel lpkedsnek az adott
rszfval val j hvs felelmeg, mg a papra val visszatrs rekurzv hvsbl val visszatrssel
valsul meg. Hasznlunk egy NTT nev aget, mely akkor billen igazra, ha az aktulis fa
magassga a beszrs elttihez kpest 1-el megntt.

BFaBeszr(t, h, NTT)

t=
gykeres(gy(t), h.kulcs, i, T )
BFaBeszr(i(t), h, NTT)
NTT
Feltol(t, i)

t := h
NTT :=

SKIP

|gy(t)| r 1
NTT := Medkiemel(t)

2. algoritmus. A beszr eljrs rekurzv algorimusa B-fkra.


Nzzk meg, hogyan trtnik a 3, illetve 25 j rtkek beszrsa az albbi 3-korltos keresfba:
35
7/12
2

8/11

40/50
20/30

36

42/48

54

A 3 kulcs az egy hossz, a 2 kulcsot tartalmaz levlbe kerl, s minvel nincstlcsorduls, ksz
a beszrs. nincs

5
A 25 a 20/30-be levlbe kerl kzps rtknek. Mivel ez a pont tlcsordult, t emeljk ki
medinknt feletoljuk a7/12-be, ahol 3. kulcs lesz, teht a pont tlcsordul. Itt a kzps kulcs a
12, amit kiemelnk s feltoljuk a 35 el a gykrbe.
12/35
7
2/3

25
8/11

20

40/50
30

36

42/48

54

Trls B-fbl
Tekintsk t informlisan, mi trtnik egy adott kulcs rekord B-fbl val trlse sorn. A
trlend rekordot a keressi algoritmussal megkeressk.
1. Ha valamelyik szomszdos legazsa res (levelek esetn ez biztosan igaz), akkor a rekordot
ezzel az res legazssal egytt a pontbl trljk. Ha a trls utn elg rekord (legalbb r/2 1)
marad benne, kszen vagyunk. Ha nem maradt elg (alulcsorduls), akkor ezt a fa megfelel
talaktsval kezeljk le (3. pont)
2. Ha egyik szomszdos legazsa sem res, akkor - hasonlan a binris keresfkhoz - trjuk
vagy a baloldali szomszdos legazsnak maximumra (trlve azt a helyrl), vagy a jobboldali
szomszdos legazsnak minimumra (trlve azt a helyrl). Vilgos, hogy egy B-fa minimlis,
illetve maximlis eleme a bal szls levelnek els rekordja, illetve a jobb szls levelnek utols
rekordja. Teht a fa alakjt tekintve a maximum, illetve minimum trlse valamely levl egy
rekordjnak trlst jelenti. Mivel a levelek csupa res legazst tartalmaznak, ezrt itt kzvetlenl
mkdik az 1. pont szerinti pontbl trls.
3. Ha az alulcsorduls a fa gykerben fordult el, akkor a fa B-fa maradt. Ha nem s az
alulcsordult pontnak van olyan szomszdos testvre, melyben a minimumnl (r/21) tbb rekord
van - akkor a kvr testvr tad az alulcsordult levlnek egy rekordot. Az tads nem direkt
mdon trtnik, hanem a kzs papjukon keresztl. A papa kettjk kztt lev rekordja tmegy
az alulcsordult pontba, mg helyre a kvr szomszd megfelel szls rekordja kerl, kzben gyelve
a legazsok megfelel tcsoortostsra is. Az tads utn ltrejtt fa B-fa lesz, az eljrst be
lehet fejezni. Ha az alulcsordult pontnak nincs szomszdos kvr testvre, akkor az alulcsordult
levelet egyestjk valamelyik szomszdos testvrvel. Ekkor persze papjukat is mdostani kell,
hiszen az egyestssel eggyel kevesebb legazsa lesz. Ez gy trtnik, hogy a papbl leszvjuk
az sszevont testvrek kztti rtket az sszevons helyre. Ezzel megsznik az az anomlia is,
hogy a kt szomszdos testvr sszevonsa sorn kt olyan legazs keletkezik, melyek kztt nincs
rekord. Problma lehetne, ha az gy egyestett pont tlcsordulna. Ez szerencsre nem trtnhet
meg, mert az sszevont pontban r/2 2 +r/2 1+ 1= (2 r/2 1) 1 r 1 rekord lesz. Ha a
papban a leszvs utn maradt elg rekord, akkor kszen vagyunk. Ha nem, akkor feljebb lpve a
papa kzvetlen testvreit vizsgljuk, s hajtjuk vgre - a helyzettl fggen - az rtktadst, illetve
a leszvst. Mindezt addig csinljuk, amig egy leszvs sikeres (nem eredmnyez alulcsordulst az
papjban) nem lesz, illetve az utols leszvs az egsz fa gykerbl trtnt.
Az egsz fa gykrbl val leszvs csak akkor problma, ha ott eddig egyetlen rekord volt,
s az kerlt leszvsra. Ilyenkor a gykrpontot el lehet hagyni, a trls utni fa az egyetlen
legazsa lesz. A trlsi algoritmusnak ez az egyetlen olyan kimenete, mely sorn a fa magassga
1-el lecskken (ezt gy szoktuk interpretlni, hogy a fa fellrl fogyott).

6
Az algoritmust most is fa struktrjhoz illeszkeden rekurzvknt ksztjk el. A rekurzv
hvsok felelnek meg a fban val lefel lpsnek, mg visszatrsek a felfel haladsnak. Hasznlunk
egy CSK nev aget, mely akkor billen igazra, ha az aktulis fa gykerben a rekordok szma
kevesebb lett (leszvs trtnt r). Ha CSK igaz az egsz fra val hvs utn s a gykrbenben
0 rekord maradt, ekkor trtnhet meg a fa magassgnak cskkentse a meglev egyetlen legazsra
val ttrssel.
A BFaTrl eljrs programja:

BFaTrl(t,k,CSK)

gykeres(gy(t), k, i, T )

T ((i 1)t = i(t) = )

T (i 1(t) = i(t) = )

T (i 1(t) = i(t) = )

e
MinTr(i(t), k,
, CSK)
gy(t).rtk(i) := e

gy(t).kulcs(i) := k
j := i

BFaTrl(i(t), k, CSK)

PontbanTrl(t, i, CSK)

e
MaxTr(i 1(t), k,
, CSK)
gy(t).rtk(i) := e

gy(t).kulcs(i) := k
j := i 1
CSK
Transzforml(t, j, CSK)

j := i

CSK
SKIP

Transzforml(t, j, CSK)

CSK
SKIP

Transzforml(t, j, CSK)

SKIP

3. algoritmus. A B-fbl trls algoritmusa


A PontbanTrl eljrst az albbi brval szemlltetjk arra az esetre, amikor a trlend i.
rekord jobboldali kzvetlen legazsa res (a msik g esetn a helyzet hasonl).
i.
hi
i(t) =
.
Ha itt a pontbl trls sorn r/2 1 -nl kevesebb rekord maradt, akkor mg a CSK ag
igazra billen.
A MaxTr eljrs a kvetkez (a MinTr ennek analogonja):

CSK)
MaxTr(t, h,

:= gy(t) l.eleme
h
PontbanTrl(t, l, CSK)

l := |gy(t)|
h(t) = 0

CSK)
MaxTr(l(t), h,
csk
Transzforml(t, l, csk)

SKIP

4. algoritmus. A maximum trls algoritmusa


A transzformlst a rekurzv programban az alulcsordult pont papjnak szintjn kell megvalstani (hiszen t is vltoztatni kell. A Transzforml eljrs az az esetet kezeli le, amikor valamely
pont A j. legazsnak gykerben trtnt az alulcsorduls (amit az a legazs a CSK ag igazra
billentsvel jelezett). Az eljrst hats most is rajzban szemlltetjk. A kt eset

7
a) rekordtads: (j 1)t vagy (j + 1)(t) egyiknek gykere elg kvr (hossza r/2), elemtads,
b) leszvs (j 1)t s (j + 1)t mindegyike (mr amelyik ltezik) a lehet legsovnyabb (r/2 1
elem van a gykerben)
A rekordtads smja:
h
hj+1
j+1

j
hj+1

j+1
h

A CSK ag rtke hamisra billen.


b) A leszvs smja:
hj+1
j

j+1
hj+1

Ha |gy(t)| < r/2 1 , akkor a leszvs a papban alulcsordulst eredmnyezett, teht a CSK
igazra billen, egybknt hamis. Megjegyezzzk, hogy itt llhat el az az eset, amikor a gykrben
nem marad rtk, csak egyetlen legazs. Ezt majd a visszatrs utn, fltte lv szint fogja
lekezelni a CSK vizsglata utn. Ha nincs felsbb szint, teht kls hvsrl van sz, akkor a
kls hv vgezheti el a gykrpont elhagyst.
Pldk trlsre r = 5 mellett.
1. plda. Az eredeti fa:
10/20/30
2/3

12/15

22/25/27

32/35

a 15 trlse sorn keletkezett alulcsordult pont jobboldali testvrbl trtnhet rekordtads.


A transzformlt fa:

8
10/2022/30
12/1520

2/3

22/25/27

32/35

2. plda Tekintsk most a 15 trlst egy kicsit mdostott, a 22-t nem tartalmaz fbl :
10/20/30
2/3

12/15

25/27

32/35

Most a 15 trlse sorn alulcsordult pontnak nincs kvr testvre. Egyestjk a jobboldali
testvrvel, leszvva kzjk a 20-at a gykrbl. Az eredmny:
10/30
2/3

12/20/25/27

32/35

3. plda: Nzzk az elbbihez hasonl leszvsos pldt olyan kisebb fra, ahol a gykrben
csak egy rtk van.
20
12/15

25/27

Most is leszvsra kerl sor, a gykrben nem maradt rekord, csak egy leggazst. Az eredmny
ilyenkor a legazs l (1-el cskken a fa magassga).

12/25/27

4. plda. 20 tlse az 1. plda fjbl. Olyan bels rekordot kell trlnnk, melynek szomszdos legazsai nem resek.
a.A baloldali rszfjnak maximumt (15) trljk (szre vve hogy ez alulcsordulst eredmnyezett), s a 20-at erre trjuk.
10/2015/30
2/3

12/15

25/27

32/35

b. Az alulcsordulst lekezeljk, esetnkben leszvssal.


10/30
2/3

12/15/25/27

32/35

Trjnk r az r megvlasztsnak krdsre.


B-fkat nagy mennyisg adat trolsra hasznlunk, melyeket mgneslemezen helyeznk el.
A lemezegysg egy fellete svokra oszlik. Az azonos fejpozcihoz tartoz svok sszessge a
cilinder. Az egy cilinderen lv adatok viszonylag gyorsan (fejmozgats nlkl) kereshetk vgig.
Ezrt r azon h D rekordok szma, melyek egy cilinderre rfrnek (a rekordok azonos hosszt
felttelezzk!).

Keressek, 2016/17 8. elads


A legtbb szoftverfeladat megoldsa sorn elkerl rszfeladatknt, hogy valamely halmaznak,
sorzatnak keressk meg egy adott tulajdonsg elemt, elemeit. Az ilyen feladatokat keressi
feladatnak hvjuk. Mi a keressi feladat absztrakt vltozatval, a sztrakban val keresssel
foglalkozunk

A keressi feladat
Alapfogalmak
Egy D = K ri=1 Ei univerzum egy H D vges halmazt asszociatv adatszerkezetnek
neveznk. Az els mezre a kulcs mg a tbbire az ert
eki meznvvel hivatkozunk.
A kulcs mez kulcs tulajdonsg a H asszociatv adatszerkezetre nzve, ha |H| = |H.kulcs|
(a kulcsok egyediek). Azokat az asszociatv adatszerkezeteket, melyekben a kulcs mez kulcs
tulajdonsg, sztraknak nevezzk. A sztrakra az albbi absztrakt mveleteket deniljuk
(itt Szt jelli a kulcs mezhz kapcsold lehetsges sztrak sszessgt.)
res : Szt
res-e: Szt Bool
Keres: Szt K D Bool
Beszr: Szt D Szt
Trl: Szt K Szt
Itt res az res sztrat (res halmaz) jelli, res-e rkrdez egy sztr ressgre, Keres a sztrban keres egy adott kulcs elemet, Beszr j elemet (h) illeszt a sztrba, azzal az elfelttellel,
hogy annak kulcsa mg nem szerel benne (h.kulcs
/ H.kulcs), Trl pedig kiveszi a sztrbl az
adott kulcs elemet (k), azzal az elfelttellel, hogy van benne ilyen kulcs rekord (k H.kulcs ).
A konkrt megvalsts sorn elfelttelek nlkl deniljk a Beszr s Trl mveleteket,
hibajelzst adva, ha a mvelet nem elvgezhet.
Beszr: Szt D SztBool
Trl: Szt K SztBool. A tovbbiakban mi is ezt az utat kvetjk.
A sztrakra vonatkozan a f mvelet a keress. A beszrs s trls algoritmusa is tartalmaz
egy keressi komponenst.
A sztrakat, illetve a rajtuk vgzett mveleteket alapveten kt megvalstsi stratgival
implementljk, a visszavezetssel, illetve a hastssal.
A visszavezets sorn a sztr elemei kztt rkvetkezsi relcit vezetnk be, majd az gy
denilt adatszerkezettel s az azon rtelmezett mveletekkel valstjuk meg a sztrt (rtkeit,
mveleleteit).
A hasts sorn egy, a kulcsokon adott tulajdonsg alapjn a sztrt kisebb rszekre daraboljuk, hogy aztn a mveleteket a kisebb sztrakon vgzett mveletekre vezessk vissza. Persze a

2
kisebb mret sztrakat is kezelni kell valahogy, emiatt a darabolsi folyamat vgn elll kis
sztrakat itt is visszavezetssel kell megvalstatani.
.

A hastsos technika
Legyen H D = K ri=1 Ei egy sztr (ksbb vizsgljuk az asszociatv adatszerkezetek esett
is).
A hasts alaptlete, hogy valamely H sztr (ksbbiekben megengdjk az asszociatv adatszerkezeteket is) rekordjaira nem valamilyen indirekt mdon, szerkezeti relcira visszavezetssel
hivatkozunk, hanem direkt mdon, kulcsuk alapjn, mintegy a kulcsokkal indexelnk. Ennek elnye, hogy egy adott kulcs knnyen megkereshetnk, csak meg kell hatrozni, hogy a kulcs alapjn
hol tltlhatjuk meg. Ha ott van, igen vlaszt adunk, egybknt nemet.
Direk elrs tblzat
K felsorolsi tpus (vges, indexelni lehet az elemeivel). Plda felsorolsi tpusra az egsz intervallum, vagy pldul a ht napjai, stb... . A H D sztrat egy A K indexhalmaz, E {nemdef}
rtkhalmaz vektorban reprezentlljuk, melyet direkt elrs tblzatnak neveznk. Legyen a
vektor csupa Valamely h H az vektor h.kulcs cm elembe tesszk be. Ez a direk elrs
tblzat. k H.kulcs

nemdef k H.kulcs
.
A(k) =
h.rtk
h H s h.kulcs = k
Kp: A res helyek, nemdef rtkkel.
A

res helyek nemdef rtkekkel

H-beli elemek rtkrszei

H-beli elemek rtkrszei.


Keres(t, k, h, T ) a kvetkez trivilis program:

Keres(t, k, h, T )

A(k) = nemdef
T :=
T :=
h := (k, A(k))

1. algoritmus. A hasts direkt elrsi tblzathoz tartoz Keres(t, k, h, T ) eljrs.


O(1) a mveleti ignye. A beszrs az A(h.kulcs) := h.rtk, a trls az A(k) := nemdef
utasts, szintn O(1) kltsggel.
A mveleti igny szempontjbl jobbat elkpzelni sem lehet.
Problma. |K| ltalban sokkal nagyobb, mint |H|.
(Pl. K: 20 karakteres, betkbl s spacekbl ll lncok
H: Egy zem dolgozinak adatai, legfeljebb 20 hossz nvvel, mint kulccsal.
|H| ezres nagysgrend |K|(32 + 1)20 2100 mrhetetlenl nagy, nagyon kicsi kitltttsggel.)
Mikor hasznlhat:
1) |K| nem tl nagy
|H|
nem tl kicsi.
2) |K|
:= |H|
kitltttsgi arny. Teht 2) azt jelenti, hogy a kitltttsgi arny nem tl kicsi.
|K|
Plda, ahol a mdszer jl hasznlhat:.
K := (0, 1, ..., 9)7 a telefonszmok halmaza.
H := a budapesti elzetk a telefonszmmal, mint kulccsal.
|K| = 107 mg kezelhet, |H|
15 mg j.
|K|

0.0.1.

Hast tblzat

K nem indexelsi tpus, illetve az kitltttsgi arny nagyon kicsi!


Legyen I egy indexelsi tpus, melyre |H| < |I| |K|
A H D sztrat egy A I indexhalmaz, D {nemdef} rtkhalmaz tmbben helyezzk
el. Ez a hast tblzat.
Szksg van mg egy : K I fggvnyre, melyet hast fggvnynek neveznk.
A(i) =

nemdef
h

i (H.kulcs)
h H s (h.kulcs) = i

Problma: Ez az A(i) elrendezs nem felttlenl jl denilt. Elkpzelhet, hogy klnbz


h 6= h H elemekre i = (h .kulcs) = (h .kulcs).
Ilyenkor mi kerljn az i. helyre?

0.1. denci. Azt mondjuk, hogy H szerinti hast tbls brzolsnl kulcstkzs van, ha
J olyan h , h H, h 6= h elemek, melyekre (h .kulcs) = (h .kulcs).
Nzzk elszr azt az esetet, amikor nincs kulcstkzs H brzolsa sorn. Ez a tkletes
hasts.

4
0.0.1.1.

Tkletes hasts

Kp:
A

res helyek nemdef rtkekkel

H-beli rekordok

Keres(t, k, h, T ) a kvetkez trivilis program:

Keres(t, k, h, T )

A((k)) = nemdef
T :=

A((k)).kulcs = k
T :=
T :=
h := A((k))

2. algoritmus. A hasts hast tblzaton alapul mszerhez tartoz Keres(t, k, h, T ) eljrs.


O(1) a mveleti ignye.
Trls: A((k)) := nemdef (feltve, hogy k H.kulcs)
Beszrs: Problma: H.kulcs-on val klcsns egyrtelmsge a beszrand h-val elromolhat.

Beszr(H, h, hiba)

A((h.kulcs)) = nemdef
A((h.kulcs)) := h
hiba :=
hiba :=

3. algoritmus. A hasts hast tblzaton alapul mszerhez tartoz Beszr(H, h, hiba) eljrs.
Ltszik, hogy a tkletes hasts esetn a mveletek O(1) idejek, de a beszrs elronthatja a
tkletessget.
Alkalmazs: Olyan H sztrakra, ahol nem megengedettek a beszrsi, trlsi mveletek (statikus). Ilyenkor elg egyszer tallni az adott H-hoz egy H.kulcs-on klcsnsen egyrtelm -t.

5
Kvetelmnyek -re:
1) H-tl fggetlenl legyen denilva,
2) Knnyen (gyorsan) szmthat legyen,
3) Klcsnsen egyrtelm legyen H.kulcs-on.
tlet: vletlenszeren vlasztunk -t, remlve, hogy H.kulcs-on klcsnsen egyrtelm. (Absztrakt megkzelts, a vletlenszersget ksbb kifejtjk.)
Ha vletlenszer, H.kulcs-on is az.
Legyen m := |I|; n := |H.kulcs| = |H|.
teht egy n helyrl m helyre kpez lekpezs (m > n). Ilyenek szma: m
m {z
... m} =
|
n

mn Feltve, hogy egyenletes valsznsggel fordul el -knt brmelyik ilyen fggvny, egy konkrt
vlasztsnak valsznsge: 1/mn
Az elbbi fggvnyek kzl azoknak a szma, melyek klcsnsen egyrtelmek: m(m
1)...(m (n 1)). Ezrt
aklcsnsen


 egyrtelm
 fggvnyek vlasztsi valsznsge, Pn,m =
m(m1)...(m(n1))
1
2
n1
= 1 m 1 m ... 1 m .
mn
Az lenne j, ha ez minl nagyobb lenne.
Vilgos, hogy rgztett n mellett m-el tartva a vgtelenbe ez a szorzat 1-hez tart. Persze ez n
visszatrve az eredeti problmra - azt jelenten, hogy az = |H|
=m
kitltttsgi arny tartama
|I|
a 0-hoz, ami nyilvn nem j megolds.
n
Tartson teht n s m mindegyike a vgtelenbe gy, hogy kzben limn,m m
= legyen,
ahol 0 < < 1 egy mg sszer kitltttsgi arny. Vlasszuk meg az szmot gy, hogy
0 < 1 12 ( ) < 1 legyen, (ehhez csak elg kicsinek kell a -nak lennie).


n1

n1
1
+1 n1
1 m
1 n
m
Pn,m
=
1

szmtani, mrtani kzp.


2
2m
n
limn,m m = miatt az elbbi -hoz lteznek olyan n0 , m0 egszek, hogy n n0 , m m0

n1
n
n
esetn < m
< + csak ilyen n, m-ekre vizsglva Pn,m fels korltjt Pn,m 1 12 m


n1
1 12 ( )
.

Ez utbbi viszont n esetn biztosan 0-hoz tart, hiszen -t gy vlasztottuk, hogy az


alapban lv szm a (0, 1) nylt intervallumba essk.
Vagyis sszer kitltttsg arny mellett a vletlenl vlasztott klcsns egyrtelmsgnek
valsznsge a mret nvekedsvel tart a 0-hoz. Emiatt teht a klcsnsen egyrtelm keresse
elg kltsges feladat. Csak kis mret sztrakra, meglehetsen sok prblkozssal lehet ilyet
tallni.
Pl.: H : Valamely programozsi nyelv alapszavainak halmaza. Nem nagy, statikus sztr.
Mi van, ha a sztr nagy s dinamikus?
Vlasztunk egy 1) s 2)-nek megfelel -t, s lekezeljk valahogy a kulcstkzseket (azaz azt,
hogy tbb h H elemet is ugyanarra az i I-re kpez).
0.0.1.2.

Hasts explicit alstruktrkkal.

Ennl a mdszernl nem kveteljk meg, hogy a kulcs mez kulcs tulajdonsg legyen, tovbba
azt sem, hogy n < m legyen.
: K I knnyen szmolhat, egyenletesen sztoszt f v legyen.
Hi := {h; h H s (h.kulcs) = i} az i. helyre lekpzd elemek n. alstruktrja.
H reprezentcija: A relatv, indexhalmaza I, rtkhalmaza a lehetsges H D asszociatv
adatszerkezetek.
I = {i0 , i1 , ..., im1 }

6
A:
..
.
i.

..
.
..
.

Hi0
Hi

Him1
A(i) = Hi i-re

Keres(H, k, h, T )
A((k)) =

hiba :=

Keres(A((k)), k, h, t)

4. algoritmus. Az explicit alstruktrj hasts mszerhez tartoz Keres(H, k, h, T ) eljrs.


Keres H egy k kulcs elemt adja vissza h-ban (ha tbb van, valamelyiket).
Itt A((k)) maga is egy asszociatv adatszerkezet, melyet magt is brzolhatunk sok fle
mdon.
Pldul egy lncolt listval (rendezetlen linearizls). Ezt az esetet hasts lncolt altblkkal
nvvel illetjk, s ilyenkor Keres egy lineris keress.
Feltve, hogy egyenletesen oszt szt, a lncolt alstruktrs hasts vrhat sszehasonltsi
n
n
, hiszen egy alstruktra mrete az egyenletessg miatt m
.
szma: 12 m
Ha az egsz H-t linearizltuk volna, akkor az sszehasonltsok vrhat szma n2 . Teht
m-szeres gyorsulst rtnk el.
De brzolhatnnk A((k))-kat magukat is hastssal, persze valamely msik hast fggvnnyel. Ezt a mdszert hierarchikus hastsnak hvjuk.
Minden hierarchikus hast vgn ott lesz egy tkletes hasts, vagy valamilyen visszavezetses
brzols, legtbbszr listaszerkezet.
Beszrs, trls az explicit alstruktrs mdszernl:
Beszr(H, h) = Beszr(A((h.kulcs)), h)
Trl(H, k) = Trl(A((k)), k)
Beszr, Trl az alstruktrk reprezentcijhoz ill beszrsi, trlsi eljrsok. Egyenletesen
oszt mellett itt is m-szeres a gyorsuls.
0.0.1.3.

Hasts implicit alstruktrkkal (nylt cmzs)

Ez a mdszer is a kulcstkzsek feloldsra szolgl. Felttelek az eredetiek.


H D sztr, : K I knnyen szmolhat, egyenletesen sztoszt fggvny, n = |H| <
|I| = m.
Az ugyanazon i-re lekpzd Hi -beli elemek most az A hast tblba kerlnek bele kzvetlenl,
az albbi, a tkletes hasts ideolgijra hajadz mdon:

7
Kezdetben A(i) rtke nemdef. Egy h H-t az A((h.kulcs)) elembe prblunk elhelyezni.
Ha az nemdef, rendben. Ha nem az, akkor (h.kulcs)-hoz kzel, valamilyen keressi stratgia
szerint meghatrozott els res (nemdef) helyre tesszk h-t. Azt, hogy milyen, h.kulcs-tl fgg
sorrendben keressk vgig A-t, prbasorozatnak nevezzk.
0.2. denci. Egy k K hoz tartoz prbasorozat I elemeinek olyan permutcija, melynek els
eleme (K).
Pl. I = [0...m 1] s tegyk fel, hogy (k) = i0
Ekkor a k-hoz tartoz lineris prbasorozat: (i0 , i0 + 1, ..., m 1, 0, 1, ..., i0 1), a d lpskz
lineris prbasorozat ((d, m) = 1): (i0 , i0 + d(mod m), ..., i0 + (m 1)d(mod m)).
Olyan vltozat is van, ahol d = (k) ((d, m) = 1), teht a lpskz is fggvnye k-nak, nem
csak az els elem. (Dupla hasts).
A prbasorozat j. elemt ms, nem lineris fv.-el is szmthatjuk, pl. i(k, j) : (k) + c1 j +
c2 j 2 (mod m), termszetesen gyelve arra, hogy j = 0, ..., m 1 mellett a teljes I-t bejrjuk.
Jells: i(k, j) a k-hoz tartoz prbasorozat j. eleme (valamilyen prbastratgia mellett).

Keres(H, k, h, T )

j := 0, T :=, Vge :=
j < m 1 Vge

Vge :=

A(i(k, j)) = nemdef


A(i(k, j)).kulcs = k
h := A(i(k, j))
j := j + 1
T :=
Vge :=

5. algoritmus. A Keres(H, k, h, T ) algoritmus.

Beszr(H,h,Teli)
j := 0, Vge :=

j m 1 Vge
A(i(k, j)) = nemdef
A(i(k, j)) := h
j := j + 1
Vge :=
Teli :=
j=m
Teli :=

SKIP

6. algoritmus. A Beszr(H, h, Teli) algoritmus.

Trl(H,k)
j := 0

(A(i(k, j)) = k)
j := j + 1
A(i(k, j)) := trlt

7. algoritmus. A Trl(H, k) algoritmus.


Itt trlt a nemdef-hez hasonl j konstans, mely rtkknt betehet A elemeibe. Azrt nem
rhat t a trlt elem nemdef-f, mert gy id eltt lellthatn ms elemek keresst.
Megjegyzs: A trlt bejegyzs elemeket a Beszr eljrs j elemekkel felrhatja.
Mveleti igny.
Keress: Olyan lineris keress, mely a megtallt elemig (sikeres keress) vagy az els nemdefig trtnik (sikertelen keress). Emiatt az a j, ha a keresst minl gyorsabban lellt nemdef-ek
egyenletesen eloszolva, srn vannak. Ebbl a szempontbl az egyszer lineris prbasorozat
(d = 1) a legkevsb j, sokkal hatkonyabb a dupla hasts ill. ngyzetes kiprbls (i(k, j) j-ben
msodfok polinom).
0.1. ttel. Az kitltttsgi arny H-ban, egyenletes hastsi felttelek mellett a sikertelen ke1
1
, a sikeres 1 ln 1
.
ress vrhat prbaszma 1
(Beszrs a sikertelen keress, trls a sikeres keress becslse szerint).
A hast fggvny vletlenszersgrl . -tl azt vrjuk, hogy a K-beli kulcsokat
egyenletesen ossza szt I elemei kztt.
(Vges K esetn ez azt jelenti, hogy j I-re 1 (j) mrete krlbell egyforma). Ezt mskpp
gy is szoktuk fogalmazni, hogy ha vletlenszeren kivlasztunk egy k K kulcsot, akkor annak
valsznsge, hogy (k) = j legyen valamely j I-re, pontosan m1 .
Az egyszersg kedvrt legyen I = {0, 1, ..., m 1}
Kt lps:
1 kever fggvny 1 : K [0...M 1] M egy valamilyen nagy, M m konstans.
K kls tulajdonsgai alapjn kszt el egy [0...M 1]-beli rtket. Kls tulajdonsg: Memriabeli bitkp vletlenszer transzformcija.
2 trzsfggvny: 2 : [0...M 1] [0...m 1] egyenletesen sztoszt.
...
Pl. kever fggvnyre: K = 1 byte 2 byte
P

2

1 (k) =
rgztett z db bitje, mint binris szm.
j bytej
pl.: trzs fggvnyre.
a) Szorzsos mdszer 2 (d) = [(d(mod 1) m)]
(0, 1) vals
b) Osztsos mdszer 2 (d) = d(mod m)
m ilyenkor nagy prm.

9
di1 bit

i=

}|

i1 (ei1 )

di1s bit

}|

is (eis )

denilatlan bitek
1. bra. Az i elem alakja a ...
0.0.1.4.

Parcilis hasts

Olyan asszociatv adatszerkezetek esetn hasznljuk, ahol nincs kitntetett kulcsmez. Tbb mezre vonatkoz sszetett krdsek, mintk alapjn trtnik bennk a keress.
Legyen teht D = E1 E2 ... Er , Ei -k legfeljebb megszmllhat halmazok, Hh D vges.i
Legyenek 0 d1 , d2, ..., dr egszek, d = d1 +d2 +...+dr , legyenek tovbb 1 : E1 0...2d1 1
h

2 : E2 0...2d2 1
h

r : Er 0...2dr 1 hast fggvnyek.


h

A : D 0...2d 1 hastfggvnyt a 1 , 2 , ..., r konkaterltjaknt lltjuk el.


((e1 , e2 , ..., er )) = 1 (e1 )2 (e2 )...(er ).
Ezzel a rszenknt (parcilisan) szmolt hast-fggvnnyel (mely ltalban nem klcsnsen
egyrtelm H-n) lncolt altbls brzolst vgznk. Teht az (e1 , ..., er ) elem az A(((e1 , ..., er )))
pointer listba kerl.
Keress. Olyan h H elemet keresnk, melyre h.rtki1 = ei1 , ..., h.rtkis = lis .
Az elhelyezsi stratgia alapjn ilyen elem csak olyan A(i) pointer allistban lehet, ahol i
alakja az 1. bra szerinti.
Minden lehetsges i-t - a denilatlan biteket varilva - ellltunk s A(i)-t vgigkeressk a
minta illeszkedst gyelve.
Az alstruktrk egyenletes mrett felttelezve a vrhat keressi id:
1
n2
2d(di1 +...+dis ) 12 2nd = di1 +...+d
is
2
varicik szma egy altbla elemszma
A gyorsuls: 2kitlttt bitek szma -szoros
Gyakran keresett mez: nagyobb dj
Szls eset: rtk1 kulcs. Ekkor d1 = d, a tbbi 0.

Vous aimerez peut-être aussi