Anda di halaman 1dari 77

Adatszerkezetek s algoritmusok

A vals vilgban rendszerekrl beszlnk. A dolgok sszetevi egymssal


klcsnhatsban vannak, viselkednek, tulajdonsgaik vannak. Jellemzjk a viselkeds, ezzel
foglalkozik a rendszerelmlet.
A rendszer
Rendszer: Kzs ismrv alapjn az sszetartoz, egymssal meghatrozott kapcsolatban lv
elemek jl krlhatrolt egyttese.
Elem: A rendszer azon rsze, amelyet azrt vlasztunk ki, hogy vizsgldst vgezznk rajta.
Egy elem is lehet rendszer. Segtsgvel jellemezhet a rendszer.
Klcsnhats: Elemek kztti olyan kapcsolat, relci, amely az adott elemeket a rendszer
rszv teszi. A rendszer tbb mint az elemek egyttese.
A rendszerek jellemzi:
Komplexits: Sok elem s bonyolult klcsnhatsok jellemzik.
Nyltsg: A rendszer nem nmagban ltezik, hanem ms rendszerekkel egytt.
Krnyezetvel lland kapcsolatban van.
Dinamikussg: A rendszer elemeinek klnbz llapotai vannak, s a rendszer
elemei s azok viselkedsei idben llandan vltoznak.
A vals rendszerek tlsgosan komplexek, a teljes valsgban ltalban nem tudjuk
kezelni, gy egyszerstsi mdszerekre van szksg. A cl a komplex rendszerek
leegyszerstse.
Modellezs: Lnyege az absztrakci, azaz az elemek lnyegt, karakterisztikus kzs
tulajdonsgait kiemeljk, a klnbzsgeket elhanyagoljuk s a modellbe ezeket a kzs
tulajdonsgokat vonjuk be. A modellben vizsglunk, krdseket tesznk fel, kvetkeztetseket
vonunk le, amit a vals rendszerre visszavezetnk. Clja, hogy a vals vilgrl olyan
ismereteket szerezznk, melyek helyesen tkrzik a vals vilgot. Az ismeretekre azrt van
szksg, hogy tadhassuk ket. Az ismeret mindig rgzitett formban van, s hozzfrhet.
Az informci
Adat: A tnyek elkpzelsnek nem rtelmezett, de rtelmezhet formban rgzitett alakja.
(pl:1995)
Informci: Az adatokon vgzett gondolati mvelet eredmnyeknt ll el. (1995-vszm) Az
informci viszonylagos ltalban. Ugyanaz az adat az egyes ember szmra ms-mst jelent.
A modellezs, az informci s a rendszer is viszonylagos. A rendszerben az elemek
klcsnhatsait, tulajdonsgait adatokkal rjuk le. Ez az adatmodell. Ez igen bonyolult
szerkezet lehet. Az informatika II. az adatmodellel foglalkozik.
Az elemek viselkedst, a rendszer mdosulsait eljrsmodellnek nevezzk. Ezzel a
programozs I. foglalkozik.
Tbbfajta irnyelv ltezik: Van aki szerint a viselkedsbl kvetkezik az adatmodell, a
msik felfogs szerint az adat tulajdonsga meghatrozza az eljrst. Adatcsoportokkal tudok
jellemezni egy-egy elemet, s ezek kztt kemny logikai sszefggs van. A modellben
(logikai) adatszerkezetekrl beszlnk.
Adatszerkezetek: Adatttelekbl vagy adatelemekbl llnak s kzttk valamilyen kapcsolat
van.

Fizikai (adat) trszerkezetek: Meg kell klnbztetni az operatv trat, vagy memrit,
amelynek brmelyik bjtja kzvetlenl elrhet. Vannak mg a httrtrak, vagy
perifrik. Ezeknl van mechanikai mozgs. A mgneslemeznl nem pontos az a
kifejezs, hogy kzvetlen elrs, mert br mindegyik elem elrhet, de ez nem
ugyanannyi id alatt trtnik. Az adatszerkezetek egyik fajtja az llomnyok (file).
llomny csak perifrin ltezik. Adatszerkezet, amelyik perifrin ltezik, az az
llomny. (data structure - adatszerkezet)
Adatszerkezetek szemlltetse:
Egy-egy elem ltalban adatcsoporttal jellemezhet. Az adatcsoport adatai mindig
sszefggenek. Az adatszerkezetek adatttelekbl, adatelemekbl llnak. Ezek kztt
valamilyen kapcsolat ll fenn. Adatelemek: o, kapcsolat: .

Adatszerkezetek osztlyozsa:

Brmely adatszerkezet mindig vges szm adatelemet tartalmaz.


Mveletek az adatszerkezetekkel:
Ltrehozs: Nem volt adatszerkezet, lesz.
Mdosts:
bvts vagy beszrs (csak dinamikus adatszerkezeteknl): j adatelemek
kerlnek be. Az adatelemek szma n.
trls: Cskken az adatszerkezet elemeinek a szma, az addig ottlv eleme(ke)t
tvoltom el.
csere: Az elemek szma nem vltozik, csak valamely elem vagy elemek rtke,
kicserlem egy msik rtkre.

Rendezs
Keress
Bejrs (elrs): Az adatszerkezet minden elemt rinteni akarom, krds, hogy ezt milyen
sorrendben tehetem. Lehet soros (az adatszerkezet elemeit valamilyen fizikai sorrend alapjn
tudjuk megfogni, ahogy le vannak kpezve (ld. mgnesszalag)), szekvencilis (valamilyen
logikai sorrend az alapja (ld. sztszrtan trolt elemek)), vagy kzvetlen (fggetlen a tbbi
adatelemektl (ld. folytonos trols)).
Feldolgozs: Az adott adatszerkezet hogyan s mire hasznlhat.
Adatszerkezetek trolsa
A logikai adatszerkezeteket le kell kpezni a trba. A memriban ktfle mdon
trolhatunk adatszerkezeteket.
1. Folytonos (szekvencilis, vektorszer) trols. Ha a memriban trolt elemek egy
folytonos trterleten egyms utn helyezkednek el, sorba rendezzk ket valamilyen
szempont szerint. Az adatttelek trolsi jellemzi azonosak (tpus, brzolsi md, hossz).
Ismerni kell a kezdcmet, a trolsi jellemzket, s az elemek
szmt. Itt minden elemet kzvetlenl meg tudok fogni, minden adatszerkezet trolhat
ilyen mdon.
Mveletek:
Ltrehozs: Az adatelemeket, adattteleket egy-egy trrszbe helyezem el. A kezdcmtl
minden ttelt folytonosan pakolunk a trba.
Bvts: A vgre jabb elemeket lehet rakni. Beszrsnl az adott elem behelyezsnek
helye utn lv elemeket jobbra kell tolni, t kell mozgatni.
Trls: Megklnbztetnk fizikai s logiakai trlst:
Fizikai trls: A trrsz mgtt lv elemeket rcssztatom a trlend elemre,
mindegyiket eggyel balra.
Logikai trls: Az elemek szma nem cskken. A trlni kvnt elemet megjellm,
hogy trlve van ( trlt jellel). Ekkor az adatelem rtke vltozik meg, gy ez
valjban egy csere.
Csere: brmely elem kzvetlenl megfoghat.
Rendezs: Ha van rtelme, akkor mindegyik rendezsi algoritmus alkalmazhat.
Keress: Ha van rtelme, akkor minden keressi algolitmus alkalmazhat.
2. Sztszrt trols (vletlenszer). Az adatelemek trolsi jellemzik lehetnek
klnbzek. Minden adatszerkezet trolhat sztszrtan.
A tnyleges adatelem mellett ltezik a trrsznek egy gynevezet mutat rsze is,
amely olyan informcit tartalmaz, hogy az adott trelem utn melyik msik trelem
kvetkezik az adott adatszerkezetben.
a) Egyirnyban lncolt lista (linked list)
Trszerkezet vagy trolsi md.

Minden elem mutatrsze tartalmazza a kvetkez elem trolsi cmt, az adatrsz az


adatelem rtkt tartalmazza. Tudni kell, hogy melyik a lista els eleme. Ennek a cmt a
fej tartalmazza, a listn kvli elem, nem tartozik az adatszerkezethez. Az utols elem
mutatrsze nem mutat sehova sem, a lista vgt jelzi.

reslista:

Mveletek:
Ltrehozs: Els lpsknt ltrehozom az reslistt, utna bvtek.
Bvts: A lista brmelyik helyre beilleszthetek egy j trolsi elemet:
a) A lista elejre: Lefoglalok egy helyet a trban. Brhol, de tudom a cmt. A fej az j
elemre, az jelem az eddigi els elemre mutat.
b) A lista vgn: Lefoglalom a trhelyet. Az j elem mutatja a lista vgt jelz
informci: NULL. Az utols elem mutatrszbe berom az j elem cmt, az
eddigi utols elem mutatja az j elemre fog mutatni. Az utols elemet meg kell
keresni, vgig kell menni a listn, teht szksg van egy bejrsra. Minden elem
megmondja, hogy hol a rkvetkezje.
c) Bvts a listban: Az elrs szekvencilis. (beszrs) A listnl a keress teljes
keress, ahol adatrtket keresek. Minden elemre csak gy tudok eljutni, ha eltte
vgig mentem az eltte lv elemeken. Az az elem, amin llok az aktulis elem.
Az aktulis elem el, vagy mg is beszrhatok.
Mg bvtek: A megelz elemekrl nincs informcim. Az aktulis elem
mutatrszbe az j elem cmt rom, az j elem mutatrszbe az aktulis
elem mutatrszben lv cmet rom.

El bvtek: Az elz mdszerrel nem lehet bvteni, mert nem tudom


megmondani, hogy mi az elz elem cme. Meg kell jegyezni az aktulis
elem eltti elem cmt.
Trls: Fordtott bvts.
a) Els elem trlse: A lista fejbe az els elem mutatrtkt viszem.
b) Utols elem trlse: Az utols eltti elemet megkeresem s a mutatrszbe NIL-t
rok.
c) Ha az aktulis elemet akarom trlni, akkor az aktulis elem mutatrszt tviszem
a megelz elem mutatrszbe.
Csere: Simn vgrehajthat.
Keress: Csak teljes keresssel, amennyiben nem rendezett. Ha rendezett, lineris
keresssel.
Rendezs: Tegyk fel, hogy van egy listm, s azt sajt helyn akarom rendezni. Ez nem
clszer. Gyakoribb, hogy egy j listt rendezetten hozok ltre. Ezt gy tehetem, hogy
ltrehozom az res listt s beszrsos rendezst alkalmazok. A beszrand elem helyt
lineris keresssel keresem meg.
Bejrs: Minden problma nlkl megtehet.
Feldolgozs: Adatszerkezet-fgg.
b) Krkrs (cirkulris) lista

Az utols elem mutatja az els elem cmre mutat. Brmelyik elembl krbe tudok
menni, a bejrst egyszersti.
c) Ktirnyba lncolt lista

Minden elemnek kt mutatja van, amelyek informcit tartalmaznak a kvetkez s


a megelz elemrl. ltalban kt fej van, a lista elejre s a vgre mutatnak, gy kt
irnyba tudok haladni.
d) Multilista
Tbb rtelmezse is van.
1) Az adatelemek sszetettek, pl:
Kialaktok az egyik s a msik rszre egy listt. A listaszerkezet pl.
tartalmazza a neveket ABC sorrendben, az tlagokat cskken sorrendben. Tbb
mutatrsz van, mindegyik egy-egy adatelemrsz szerint lncol. Annyi mutatrsz s
annyi fej van, ahny lnc.
Ez is lehet ktirnyba lncolt, illetve krkrs lista.
2) Legyenek az adatelemek sszetettek, gy van egy adatelem sorozatom. Egytt
akarom kezelni az azonos rtkeket, pl: a Debrecenben lakkat. gy olyan rszlistk
jnnek ltre, amelyben azonos rtk elemek vannak. Annyi rszlista s fej van,
amennyi fle rtk tallhat.

3) Az adatrsz is tartalmazhat mutatrszt, amely egy msik listra mutat. Ekkor


listkat fzk fel.
Azt jelzi a jelzrsz, hogy tnyleges adatra, vagy egy msik listra mutat. Jelz: 0,1
(bitek).

Ezek trolsi szerkezetek!!!


Vannak olyan adatszerkezetek, amelyekhez jobban illik a folytonos trols, msokhoz
praktikusabb a sztszrt.
Reprezentci: A trolsi md s a lekpezs egyttese.
Implementci: A reprezentci s a mveletek egyttese.

Trls
Amikor adatszerkezetben trlst vgznk, akkor egy trhely felszabadul. Krds az,
hogy hogyan tudunk ezzel a szabad trhelyekkel gazdlkodni.
I.

folytonos trols esetn:


a) Az egyik megolds, hogy ha felszabadul a trhely, tszervezzk az adatszerkezetet,
azaz a mgtte lv elemeket rcssztatjuk a trlend elemre. Szabad helyek ilyenkor
mindig az adatszerkezet vgn lesznek. Ez igen idignyes, viszont a problmnkat
biztosan megoldja.
b) Hulladkgyjts: (garbage collection) A lyukakat otthagyom, csak logikai trls van,
folyamatosan rok tovbb. Amikor elfogy a rendelkezsre ll trhely, akkor
rendszeres idkznknt szervezi, rendszerezi t a vgre a szabad helyeket, hogy
sszefgg trterletet kapjunk. Sok opercis rendszer van, amely gy kezeli le a
trlst.
c) A trhelyeket nyilvntartjuk egy bitmtrix segtsgvel. A mtrix elemei: 1 (foglalt), 0
(szabad), ez alapjn tudok elemeket elrakni. Nem kell mozgatni az adatelemeket,
viszont kln kell nyilvntartani.

II.

sztszrt brzols esetn:


a) A szabadhelyek ssze vannak lncolva. A szabadhelyek listjrl leveszem az els
elemet, ha j elemet akarok lncolni, s azt fzm az llomnyhoz. Ha trlst vgzek,
akkor az adott elem helyt a szabad elemek lnchoz lncolom. Idben gazdasgos.
Problma: Klnbz mret trhelyeket lncolok, gy olyan algoritmusokat kell
alkalmazni, amelyek ellenrzik, hogy az j elem befr-e a trrszbe (first fit: az els
megfelel trhelyet lefoglalom; best fit: a megfelelek kzl a legkisebbet foglalom
le). Meg kell keresni azt a trhelyet, ahova befr. Ha tl kicsi elemet pakolok bele,
akkor az nem gazdasgos.
b) Szabadhelyek nyilvntartsa: Lsd folyt. Bitmtrix segtsgvel trtnik.
c) Hulladkgyjtsi technika, amelyben lncolom a szabadhelyeket. Ha elfogy a szabad
hely, akkor lncolok.

Absztrakt adatszerkezetek:
Ha az implementcitl eltekintnk, akkor beszlnk absztrakt adatszerkezetekrl. Az
implementci, a reprezentci mindig rendszerfgg, az absztrakt adatszerkezet fggetlen
tle, csak a tulajdonsgai definiljk.

Struktra nlkli adatszerkezetek


Az egyes adatelemek fggetlenek, nincs kzttk kapcsolat. Az elemek kztt nincs
sorrend, mindegy, hogy hol helyezkednek el egymshoz kpest. Meg tudom mondani, hogy az
adatszerkezetnek elemei-e, mg ha megkeverem, akkor is.

HALMAZ (set)
Matematikai halmazfogalom megfeleltetse adatszerkezet szinten.

MULTIHALMAZ (multiset, bag)

Olyan specilis halmaz, amely a halmaztl eltren ismtldst enged meg, teht
lehetnek azonos elemek.
Mindkt adatszerkezet dinamikus s vges. Beszlhetnk reshalmazrl is, viszont
vgtelen halmaz, mint adatszerkezet nem ltezik.
Specilis adatszerkezeti mveletek vannak: (,,,\ | in,+,*,)
,in: Meg lehet llaptani, hogy egy adott elem benne van-e a halmazban, vagy sem.
Eredmnye mindig logikai rtk.
, +: A multihalmazban az uni az sszes elem unijt jelenti, teht ha pl: az egyik
halmazban "a" 5x szerepel, a msik halmazban 3x, akkor unijukban 8x fog. Pl. ha
AB=C , akkor |A|+|B|=|C|.
, *: Ugyanez igaz a metszetkpzsre is, teht az elbb emltett kt halmaz metszetben
"a" 3x fog szerepelni.
A kvetkezkben definilt mveletek multihalmazra is igazak.
Mveletek
Ltrehozs:
Megadhatok egy prediktumot (felttelt). A halmaz elemei azok lesznek, amelyek
igazz teszik a felttelt. pl: X={200-nl nem nagyobb pozitv egsz szmok}
Felsorolhatom a halmaz elemeit, azaz konkrtan megadom ket. pl :
Y={fekete, piros, kk, fehr, srga}
Ltezik reshalmaz, s ehhez unival hozzpakolom az elemeket, s gy jn ltre a
halmaz.
Bvts: Unikpzssel.
Trls: Klnbsgkpzssel.
Csere: Nem ltezik, mert nem tudom megfogni az elemeket. Ha kitrlk egy elemet s jat
viszek be, akkor egy szimullt csert csinltam.
Keress: Nincs, a fenti indok miatt.
Rendezs: Nem rtelmezhet. Rendezett halmaz nem halmaz, hanem egy msik
adatszerkezet. Gyakran nincs is rtelme a rendezsnek.
Bejrs: Nincs, mert nem tudom megfogni az elemeket.
Feldolgozs: A definilt mveletek alkalmazsa.
A halmazok kztt rtelmezhet az sszehasonltsi mvelet. Kt halmaz egyenl, ha
ugyanazokat az elemeket tartalmazza, egybknt nem. Ha az egyik halmaz rszhalmaza a
msiknak, akkor az a kisebb. HK H<K
Halmazok reprezentcija: A karakterisztikus fggvnyen alapul, ltalban folytonos trolst
alkalmaznak. A reprezentcis szinten sorrend van, amikor a halmaz elemeit egy
sorrendisggel rendezett trhelyre kpezzk le. Annyi bitet foglalunk le, amennyi halmazelem
van. A tr vges, a trhely kicsi. Tudom, hogy maximlisan hny eleme van a halmaznak. A
halmaz elemeit sorrendbe rakom. A biteket 1-re lltom, ha az adott elem benne van a
halmazban, 0-ra ha nincs benne. reshalmaznak minden bitje 0. Ha minden elem benne van a
halmazban, akkor minden bit 1-es. Ez a karakterisztikus fggvny.
Pl. S= { hexadecimlis szmjegyek } Karakterisztikus fggvny: 16 bit = 2 bjt. Legyen
S={1,4,8,A}
A felttelezett sorrend: 0,1,...,E,F
Ez az S halmaz reprezentcija. Az
implementci dolga, hogy a halmaz elemei hol vannak, ezt a felhasznlnak nem szabad,
nem illik tudni. Elnye, hogy az sszes halmazmvelet visszavezethet logikai mveletre.
x (H1 H2 ) = x H1 x H2

x (H1 H2 ) = x H1 x H2
x (H1 H2 ) = x H1 x H2
Az eleme mveletet a processzor eltolssal, shift-tel valstja meg. Pl. c S : Ekkor a
processzor 10 bittel elre tolja, s megnzi, hogy 0 vagy 1 szerepel az adott biten. Ez gyorsan
vgrehajthat, de hibja, hogy a karakterisztikus fggvny nagy trhelyet foglalhat el. Ezen
ok miatt az implementcik 100-as nagysgrendnl szabjk meg a halmaz maximlis
elemszmt. Pl: Pascal: 256 db eleme lehet, ami 32 bjtot foglalhat el.

Asszociatv adatszerkezetek
Olyan halmaz, vagy multihalmaz, amelynek az elemeibl rszhalmazokat tudunk
kivlasztani. Lnyeges, hogy a rszhalmazokat milyen szempont szerint vlasztjuk ki. Ezek a
kivlasztott rszhalmazok tfedhetik egymst. A rszhalmazokat meg kell tudni fogni,
klnbztetni egymstl.

1.
2.

A rszhalmazok pontosan egyelemek, gy meg tudom fogni brmelyik elemet. pl:


tmb
A rszhalmazok tetszlegesek, gy tfedhetik egymst.

TMB
A rszhalmazok egyelemek s diszjunktak, s az osztlyozsba minden elem be van
vonva, ezrt minden adatelem megfoghat.
A legismertebb, a leggyakrabban alkalmazott statikus adatszerkezet. A tmb minden
eleme egsz szmok sorozatn keresztl rhet el (ezek az egsz szmok a tmbindexek). Az
indexek alkalmazsa azt teszi lehetv, hogy egyelem rszhalmazokat kpezhetnk.
Ha az adatelemekbl egy adott elem kivlasztst 1 index-szel meg tudom valstani,
akkor egydimenzis tmbrl vagy vektorrl beszlnk. Az indexnek van fels s als hatra,
amelyek az indextartomnyt definiljk. Az index tetszleges egsz szm lehet, ltalban 1-tl
kezddik. A tmbhz hozztartozik, hogy minden dimenziban rgztem az indexek kezd s
vgrtkt, rgztek egy intervallumot, ez meghatrozza az elemek szmt. Az egyes
dimenzikban lv elemek szmnak szorzata adja a tmb elemszmt.
Ha kt index segtsgvel lehet kivlasztani minden elemet, akkor ktdimenzis
tmbrl, mtrixrl beszlnk.

A 3 dimenzis tmb lapokbl ll:

Tetszleges dimenzij tmbkrl beszlhetnk, mint adatszerkezetekrl. A tmb olyan


adatszerkezetnek tekinthet, amelyben az elemek rtkei egymstl fggetlenek, s az elemek

a szerkezetben elfoglalt helyk szerint vannak definilva, gy elhelyezs szerint van


rendezettsg. Az adatszerkezetet rtktl fggetlenl a szerkezet definilja.
Mveletek
Ltrehozs: A szerkezet ltrehozsa, nem az rtkek. Megmondom a dimenzik szmt s
minden dimenziban az indextartomnyt. A szerkezetet hozom ltre, gy mr az elejn eldl,
hogy a tmb hny elemet tartalmaz (mivel statikus a szerkezet). Ebbe a szerkezetbe pakolom
bele az elemek rtkt.
Bvts: Nincs olyan, hogy j helyre j elem bevitele, mivel a tmb statikus, az adatelemeket
ltrehozskor fixltam. Szkebb vltozata az, hogy adatelemet viszek be az res szerkezeti
helyekre. tvitt rtelemben: megadom azoknak az adatelemeknek az rtkt, amelyeket eddig
mg nem adtam meg.
Trls: Errl sem beszlnk, mert az adatelemek szmt nem tudom cskkenteni. Csak
logikai trlsrl beszlnk: az adatelemek rtket egy specilis rtkre lltom.
Csere: Indexek alapjn brmelyik elemet kivlaszthatom s rtkt fellrhatom.
Elrs: kzvetlen. Brmelyik elem a tbbitl fggetlenl megfoghat, az indexekkel
hivatkozom r.
Rendezs: ltalban egydimenzis tmbnl foglalkozunk vele. Arra az sszes rendezsi
mdszer alkalmazhat.
Keress: rtelmezhet mindenfle tmbnl. rtelmezse reprezentci-fgg. Ha a felttelek
adottak, akkor egy dimenzis tmbnl (itt van jelentsge) az sszes keressi algoritmus
alkalmazhat.
Bejrs: rtelmezhet, reprezentci-fgg. Tbbdimenzis tmbknl igazn rdekes.
Feldolgozs: Az indexeken alapul, azon, hogy segtsgkkel brmely elem kzvetlenl
elrhet, feldolgozhat.
Trols: A folyamatos s sztszrt trols egyarnt alkalmazhat a tmbknl. ltalban
folytonos trolst alkalmaznak.
A tmb ekpezse folytonos trszerkezetre
a s ,t

a s ,t 1

a
s ,m

a s 1,t

a s 1,t 1

a n ,t

a n ,t 1

a n ,m

Legyen a ktdimenzis tmb els indexeinek tartomnya s..n s msodik indexeinek


tartomnya t..m. Kpezzk le ezt a ktdimenzis tmbt folytonos trszerkezetre. A lekpezs
sor- vagy oszlopfolytonosan trtnik. Az implementcik nagy rsze a sorfolytonosat
vlasztja. Ez a kvetkezt jelenti:
Sorfolytonosan: as,t ; as,t+1 ; as,t+2 ; ; an,m-1 ; an,m
Oszlopfolytonosan: as,t ; as+1,t ; as+2,t ; ; an-1,m ; an,m
Az els sor elemeit elhelyezem, a 2. sor elemeit utna s gy tovbb. Az oszlopfolytonos
trols ugyanaz, mint a sorfolytonos, csak oszlopokat vesznk sorban. Ha tbb mint kt
dimenzis tmb van, akkor az indexek vgigfutnak az indextartomnyon. Sorfolytonos
trolsnl a legutols index fut a leggyorsabban vgig s az els a leglassabban,
oszlopfolytonosnl ez fordtva van.
A tmb bejrrsa: Attl fgg, hogy oszlop vagy sorfolytonosan van trolva.
Keress a tmbben: Attl fgg, hogy oszlop vagy sorfolytonosan van trolva.

A krds az, hogyha ismerem egy adott tmbelem indexeit, akkor hogyan tudom
meghatrozni a trbeli helyt. Ismerni kell a kezdcmet, egy elem hosszt bjtban s az
indexek als s fels hatrt dimenzinknt. gy az i-edik elem cme egy dimenzis tmbnl:
k+l*(i-s). Kt dimenzis tmbnl ai,j cme: k+l*(i-s)*(m-t+1)+l*(j-t) (ezek a cmfggvnyek).
Minden adatszerkezet (a tbb dimenzis tmb is) szimullhat egy dimenzis tmb
segtsgvel.
Tbb dimenzis tmbk kezelse egy dimenzis tmb segtsgvel
Mtrixok kezelse: Abban az esetben, ha a mtrix hromszg mtrix, azaz a ftl alatt vagy
fltt minden elem 0, a 0 elem trolst meg lehet sprolni. A mtrixot kezeljk vektorknt,
kpezzk le egydimenzis tmbre, ez csak a nem nulla elemeket tartalmazza. Elemi szma:
m=n*(n+1)/2
a11

a12
a22

a1n

a2 n

ann

A mtrix lekpezse a kvetkez mdon trtnik (sorfolytonos lekpezs):

Teht ez egy kt dimenzis tmb lekpezse egy egydimenzis tmbre.


ltalnosan kt dimenzis tmb lekpezse egy dimenzis tmbre
Indirekt indexels: Kt dimenzis tmbnl. Indexhatrok konstansa egy V vektor, melynek
(a1..f1) (a2..f2) elemeinek szma (f1-a1+1) (f2-a2+1).
(f1-a1+1)=m
(f2-a2+1)=n
Hozzuk ltre egy IV indexvektor segtsgvel, melynek elemeinek szma m.
Az IV k-adik eleme: 1+(k-1)*n.

Ez egy sorfolytonos lekpezs, Ai,j=Vt, t=IVi-a1+j-a2

Sokszor kell olyan mtrixot hasznlni, hogy sok elem 0, vagy sok azonos elem van.
Ezeket nevezzk ritka mtrixoknak. A krds az, hogy ezeket hogyan tudjuk kezelni.
A. Hrom soros reprezentci
A hrom egydimenzis tmb azonos elemei rnak le egy-egy elemet sorfolytonos
brzolsban.

C-ben az A mtrix lekpezse hromsoros reprezentcira gy nz ki:


void lekepez( )
{
int i,j
int k=0;
for (i=0;i<m;++i)
for (j=0;j<n;++j)
if (A[i][j]!=0)
{
++k;
SOR[k]=i;
OSZLOP[k]=j;
ERTEK[k]=A[i][j];
}
}

Fordtva, amikor visszakeresnk egy elemet: pl. Ai,j-t


int keres(int i,int j)
{
int l;
for (l=0;l<k;l++)
{
if (SOR[l]==i && OSZLOP[l]==j)
return ERTEK[l];
if (SOR[l]>i) return 0;
}
}

A keress lineris, mert vagy megtalljuk, vagy nagyobbat tallunk s akkor 0 lesz az
rtke. Problma az, hogy nem tudjuk a sor, oszlop, rtk maximlis rtkt. A tmb statikus
adatszerkezet, ezrt tl kell helyetfoglalni, gy marad resen lefoglalt trrsz. Msik
problma, hogy nem lehet kzvetlenl elrni, csinlni kell egy keresst. Ez nem oldhat meg,
viszont az els problma sztszrt trols esetn megoldhat. A tmb statikus voltt
dinamikusra viszem.
Sorok egszben keressre, mtrix szorzsra remek.
2. Ngy soros reprezentci

A mutat vektor dolga, hogy lerendezze az oszlopok kezelst. rtkt gy lltjuk be,
hogy a megfelel helyre berjuk a soros reprezentci azon indext, amelyik megmondja,
hogy mely indexnl tallhat az oszlop kvetkez nem 0 eleme. (pldul: A 2. oszlopban a
kvetkez nem 0 elem a ngyes. A ngyes elemet a sorvektorban a negyedik elem rja le, gy
valban ngy az index. Ugyanez lthat a 6.oszlopnl.) Ennek oszlopfolytonos feldolgozsnl
van jelentsge, lehetv teszi, hogy ne kelljen vgignzni szekvencilisan az egszet, mert
megmondja, hogy hol a kvetkez elem az adott oszlopban. A ngy sorhoz mg kt vektort
hozzveszek, melyeket jelljnk S-el s O-val. A kt vektor gy van megllaptva, hogy a
vektor i-edik eleme megadja, hogy hol helyezkedik el az i-ik sor els nem 0 eleme a SOR
illetve az OSZLOP vektorban, gy kzvetlenl fel tudok dolgozni brmilyen mtrixot.

Az S-bl lthat, hogy a 3.,4. sora csupa 0.


Az S s O vektor egy adott eleme azt mutatja meg, hogy az adott sor, illetve oszlop
kvetkez nem 0 eleme hol helyezkedik el a 4-soros reprezentciban. rtke 0, ha abban az
oszlopban nincs tbb nem 0 elem. Kzvetlenl hozzfrhetek a sorhoz s oszlophoz.
M db oszlopbl ll ritka mtrix oszlopainak feldolgozsa a kvetkezkppen trtnhet:
void bejar( )
{
int i,j;
for (i=1;i<m;i++)
{
j=O[i];
while (j)
{
feldolgoz(SOR,OSZLOP,ERTEK,i,j)
j=MUTATO[j];
}
}
}

Folytonos trols esetn rtuk le. Itt is alkalmazhat a sztszrt trols, lncols. A ritka
mtrix trolshoz egy multilista szerkezetet hasznlhatunk.

BALRA: sorok lncolsa jobbrl balra.


FEL: oszlopok lncolsa lentrl flfel.
Kellenek listafejek, amelyekkel az S,O csinljuk, gy a plda a kvetkezkppen nz ki:

A tmbk igazn nagy jelentsge: egydimenzis tmbk segtsgvel brmely


homogn adatszerkezet szimullhat (akr sajt maga is).
Minden programozsi nyelv ismeri a tmbt. Egydimenzis tmbk segtsgvel a
sztszrt reprezentci is megvalsthat, ld program.

TBLZAT (table)
Asszociatv, dinamikus adatszerkezet, amelyben minden elem kt rszbl ll.

A kulcs s az rtk tpusa brmilyen lehet, de egy tblzaton bell a kulcsok, rtkek
tpusa megegyez kell, hogy legyen. A kulcs s az rtk tpusa klnbz lehet. Minden
tblzati elem kulcsrtke egyediek, gy ez a kivlasztsi szempont. A tblzat nem ms, mint
egydimenzis tmb ltalnostva, ahol brmely elem a kulcson keresztl rhet el. (pl:
statikus helyett dinamikus). Reprezentcija lehet folytonos s sztszrt is (ltalban
folytonos). Gyakran gy troljk, hogy a kulcsot, rtket lekpezik egy-egy egydimenzis
tmbre. Klnbz szervezs tblzatok vannak.
1. Soros A kezels szempontjbl ez a legegyszerbb tblzat. Akkor rdemes soros
tblzatot hasznlni, ha az egyes elemek feldolgozsi valsznsge kzel azonos.
Mveletek
Ltrehozs: Az elemek az rkezs sorrendjben kerlnek a tblzatba.
Bvts: A tblzat vgre lehet.
Trls: Meg lehet oldani logikai trlssel s a szabadhelyek elfogysa utn
szemtgyjtssel, s meg lehet oldani fizikai trlssel is. A fizikai trls az, amikor a
trlend elem mgtt lv elemeket elretolom. A baj csak az, hogy gy sok elemet kellene
mozgatni. Helyette azt alkalmazzk, hogy kitrlik az elemet s a legutols elemet a helyre
rjk. gy csak egy elemet kell mozgatni.
Csere: Minden elem fellrhat. Megkeresem az adott kulcs elemet s fellrom az
rtkt. Soros tblzatnl nem jelent gondot, ha az rtket s a kulcsot is fell akarom rni,
de figyelni kell, hogy a kulcs ne szerepeljen mr elzleg.
Rendezs: Nem rtelmezett.
Keress: Kulcsra vonatkoz teljes keress.
Bejrs: Soros (az elhelyezs sorrendjben)
Feldolgozs: Kulcs alapjn.

A strzsatechnika lnyege: az elemek vgre elhelyezem a keresett elemet, s gy


jutok a vgre. A K-t gy mindig megtallom. Ha a legvgn tallom meg, akkor az azt
jelenti, hogy nincs benne a tblzatban, ha eltte megtallom, akkor benne van. A tblzat
elemeinek a szma ezzel a manipulcival nem vltozott meg, ha jn egy j elem, a szabad
helyre rom, gy trldik a strzsa ( kulcs[n+1] ).
Teljes keress algoritmusa:
int keres(int k)
{
int i;
KULCS[n]=k;
for (i=0;k!=KULCS[i];i++);
if (i>n) { HIBA(Nincs benne); return 1; }
else return i;
}

A K-t gy mindig megtallom. Ha a legvgn tallom meg, akkor azt jelenti, hogy nincs
benne a tblzatban, ha eltte megtallom, akkor benne van. A tblzat elemeinek a szma
ezzel a manipulcival nem vltozott meg.
Beszrs vagy bvts: Bvtsnl azrt kell vigyzni, hogy az j elem kulcsa olyan
legyen, hogy addig mg ne szerepeljen a tblzatban.
void beszur(int k,int x)
{
int i;
KULCS[n]=k;
for (i=0;k!=KULCS[i];i++);
if (i>n) { ERTEK[i]=x; n++; }
else HIBA(Mr van egy ilyen kulcs elem.);
}

Trls: A K kulcs elemet akarjuk trlni. Kitrljk az elemet s berjuk az utols elemet.
void torol(int k)
{
int i;
KULCS[n]=k;
for (i=0;k!=KULCS[i];i++);
if (i>n) { HIBA(Nincs trlend elem.; return; }
KULCS[i]=KULCS[n];
ERTEK[i]=ERTEK[n];
n--;

Soros tblzatok akkor alkalmazhatk jl, ha sok elemet akarunk feldolgozni. Ha


feltesszk, hogy minden elemet ugyanolyan gyakorisggal dolgozunk fel, akkor idelis, de
ez a gyakorlatban persze, hogy nincs gy. Az lenne a j, ha a gyakrabban feldolgozott
elemet gyorsabban elrnnk, vagyis a tblzat elejn lenne. Ezen okok miatt jtt ltre az
ntrendezs tbla.
2. ntrendezs tbla Az egyes elemek feldolgozsi valsznsge klnbz. Azt a
gondolatot valstja meg, hogy a leggyakrabban hasznlt elemek a tbla eljn legyenek. A
megolds nagyon egyszer. Ha egy elemet feldolgozunk, akkor cserljk ki az els
elemmel. Ez a folyamat sok lps utn ahhoz vezet, hogy a legels helyen a
leggyakrabban feldolgozott elem fog llni. Reprezentcijnl sztszrt brzolst
alkalmaznak. Ha a tbla mrete n, vagy csak a tbla elemeinek egy rszt dolgozzuk fel,
akkor a soros tbla lass. (a teljes keress miatt).
3. Rendezett tbla Ez ltalban kulcs alapjn trtn nvekv rendezettsget jelent. A
feldolgozst segti a rendezs. Az elemeket nem azonos gyakorisggal dolgozom fel, s
nem mindegyik elemet.
Mveletek
Ltrehozs: Beszrsos rendezssel trtnik.
Bvts: Beszrsos rendezssel trtnik.
Trls: Meg lehet oldani logikai trlssel, s a szabadhelyek elfogysa utn
szemtgyjtssel, s meg lehet oldani fizikai trlssel is. A fizikai trls folyamatos
trolsnl az, amikor a trlend elem mgtt lv elemeket elretolom. Sztszrt
brzolsnl igen egyszeren megoldhat.
Csere: Megkeresem s fellrom az adott elemet. A kulcs alapjn cserlem az rtkrszt, a
kulcs cserje nem engedlyezett. Ha azt is meg akarom cserlni, akkor fizikai trlst s
bvitst kell alkalmazni.
Rendezs: Nincs, mert rendezetten jn ltre.
Keress: Mindkt reprezentcinl alkalmazhat a lineris keress, folytonosnl a binris
keress is.
Bejrs: Szekvencilis, logikai sorrend szerint.
Feldolgozs: Kulcs alapjn.
A karbantartsi mveletek folyamatos brzolsnl lassabbak, mg a feldolgozs
gyorsabb folyamatos brzolsnl a binri keress miatt. Sztszrt brzolsnl a karbantarts
(bvts, trls) kellemes, de a feldolgozs nygs.
Binris keress folyamatos brzolsnl:
int keres(int k)
{
int min=0;
int max=m-1;
int i=(min+max)/2;
while (max>=min && k!=KULCS[i])
{
if (k<KULCS[i]) max=i-1;
else min=i+1;
i= (min+max)/2;
}
if (k==KULCS[i] return i;

return 1;
}

Az algoritmus felttelezi, hogy ltezik legalbb egynl nagyobb n db elem. A


fordtprogramok tbb tblzatot hasznlnak. A memria vges, n vges. A soros tblban az
elemek elhelyezkedst az id szabja meg, ntrendeznl a hivatkozsi priorits,
rendezettnl a kulcs rtke. A kulcs tetszleges lehet. A tblzatok kzvetlen elrst nem
tesznek lehetv, hanem keresst kell alkalmazni. Ha kzvetlen elrst akarunk kszteni az
azt jelenti, hogy a kulcsbl meg tudjuk mondani az rtk cmt.
1. Kulcstranszformcis tblzatok Mindig folytonos trmegjelense van. Kulcs: k; f(k) egy

fggvny, amelyik a k-t lekpezi a cmre (minden kulcshoz hozzrendel egy cmet
meghatrozza az elemek helyt a tblban). Ez a hash fggvny, a technika pedig a
hashing. (randomizls). Az lenne j, ha a fggvny klcsnsen egyrtelm lenne, de ez
a gyakorlatban ritka mint a feht holl. ltalban a fggvnyek egyrtelmek, ami azt
jelenti, hogy klnbz kulcsokhoz ugyanazt a cmet rendelik hozz. Azon kulcsokat,
amelyekhez ugyanazt a cmet rendeli, szinonmknak (tlcsordulsnak) nevezzk.
A kulcsoknak tpusa van, gy ltezik a kulcsoknak egy elvi darabszma, amit a kulcs
tpusa megszab. A gyakorlatban ltalban az elvi lehetsgek tredkt hasznljuk fel. Ha
az elvi s a gyakorlati lehetsgek szma megegyezik, vagy a gyakorlati lehetsgek
szma egyenletesen oszlik meg az elvi lehetsgeken bell, akkor klcsnsen egyrtelm
lekpezst alkalmazhatunk. Ez a ritkbb, ltalban az elvi lehetsgek szma
nagysgrendekkel nagyobb, mint a gyakorlati lehetsgek szma, s az elhelyezs sem
egyenletes. (pl: a telefonszmok hatjegyek. Egy krzetben 1000000 lehet a
telefonszmok szma, de ebbl lehet vagy 10000 tnylegesen. Ezen bell hozz kell
szmtani, hogy az elhelyezs sem egyenletes.) Ilyenkor egyrtelm hash fggvnyt
alkalmazunk. Egy hash fv-tl elvrjuk, hogy:
1. A kulcsokat be kell transzformlnia egy sorszmintervallumba, pontosan oda,
ahova trat lefoglalok. Ez egy 0-n intervallum.
2. A kulcsokat lehetleg egyenletesen szrja szt, ne legyen sok szinonma. A kulcs
lehet numerikus vagy szveges. Ha szveges, akkor az els lpsben
hozzrendelnk numerikus rtket, pl: a karakterek bels kdjt. Ha
megvlasztottuk a kulcs tpust, az elvi lehetsgek szma eldl. A tovbbiakban
csak numerikus kulcsokkal foglalkozunk.
A valsgban:
1. Minden kulcs el is fordul (vagy majdnem mind)
2. Nagysgrendi klnbsg van az elvi lehetsgek s a tnylegesen elfordul
alkalmazott kulcsok kztt. De a gyakorlatban elfordul kulcsok valamilyen
szably szerint helyezkednek el az elvi lehetsgeken bell.
3. Nagysgrendi klnbsg s a gyakorlatban szablyszertlensg.
1., 2.: Klcsnsen egyrtelm hash fggvnyt alkamazunk. Az elvi lehetsgeket
megsorszmozom.
3. Tudnk klcsnsen egyrtelm fggvnyt hozzrendelni, de a trhely res lenne a
nagysgrendi klnbsg miatt, s vges a trolsi kapacits. Annyi helyet kell lefoglalnom,
ahny kulcs a gyakorlatban elfordul (becslni), aztn biztostani, hogy brmilyen elvi
kulcst le tujunk kpezni erre a kisebb terletre (ms-ms kulcshoz ugyanazt a trhelyet
rendeli hozz) ld. vidki telefonszmok 6 jegy.
Az elviekben elfordul brmely kulcshoz egy (0..m) kz es szmot rendelek. Ebbe a
0..m tartomnyba viszonylag egyenletesen kpezze le, szrja szt.

Brmely hash fggvny produkl szinonmkat, nincs univerzlis hash fggvny. A


tovbbiakban konkrt kulcstranszformcis mdszereket fogunk megnzni.
1. Prmszmmal val oszts
Legyen egy adott kulcs az: 1 2 3 9 9 9 9 1 7. Ez azt jelenti, hogy az elvi intervallum a 0999999999-ig terjedhet. Tegyk fel, hogy a gyakorlatban 100000 lehetsg van. Ez azt jelenti
hogy:
(m: a gyakorlatban elfordul kulcsok szma.) gy
az intervallum : 0 - m. Vlasszuk az m-nl kisebb legnagyobb prmszmot. Jelljk p-vel. A
transzformcinl a tnyleges kulcsot osszuk el p-vel s sorszmnak tekintsk a maradkot.
gy 0(p-1) intervallumot kapjuk. Ez a mdszer jl vletlenszerst, kevs a szinonma.

2. A szorzs mdszere
Kpezznk le a 0 - m tartomnyra. Legyen a szmjegyek db szma k, azaz a pl: 0 99999 esetn k=5. A transzformci az, hogy vegyk az eredeti kulcsot s szorozzuk meg egy
tetszleges prmszmmal, vagy nmagval, vagy osszuk kett s a kt felet szorozzuk ssze.
Az n db szorzatnak veszem a k db jegyt s ezt tekintem sorszmnak. Ez a transzformci jl
vletlenszerst, kevs szinonmt produkl.
3. Helyirtk kivlaszts mdszere
A legegyszerbb mdszer, de nem jl vletlenszerst. sok a szinonma. Az eljrs
lnyege, hogy a kiindulsi kulcsbl vletlenszeren kivlasztok k db szmjegyet.
1 (2) (3) 9 (9) 9 (9) (1) 7
4. Hajtogats
Legyen az eredeti kulcs: 5 4 3 2 1 5 4 3 2 1 6 1 s ebbl maximum 4-jegy sorszmot
akarok kpezni. (k=4) A kulcsot flosztom k elem csoportra s ha kell az elejre vagy a
vgre 0-t rok. Ezutn a csoportokat a kzps csoport al hajtogatom, s sszeadom. A
kapott sszegbl az utols k db szmjegyt veszem, az lesz a sorszm. Ezt a mdszert
szveges kulcsok esetben alkalmazzk.
1543
2345
1612
5500
5. Eltols
Ugyanaz, mint a hajtogats, csak a csoportokat eltolva rom egyms al.
1543
5432
2161
9136
6. Bzistranszformci mdszere
Legyen az eredeti kulcs a 7 6 1 3 4 5 0 . Vlasszunk egy 10-nl nagyobb prmszmot,
pl: 13. Ezt jelljk p-vel. Tegyk fel, hogy az adott szm a p szmrendszerben van flrva.
Ezutn konvertljuk t p-bl a 10-es szmrendszerbe.
7*136+6*135+1*134+3*133+4*132+5*131+0 = 36051314.

A kapott eredmnybl az utols k jegyet vesszk s az lesz a sorszm. (51314) Ez egy


igen kzkedvelt mdszer.
Adatbziskezelknl beptett hash fggvnyek lteznek.
Hogyan kezeljk a szinonmkat ?

1. Nylt cmzs mdszere


gy kezeli a tlcsordult elemeket, mint a nem tlcsordultakat. Ha olyan elem rkezik,
amelyiknek a helye mr foglalt, akkor a tlcsordult elemet megprblja a tblzat utna
kvetkez els res helyre bepakolni. Fontos, hogy a tblzatban helyezi el az elemeket.
Azon a helyen, ahova a lekpezs trtnt, nincs informci arrl, hogy volt-e ott tlcsordult
elem s ha volt, akkor az hova lett elhelyezve. Az els res helyet ltalban egyesvel
lpkedve keressk, de haladhatunk mskppen is.
Pl. j:=-m Az i az a hely, ahol tlcsordult az elem.
j:=j+2
((i-1+|j|) mod m)+1
Ha a tblban vgig nincs res hely, akkor megyek a tbla elejre. Vagy tallok res
helyet, vagy sem. (ksbb ltni fogjuk, hogy mindig tallok, de most felttelezhetjk, hogy
ltezik olyan eset is, amikor nincs res hely.) Ha nincs res hely, akkor visszatrek arra a
helyre, amelyrl elindultam. ltalban a nylt cmzs felttelezi, hogy ltezik res hely. Egy
adott elem megtallsa gy trtnik, hogy kulcs alapjn lekpezem, s ha az adott helyen nem
az az elem van, akkor tlcsordulst felttelezhetek, gy teljes keresst alkalmazok. A keresst
meglltja, ha megtalltam az elemet, vagy ha res helyet talltam.
Egyik hibja ennek a mdszernek, hogy tlcsordult elemek kiszorthatnak ms
elemeket, amelyek nem lennnek tlcsordultak. A tlcsordult elemeknek nincs kzvetlen
elrse. Szoks az is, hogy a tlcsordult elemeket flrerakjk, elsnek bepakoljk a nem
tlcsordultakat, s csak 2. lpsknt rakjk be a flrerakott elemeket. Nylt cmzsnl fizikai
trlst nem tudunk realizlni, mert az jonnan keletkezett res hely meglltan a keresst,
ezrt logikai trlst alkalmazunk. gy minden elemenek 3 llapota lehet:
res
logikailag trlt (a tblzatban van, nem l)
rvnyes (a tblzatban van, l)
Az j elemet a logikailag trlt s az res elem helyre is rhatom. Fizikai trls a
tblzat jraszervezsvel trtnik (jonnan ltrehozom).
Tudunk-e arrl valamit mondani, hogy egy tlcsordult tblaelem viszonylag knnyen
kap res helyet? Klnben romlik a hatkonysg a teljes keress miatt.

A megolds az, hogy tbb trolhelyet foglalok le, mint amennyire szksg lenne, marad
majd res hely a vgn.
2. Lncols

Informcit helyez el a tlcsorduls helyn arrl, hogy hol van a tlcsordult tblaelem.
A KULCS, RTK mez mell egy harmadik kapcsoldik: a MUTAT mez.
Ha az adott helyen nincs tlcsorduls: null. Ha van, berjuk, hogy hol van a tlcsordult
tblaelem.
Kikszbli a teljes keresst, nem kell az sszes elemet rinteni.
3. Tlcsordulsi listt alkalmaznak
A tlcsordult elemeket nem ugyanott helyezzk el, mint a nem tlcsordult elemeket.

A MUTAT listafej szerepet jtszik, az egy adott helyrl tlcsordult elemek ssze
vannak fzve egy egyirnyban lncolt listba. A tblaelemeket sajt jogon kzvetlenl elrem.
Egyszerbb a karbantarts, a karbantartani a legbonyolultabb, n. listallomnyt kell kezelni.
Kulcstranszformcis tblk kezelse
Ltrehozs: Meg kell becslni, hogy a gyakorlatban tnylegesen hny kulcs fog elfordulni
(m). Ezt kveten le kell foglalnom legalbb m trhelyet, de ltalban 1.2*m trhelyet
biztostanak, azrt hogy az (1.) s (2.) tlcsordulsi technika alkalmazsakor biztosan legyen
res hely. Kivlasztok valamilyen hash fggvnyt s valamilyen szinonma kezelsi technikt.
Ezutn bepakolom az elemeket. Ltrehozs utn lteznek res helyek s l elemek.
Bvts: A ltrehozs technikjval kerlnek be a tblzatba az j elemek.
Trls: Nylt cmzsnl csak logikai, msik kettnl fizikai trls is.
Csere: Kulcs alapjn keresem, az rtkrszt fellrom.
Rendezs: Nincs.
Keress: Nincs. Kulcs alapjn tudom az elemeket feldolgozni, mert nincs fizikai sorrend.
Logikai sorrend sincs. A keressnek nincs alapja, csak kulcs alapjn.
Bejrs: Nincs.
Elrs: Az esetek tbbsgben kzvetlen.
Feldolgozs: Kulcs alapjn.

A kulcstranszformcis tblk elnysek, ha viszonylag nagymretek, s viszonylag


statikusak, azaz kevs a karbantartsi mvelet. A tblzat kevsb rzkeny r, hogy egy vagy
tbb elemet dolgozok fel. A legjobb taln az a technika, amikor a tblzaton bell lncolok.
Htrnya: nincs rendezettsg, a feldolgozs s a karbantarts lass. Dinamikus tblknl
jelentkezik ez a lasssg a legjobban, hiszen ott igen sok a karbantartsi mvelet.

Szekvencilis (lineris) adatszerkezetek


Jellemzi: Az adatszerkezet elemei mindig kt msik elemmel vannak kzvetlen
kapcsolatban, kivve a kt szls elemet.

LISTA (list)
Olyan dinamikus adatszerkezet, amelyiknek ltezik els s utols eleme (kivtel az res
lista) s minden adatelemnek ltezik rkvetkezje (kivtel az utols elem), tovbb minden
elemnek ltezik megelzje (kivtel az els elem). A lista elemeinek rendezettsge van,
amelyet az elhelyezs biztost. Jellse: q=[x1,x2, ... x]
Specilis listafogalmak, ill. mveletek
res lista: empty [ ]
A lista feje: (head) Az els elem.
A lista farka: (tail) Lista, amely az els elem elhagysval keletkezik.
A lista vge: (end) Az utols elem.
A lista mrete: A lista elemeinek a szma. |q|=n.
A lista alapmveletei: (Lista alatt a q=[x1,x2, ... xn] t rtjk.)
Hozzfrs: (access) A lista elemei egyrtelm sorrendben vannak felfzve. Megfogjuk
valamely elemt. A listbl az i-dik elem kivlasztsa. q(i) xi Ha i nem eleme a [1..n]
nek, vagyis i<1 vagy i>n, akkor a hozzfrs eredmnye [], res lista.
Allista kpzs mvelete: (sublist) q[i..j] [xi,xi+1, ... xj] A listbl tetszleges rszt
vlaszthatunk ki gy, hogy megadjuk a kezd- s a vgelemet (i<j). Ha i<1, vagy
hinyzik, akkor az allista a lista elejtl indul. Ha j hinyzik vagy j>n, akkor az allista a
lista vgig megy.
Konkatenaci: (concetenation) Egyests. Adva van kt lista: q=[x1,x2, ... xn] s
r=[y1,y2, ...,ym] . Ekkor q&r=[x1,x2, ... xn,y1,y2, ...,ym].
A szoksos adatszerkezeti mveletek ezen alapmveletek segtsgvel rtelmezhetek.
Ltrehozs: reslistbl indulva konkatencival rendeljk hozz az elemeket mint
egyelem listkat. A hozzfzs sorrendje adja a sorrendet a listban.
Bvts: A q listt a k-ik elem utn bviteni akarjuk az x elemmel.
q'=q[...k]&[x]&q[k+1...]
Allistval is bvthetek, ugyangy, ahogy egy elemmel.
Trls: Fizikai trls. A k-ik elem trlse: q'=q[...k-1]&q[k+1...]
Csere: A k-ik elemet cserlem x-re. q'=q[...k-1]&[x]&q[k+1...].

Rendezs: rtelmezhet abban az rtelemben, hogy az adatelemek rtke szerint nvekv


vagy cskken sorrendbe rendezem a sajt helyn, brmely mdszerrel, vagy ltrehozskor
rendezett listt hozok ltre.
Keress: Teljes keress, vagy rendezett listnl lineris vagy binris.
Elrs: Soros, szekvencilis, kzvetlen.
Feldolgozs: A definilt mveletek alapjn. Lnyegesek azon mveletek formi, amelyek a
lista elejt, vagy vgt rintik.
Hat szlssges esetet klnbztetnk meg (szls elemek kezelse):
1)
Acces head: Hozzfrs a legels elemhez. q(1).
2)
Push: Egy elemmel bvitem a listt az elejn. [x]&q
3)
Pop: Trlm az els elemet q[2...]
4)
Access end: q(|q|) Hozzfrs az utols elemhez.
5)
Inject: q&[x] A listt a vgn bvitem.
6)
Eject: q[...|q|-1] Trlm az utols elemet.
A lista reprezentcija mind a ktfle mdon trtnhet. Folytonos brzolst vektorral, a
sztszrtat pedig egy ktirnyba lncolt listval oldjk meg.
Verem (stack)
A verem a leggyakrabban alkalmazott adatszerkezet a tmb utn. A verem egy olyan
specilis lista, ahol az elbb definilt mveletek kzl az 1-3 van megengedve. Olyan
adatszerkezet, amelyet a kezelsi mdjval definilunk. A mveletek neve is hasonl:
PUSH ( bvts az elejn)
POP (els elem trlse)
ACCESS helyett TOP van (els elem elrse). Vannak olyan felfogsok, amelyek a Popba belertik a Top-ot.

Azonos mret elemeket pakolunk bele (homogn). Az els eleme az aljra kerl, erre a
tbbi. Az utoljra betett elemhez tudok hozzfrni.Az alatta lvkhz csak gy frhetek
hozz, ha a felsket eltvoltottuk.
A reprezentcija lehet:
Folytonos A vermet vektorral kezeljk, ahol az els elem mindig a verem alja. Kell
hasznlni egy mutatt, ami a verem tetejt mutatja.

Bvteni, j elemet bevinni csak a verem tetejre lehet, ha van hely. Hozzfrni csak
a tetejhez lehet. Ha egy bels elemet akarunk, akkor trlni kell.

Sztszrt: egyirnyban lncolt lista. A listafej mindig az aktulis els elemre mutat. Ide
kell beszrni adatfelvtelnl.
reslista, resverem: a fej NIL.

A verem minden komoly szoftverben megjelenik. ltalban olyan szituciban


alkalmazzk, amikor egy sorrend megfordtsa a cl.

Rekurzv algoritmusoknl is alkalmazzk.


Mveletek
Ltrehozs: Van az resverem s az rkezs sorrendjbe pakoljuk bele az elemeket.
Bvts: Push mvelet, definci szerint csak a tetejn.
Trls: Pop mvelet, definici szerint csak a tetejn.
Definici szerinti keress, rendezs, csere, bejrs nincs.
Elrs: Top, a legfels elem elrhet.
Feldolgozs: Alapmveletekkel.
Sor (queue)
FIFO (First in, first out) adatszerkezet. A sor egy specilis lista, ahol az 1-3-5. mvelet
van csak rtelmezve. A sor teht olyan adatszerkezet, amelyet kezelsvel definilunk. Vannak
specilis elnevezsek:
Inject helyett PUT.
POP helyett GET. (Felfogs krdse, hogy a GET-be beletartozik-e az 1-es)
Ltezik res sor. j elemet a sor vgre lehet bevinni, hozzfrni a sor elejhez lehet.
Ltezik a tele sor.
Reprezentcija
Mindkt mdszer megfelel. Folytonos brzolsnl vektorral kpezzk le a sort,
sztszrtnl egyirnyban lncolt listt alkalmaznak. A folytonos brzols megoldsai:
1. Fix kezdet sor A sor els elemnek indexe 1, teht rgztett, rtke x. Egy indexmutat
van, ami a sor vgt jelli. Ltezik res sor s tele sor. Bvtek a vgn, az 1-es index
elemhez frhetek hozz. A tbbi elemhez val hozzfrs azt jelenti, hogy az eltte lv
elemeket fizikailag trlm.
2. Vndorl sor Kt indexmutat van, eleje s vge. Bvteni az utols utn lehet,
hozzfrni az E-hez lehet. Ha mgtte lv elemet akarok elrni, akkor az E-t trlm. Ha
a rendelkezsre ll trhely vgre rtem, visszatoldik az egsz vektor az elejre.

3. Ciklikus sor Kt indexe van. Nincs nagytmeg adatmozgats, a sor ciklikusan vndorol
krbe. Ha a vektor utols eleme mr foglalt, nem tolom vissza az egszet, hanem a vektor
elejn folytatom az j elem bevitelt.

A sort olyan szituciban hasznljuk, ha az adatokat idrendben val berkezs szerint


akarjuk meghatrozott sorrendben feldolgozni. A sor szerepe kevsb fontos mint a verem.
Brmilyen adatszerkezet bejrsa nem ms, mint egy sorra val lekpezse. A sor jelenik meg
a puffernl. Ilyen a billentyzet puffer.

Mveletek
Ltrehozs: Kiindulunk az ressorbl s az elemek a berkezs sorrendjben bekerlnek.
Bvts: A vgn.
Trls: Csak az elejn
Csere, rendezs, elrs, bejrs: nincs rtelmezve.
Feldolgozs: Az 1-3-5 mveletek alapjn.
Ciklikus sor egy implementcija: Egydimenzis tmbbel valstjuk meg. Kezeljk a
szlssges eseteket. bra lsd fent.
SOR[1..n], E, V: indexmutatk
res sor: E=V=0
Sor tele: (E=1 vagy V=N) vagy (E=V+1)
PUT mvelet (bvts): Az x elem bevitele.
void put (int x)
{
if (v%n +1 == e) HIBA(A sor tele van.);
else
{
v= v%n +1;
SOR[v]=x;
if (e==-1) e=0;
}
}

GET mvelet:
int get( )
{
int a;
if (e==-1) { HIBA(A sor res.); return 1; }
a = SOR[e];
if (e==v) e=v=-1;
else e= e%n +1 ;
return a;
}

Vannak specilisan kezelhet sorok is.


1. Ktvg sor, ketts sor (dequeue)
Specilis lista, amelynl mind a hat mvelet rtelmezve van. Mind a kt vgn lehet
bvteni s mind a kt vgn lv elemekhez hozz lehet frni. A ktvg sor tekinthet
gy, mint kt darab aljnl illeszked verem. gy a verem s a sor ltal megoldhat
problmk megoldsra egyarnt alkalmas. Vannak specilis esetei:
2. Input korltozott kettssor Nincs rtelmezve r a 2-es mvelet (RPUT), azaz nem lehet az
elejn bvteni, csak a vgn. Elvinni elemet az elejn s a vgn egyarnt lehet.
3. Output korltozott ketts sor Nincs rtelmezve r az RGET, hozzfrni csak az els
elemhez lehet, bvteni viszont mindkettt lehet.
Reprezentcira, implementcira nzve tvihetek az elzek. Memriakezelsi

gondok megoldsnl szoktk alkalmazni, dinamikusan.


Sztring (string)
A sztring olyan lista, amelynek elemeit az abc szimblumok alkotjk. Mi olyan
sztringekkel foglalkozunk, amelyeknek elemei karakterek. Sok terlet van, ami a sztringekkel
foglalkozik:
Formlis nyelvek
Formlis rendszer: ennl a kettnl a sztring jelentse a lnyeges.
Automatk
Szvegszerkesztk: A sztring formja a lnyeges.
Hipertext rendszerek: A sztringben elfordul szavakat vissza-, ill. kikereshetjk.
Magasszint nyelvek
A sztringnl van elrs, minden karakterhez hozz tudunk frni.
Allista: rsz sztring
Konkatenci (egyests): A sztringek sszefzse.
Length: A sztring hossza, a sztring karaktereinek a szma.
Lnyeges az ressztring kiemelked szerepe.
Mveletek
Ltrehozs: Megadom a sztring sszes karaktert.
Bvts: Brhol a sztringben rszsztringgel bvthetek, a listnl megbeszlt konkatenci
mvelettel.
Trls: Fizikai trls, rszsztring trlse.
Csere: sztring rszsztringjt cserlem egy msik rszsztringre, azonosra, rvidebbre vagy
hosszabbra.
Rendezs, elrs, bejrs: nem rtelmezett.
Elrs: kzvetlen.
Keress: rtelmezett, de rszsztringet keresek.
Feldolgozs: ksbb ltjuk.
Reprezentci: Mindkett megjelenik.
Sztringek brzolsa
A. Folyamatos brzols Ahny karakter, annyi bjt, bels kd alapjn. Egy sztring esetn
trivilis. A krds tbb sztring trolsnl a lnyeges:
1.
Fix hosszon trolunk. Kezelse igen knyelmes. Akkora terlet kell hogy legyen a fix
hossz, hogy a leghosszabb sztring is elfrjen. Ez azt jelenti, hogy a tbbi sztringet ki
kell egszteni szkzkkel. Ez nagyon nagy helyett foglal el, s kihasznlatlan
trterletek maradnak.
2.

Vltoz hosszsgon trolok. Minden sztringnek annyi bjtot foglalok le, amennyi
bjtbl ll, csak a szksges helyet foglalom le. Problma, hogy nem tudom, melyik
meddig tart.
Jellni kell, hogy hol kezddnek az egyes sztringek, gy a sztring eltt letrolom
a hosszt. Kezelse sokkal nygsebb mint az elz, mert tudnom kell, hogy hol
vannak a sztring hosszjelzk, s meg kell tudnom klnbztetni a tnyleges
karakterektl. A Pascal ezt vallja.

Egy vtozata, amikor a sztring hosszt nem eltte trolom, hanem a


folyamatosan egymsutn rt sztringrl ltrehozok egy informcis tblzatot, amely
megmondja, hogy az egyes sztringek hol kezddnek.

Egy msik vltozata az, amikor vgjelt alkalmazok. Egy sztring vgjeltl
vgjelig tart. Egy-egy sztringbeli elem jelzi a sztring vgt.
Mindegyik megvalstst alkalmazzk. (Pascal: Text)
B. Sztszrt brzols
1. Minden lncoltlista elem egy-egy karaktert tartalmaz: A sok mutat miatt ez igen
nagy helyet foglalna el, ezrt ez csak egy elmleti megolds, a gyakorlatban nem
alkalmazzk.

2.

Az elz helyett azt alkalmazzk, amikor karakter helyett rszsztringet


brzolnak. Itt problma a trdels, mi van, ha n-nel nem oszthat hosszsg a
sztring (trt)

Pattern matching (minta illeszts)


Van egy sztringem s ebben keresem, hogy egy adott msik sztring elfordul-e benne,
s ha igen, akkor hol. Sok helyen elfordulhat. Ennek jelentsge pldul a
kpfeldolgozsban s szvegben val keress s csere esetn van.
Legyen az alapsztring: a[1..N] , a keresend sztring p[1..M]. Vegyk pldul:
a = 100111010010100010100111000111
p = 10100111
Az illesztsi algoritmusok
1. Veszk a mintt s lpsenknt vgigmegynk rajta:
int Mintaill1(char A[],char P[])
{
int i=0,j=0;
while (j<m && i<n)
{
if (A[i]==P[j])
{ i++; j++; }
else
{ i-= j+2; j=1; }
}
if (j>=m) return i-m;
else return i;
}

A fggvny azzal az indexszel tr vissza, amely karaktertl kezdve a mintasztring


elfordul elszr az alapsztringben, vagy (n+1)-el, ha nem fordul el. Az i megy vgig
az alapsztring karakterein, a j megy vgig a mintasztring karakterein. Amikor nincs
egyezs i-t a kvetkez karakterre lltom, j-t pedig 1-re. Ha megtallok egy mintt,
akkor tovbbi elfordulsokat kereshetek. A keress teht a kvetkezkppen megy:

A fggvny 17-el jn vissza. Ez egy lass algoritmus, az sszes lehetsges esetet


vgigvizsglja.
2. Knuth-Morris-Pratt mintaillesztsi algoritmus
Legyen az alapminta egy rszlete az a i-j+1...ai-1 ai olyan, hogy az ai kivtelvel,
minden elem megegyezik a mintaelem els (j-1) elemvel. Legyen a mintaelem jellse:
p1...pj-1 pj. Az illeszts sorn gy ha tovbb keresnk, vissza kell menni az alapsztringbl
lv rsz elejre. Az alapsztring rszletnek elejrl tudunk informcit, azaz ismerjk,
hogy az nem ms, mint a minta eleje. Az ismeretemet teht gy kell felhasznlni, hogy
ezeket az elemeket ne vizsgljam jra vgig. Ehhez a kvetkezt kell csinlni: Vegyk a
mintt, ami legyen neknk most p1...pM, s nzzk meg sajt maghoz val illesztst,
azaz megnzzk, hogy van-e a mintban olyan karaktersorozat, amely megegyezik a
minta elejvel. Ezt troljuk le s gy elrhetjk, hogy nem kell egyesvel
vgiglpkednem a mintn. A letrolst egy KOV[0..M+1] (m+2) elem vektorban
vgezzk, amelyet gy kell feltlteni, hogy KOV[j]=k, ekkor a minta els (j-1)
karaktertl az utols (k-1) karakter megegyezik a minta els (k-1) karaktervel. gy a
kvetkez keressnl nem lpek teljesen elre, gy lnyegesebben kevesebb lpssel
dolgozom. Els lpsknt tltsk fel a vektort:
void initkov()
{
int i=1;
int j=0;
KOV[1]=0; KOV[0]=0;
while (j!=KOV[j]) do
{
if (j==0 || p[i]==p[j]) { i++; j++; KOV[i]=j; }
else j=KOV[j];
}
}

Az algoritmus mkdse a pldn:

Ez egy nem binris algoritmus. Lpsrl lpsre sszehasonltom s eltolom a


mintasztringet.
p[3]=p[1]
p[5]<>p[3]
Az 5. karaktertertl vizsglom nincs egyezs. Az eredmny:
KOV=(0011231222) Ez a kvetkezt jelenti: a 3-nl kt karakter egyezik meg, a 2-nl
egy karakter egyezik meg a mintasztring elejvel. A fggvnynk:
int KMPill( )
{
int i=1;
int j=1;
initkov( );
while (j<=M && i<=N) do
{
if (j==0 || a[i]==p[j]) { i++; j++; }
else j=KOV[j];
}
if (j>M) return i-M;
return i;
}

Az algoritmus mkdse:

100111010010100010100111000111
10100111
10100111
10100111
Az els algoritmus lpsszzma kb: N*M. A 2. algoritmus lpsszma N+M.
ltalnostani lehet gy, hogy az sszes elfordulst keressem. Nem jelent alapvet
problmt az, hogy a sztring egy tmbben van. Az algoritmus gy is mkdik, ha a
szveget a perifrirl olvasom be. A mintaszveg ltalban kicsi, gy knyen
kezelhet.
3. Dmlki Blint fle algoritmus
Ez nem sztringkezel algoritmusnak szletett meg, hanem az automata elmleti
algoritmusnak. ( A 60-as vekben szletett). Hatkonyabb algoritmus, mint az elzek,
s knnyebben programozhat. Dmlki Magyarorszgon dolgozott, gy br ez az
algoritmus knnyebben kezelhet, mgsem tudott gy elterjedni, mint a nyugaton
fejlesztettek. Dmlki vezetsvel rtak fordtprogramot az MProlg-hoz. A magyar
szmtstechnika trtnetben szinte egyedlllan, Dmlki llami djat kapott.

Az algoritmus
Legyen a kt sztring: a: ABAFBADC
p: BAD
Els lpsben hozzunk ltre egy logikai mtrixot, B-t. A B sorait cimkzzk, vagy
azonostsuk azokkal a karakterekkel, amelyek elfordulhatnak a kt sztringben.

Oszlopai a minta szerinti karakterek. Bi,j=1, ha az adott karakter az adott helyen


elfordul, egybknt 0. Az algoritmus hasznl 3 db M elem logikai vektort: Q, U, V ,
amelyek indul rtkei a kvetkezk: Q=(00...0) U=(10...0) V=(00...1) Az algoritmus
hasznl egy vermet, ami a mintaillesztshez nem felttlenl szksges. Mi a pldnkban
alkalmazni fogjuk. Jelljk a vermet S-el. Az alapsztring karaktereit egyenknt
dolgozom fel. Elhelyezem ket a veremben, mikzben vizsglom, hogy van-e egyezs
az alap sztring s a minta sztring elemei kztt. A Q vektor az illeszts
adminisztrlsra szolgl gy, hogy Ql:=1, ha a verem tetejn lv l db karakter
megegyezik a minta els l db karaktervel. Nylvn, ha QM=1, akkor a verem tetejn
megvan a minta. Az alap sztring minden egyes karaktere kivlaszt a B-bl egy sort, ami
legyen Bi. rtelmezve van egy olyan mvelet, amely R:(a 1..aM)(0,a1..aM-1) , azaz nem
csinl mst, mint jobbra shift-tel eggyel. Veszem az alapsztring karaktereit, pakolom a
verembe, kzben Q rtke a kvetkez lesz:
Minden lps utn vizsglom, hogy
, ha igen, akkor a minta a verem tetejn van. Plda:

Ha Q rtke (100), akkor az azt jelenti, hogy a verem tetejn lv karakter


megegyezik a minta els karaktervel. A verembe a kv. elemet rakjuk, s kzben Q-t
szmoljuk gy, hogy Q=(000)v(100)&(010)=(000). Q=(000)v(100)&(100)=(100). Ha
Q=(001), akkor a verem tetejn ott a minta. Ez nem implementci, hanem algoritmus.
Gpi kdban knny implementlni. Ez az algoritmus hossz sztringeknl is kitnen
mkdik. Egyik elnye az, hogy mg a tbbinl ha tbb mintt akarok keresni,
annyiszor vgig kell menni az alapsztringen, mg itt egyszerre akrhny mintt
illeszthetnk.

HIERARCHIKUS ADATSZERKEZETEK
Olyan adatszerkezetek, amelyek valamilyen rtelemben a lista ltalnostsainak
tekinthetek. A hierarchikus szerkezeteben egy elemnek akrhny rkvetkezje lehet, de
minden elemnek csak egyetlen megelzje van. Van egy kitntetett eleme, amelynek nincs
megelzje, s tbb olyan eleme, amelynek nincs rkvetkezje.

FA (tree)
Dinamikus, homogn adatszerkezet, amelyben minden elem megmondja a
rkvetkezjt.
Alapfogalmak:
Gykrelem: A fa azon eleme, amelynek nincs megelzje. A legegyszerbb fa egyetlen
gykrbl ll. Mindig csak egy gykrelem van, res fban egy sem.
Levlelem: A fa azon elemei, amelyeknek nincs rkvetkezjk. Brmennyi lehet bellk.
gy rhetek el, hogy a gykrelembl indulva veszem a gykrelem rkvetkezjt, majd
annak a rkvetkezjt, stb.
Kzbens elem: A fa nem gykr- ill. levlelemei, hanem az sszes tbbi eleme.
t: A gykrelemtl kiindul, klnbz szinteken tmen, s levlelemben vgetr
egymshoz kapcsold lsorozat (lista). Az t hosszn az adott tban szerepl lek szmt
rtjk. Minden levlelem a gykrtl pontosan egy ton rhet el, t helyett szoks beszlni a
a fa gairl is. Egy fban az utak szma megegyezik a levlelemek szmval.
A fn bell vannak szintek, egy elem szintje megegyezik az elem gykrelemtl vett
tvolsgval.. A nulladik szinten a gykrelem helyezkedik el, az els szinten a gykrelem
rkvetkezi (a gykrtl egy lnyi tvolsgra lv elemek), a msodik szinten ezeknek a
rkvetkezi, s gy tovbb. A maximlis szintszmot a fa magassgnak vagy mlysgnek
(a lenti pldban 3) nevezzk.
Rszfa: Minden kzbens elem egy rszfa gykereknt tekinthet, gy a fa rszfkra bonthat.
Beszlhetnk resfrl is, ez a fknak az szlssges esete, amikor a fnak egyetlen eleme
sincs.

A ft tekinthetjk rendezett vagy rendezetlen mdon. Ha rendezetlen mdon vizsgljuk,


akkor az egy elembl kiindul gaknak nem tulajdontunk rendezettsget, felcserlhetek,
azaz a sorrendjk tetszleges. Ha egy fa rendezett, akkor az egy elembl kiindul leknek a
sorrendje kttt. Tekintsk ezt a kt ft:

Ha rendezetlen mdon vizsgljuk, akkor a kt fa megegyezik, ha viszont feltesszk,


hogy rendezettek, akkor a kt fa nem ekvivalens.
Binris fa: A szmtstechnikban kitntetett szerepe van a binris fnak. A binris fa olyan
fa, amelyben minden elemnek legfeljebb kt rkvetkezje lehet. Szigor rtelemben vett
binris frl akkor beszlnk, amikor minden elemnek 0 vagy pontosan 2 rkvetkez eleme
van. Rendezett binris fknl a rendezettsg miatt az egyrtelmsg kedvrt beszlhetnk

baloldali s jobboldali rszfkrl. Tetszleges nem binris fa reprezentlhat binris fa


segtsgvel a kvetkez mdon:

Az binrisan brzoland fa gykreleme a binris fban is gykrelem lesz. Ezek utn


a binris fa baloldali rszfjnak gykreleme legyen az kvetkez szinten lv
legbaloldalibb elem. Ehhez lncoljuk hozz az azonos szinten lv, kzs gyker elemeket
egyms jobboldali rszfiknt. Ezt a folyamatot ismtelni kell az egsz fra, minden szinten.
A binris fban az eredeti fa levlelemei nem felttlenl maradnak levlelemek, viszont
felismerhetek arrl, hogy nincs baloldali rszfjuk. Brmely fa kezelhet binris faknt. A
tovbbiakban binris fkrl beszlnk.
Mveletek
Ltrehozs: Ltrehozzuk az resft, majd egy elemet visznk be (a gykrelemet), ezutn a
ltrehozs nem ms, mint a fa bvtse.
Bvits: Bvteni ltalban levlelemmel szoktunk, ritkbban rszfval. ltalban csak a
levlelemmel val bvtst rtelemzzk, de tetszleges helyen val bvts is rtelmezhet, a
fa tstruktrlsval jr.
Trls: Binris fbl brmikor trlhetek egy rszft, kzbens elemet nem. Ez fizikai trls,
logikai trlst brmikor vgezhetek.
Csere: A megfelel adatelemet bejrssal elrem s az rtkt brmikor fllrhatom.
Rendezs, keress, elrs: Nincs, legalbbis a korbbi rtelemben. Elrs helyett egy
specilis famvelet, a bejrs rtelmezhet:
Bejrs: A bejrs az a tevkenysg, amikor a ft, mint hierarchikus adatszerkezet egy sorra,
lineris adatszerkezetre kpezzk le. A fa elemeit a bejrs folyamn egyszer, s pontosan
egyszer rintjk, az elemek kztt valamilyen sorrendet llaptunk meg, attl fggen, hogy
hogyan jrjuk be a ft. Hrom bejrsi md van, ezek kztti klnbsg abban rejlik, hogy a
bejrs folyamn a gykrelemet mikor dolgozzuk fel.
preorder bejrs: Ha a fa res, akkor vge a bejrsnak, egybknt vegyk a
gykrelemet s dolgozzuk fel (vagy kpezzk le a sor els elemre). Ezutn
jrjuk be preorder mdon a baloldali, majd a jobboldali rszft.
inorder bejrs: Ha a fa res, akkor a bejrs befejezdik. Egybknt jrjuk be
inorder mdon a baloldali rszft, majd dolgozzuk fel a gykrelemet, s jrjuk be
ugyanezen mdszerrel a jobboldali rszft.
postorder bejrs: resfnl vge, egybknt jrjuk be postorder mdon a
baloldali, majd a jobboldali rszft, vgl dolgozzuk fel a gykrelemet.

Feldolgozs: Alapja a bejrs.


A binris fknl a leggyakoribb brzols a sztszrt brzols, majdnem kizrlagosan
ezt alkalmazzk. Egy fa eleme egy adatrszbl s kt mutatrszbl ll, ezek egyike a bal, a
msik a jobb oldali rszft cmzi. A gykrmutat fej jelleg, egy fn kvli informci. Ha a
fej NULL, akkor a fa res.

Alkalmazhat a folytonos trols is, leginkbb akkor, ha a fa statikus. Ilyenkor a ft egy


bejrssal lekpezzk egy sorra. Hrom darab egydimenzis tmbre lesz szksg: Adat, B (a
bal oldali rszfk indexei, hol van a bal oldali rszfa gykere), J (a jobb oldali rszfk indexei,
hol van a jobb oldali rszfa gykere). Az Adat vektorban valamilyen mdon felsorolom a fa
elemeit.

Ha valamely i-re B[i] s J[i] is nulla, akkor az Adat[i] levlelem. A bvts s a trls
nehezebb, a bejrs knny. Sztszrt brzols esetn azonosan nehz minden mvelet.
Brmely kifejezshez felrhat a megfelel binris fa (kifejezsfja), a kifejezs s a
binris fa kztt klcsnsen egyrtelm a megfeleltets. Az operandusokat s a mveleti
jeleket a fa egy-egy elemnek tekintem (a zrjelekkel nem foglalkozom). A krds az, hogy
az operandusokhoz kpest a mveleti jelek hol helyezkedik el.
Pldul: a/b+c*(d-e)

A hrom alak kzti klnbsg az, hogy a mveleti jel az operandushoz kpest hol
helyezkedik el. Az imperatv nyelvek a kzps alakot hasznljk, amely nem egyrtelm, de
teljes zrjelezssel vagy precedenciaszably alkalmazsval egyrtelmv tehet. (Egy infix
kifejezs teljesen zrjelezett, ha minden opertor s a hozz tartozoperandusok zrjelben
szerepelnek.) A prefix s a postfix alak egyrtelm. A postfix alakot szoks fordtott lengyel
formnak nevezni, ltalban ezt favorizljk az egyrtelmsg miatt. Amikor a fordt
felismer egy kifejezst, lefordtja, akkor a kifejezsbl pt egy binris ft, majd bejrja s egy
postfix alakot kszt belle.
Nhny algoritmus, plda
Van egy teljesen zrjelezett kifejezsem: ((a/b)+(c*(d-e))). Az operandusok s a
mveleti jelek egykarakteres nvvel ll vltozk, s tegyk fel, hogy a kifejezs szablyos s
teljesen zrjelezett. A feladat az, hogy ezen kifejezshez ksztsnk el a neki megfelel
binris ft. A fa elemeit egydimenzis tmbbel kell szimullni:

Mindegyik elem ll egy adatrszbl s kt mutatrszbl. A szabad helyek indulskor


fel vannak fzve MUTATOJ szerint. Az algoritmus hasznlni fog egy vermet (V).
Binris fa ksztse:
int felepit( )
{
char c;
int i = 0;
int gyoker = -1;
urit_verem( );
while (i<n)
{
c= KIF[i];
if ( c!=( && c!=) )
{
int f = sz;
sz = MUTATOJ[sz];
MUTATOB[f] = -1;
MUTATOJ[f] = -1;
ADAT[f] = c;
push(f);
}
else if ( c==) )
{
int j,b;
pop(j);
pop(gyoker);
pop(b);
MUTATOB[gyoker]=b;
MUTATOJ[gyoker]=j;
push(gyoker);
}
}
return gyoker;
}

Az els operandust elhelyezi egy tmbben, mint kln elemet, s ezen operandus cmt
berakja a verembe. Ezutn olvassuk tovbb a karaktereket, gy a kvetkez a / jel. Ezt is
elhelyezi, majd megy tovbb, addig, mg a bezr zrjelhez nem r. Ekkor a verembl
kiemeli a fels hrom elemet, ltrehozza a rszft s a gykernek cmt visszahelyezi a
verembe.

Ugyanezen fa preorder bejrsa, egy nem rekurzv algoritmussal. Hasznlunk egy


vermet, amelyet egydimenzis tmbbel implementlok. Ha a verem res, bejrtam a ft. A
verem azrt kell, hogy tudjam, hogy mikor a baloldali rszfra megyek, tudjam hova kell
visszatrnem. Az algoritmusnak akkor lesz vge, mikor a verem kirl.
void bejar_preorder ( int gyoker )
{
int f;
int p= -1;
if ( gyoker != -1 )
{
f = gyoker;
do
{
if (f != -1)
{
feldolgoz( ADAT[f] );
p++;
VEREM[p] = f;
F = MUTATOB[f];
}
else
{
f = VEREM[p];
p--;
f = MUTATOJ[f];
}
}

} while (p == -1 );

A fa inorder bejrsa:
void bejar_inorder ( int gyoker )
{
int f;
int p= -1;
if ( gyoker != -1 )
{
f = gyoker;
do
{
if (f != -1)
{
feldolgoz( ADAT[f] );
p++;
VEREM[p] = f;
F = MUTATOB[f];
}
else
{
f = VEREM[p];
p--;
feldolgoz( ADAT[f] );
f = MUTATOJ[f];
}

} while (p == -1 );
}
}

A fa postorder bejrsnl fontos, hogy tudjuk, hnyszor lptnk vissza. Az els


visszalpsnl mg nem kell a gykrelemet feldolgozni, csak a msodiknl.
typedef struct ref {
int adat;
struct ref *bal;
struct ref *jobb;
} REF;
void preorder ( REF *t )
{
if ( t!=NULL )
{
feldolgoz(t);
preorder ( t->bal; );
preorder ( t->jobb );
}
}

Kihasznljuk a rekurzv hvs lehetsgt. Ez azt jelenti, hogy a vermet a rendszernek


kell kezelnie, s nem mi oldjuk meg. Mi teht kevesebbet dolgozunk, viszont egy
rendszerszinten nagyon lass algoritmust kapunk. Minden rekurzv algoritmus felrhat
ciklusok segtsgvel. A msik kt bejrs hasonlan flrhat.
Minimlis magassg fa: Legyen adva egy adott elemszm. Ez alapjn fel lehet pteni egy
olyan ft, amelynek a magassga az adott elemszm mellett a lehet legkisebb. Ezt
megtehetjk gy, hogy a legals szint kivtelvel minden szintre a lehet legtbb elemet
helyezzk el. Jelentsge az, hogy az utak minimlisak, brmely levlelem a legrvidebb ton
rhet el.
Tkletesen kiegyenslyozott fa: Egy fa akkor tkletesen kiegyenslyozott, ha minden
elem bal- illetve jobboldali rszfjban elhelyezett elemek szma legfeljebb eggyel tr el.
Mindig minimlis magassg.
A krds az, hogy hogyan lehet ltrehozni adott elemszm (n) mellett egy tkletesen
kiegyenslyozott ft. Ez a kvetkezkppen trtnik: az elemeket az rkezs sorrendjben
vesszk, az els elem a gykr lesz. A maradk elembl ellltjuk a gykr nb=(n % 2)
elemszm bal oldali rszfjt, majd ugyanezen mdon ellltjuk a gykr nj=(n-nb-1)
elemszm jobb oldali rszfjt.

Az implementcija:
REF *fa ( int n )
{
REF *ujelem;
int x,nb,nj;
if ( n == 0 ) return NULL;
else
{

nb = n/2;
nj = n-nb-1;
scanf ( %d, &x );
ujelem = (REF*) malloc (sizeof (REF) );
ujelem -> adat = x;
ujelem -> bal = fa(nb);
ujelem -> jobb = fa(nj);
return ujelem;

Plda: 8, 9, 11, 15, 19, 20, 21, 7, 3, 2, 1, 5, 6, 4, 13, 14, 10, 12, 17, 16, 18. n = 21, n b =
10, nj = 10.

A megadott szmokbl egy kiegyenslyozott ft hoz ltre a fggvny.


A binris fkat olyan adathalmaz feldolgozsra hasznljk gyakran, amikor az
adatelemeknek van egy kulcsrszk (tblzatok) vagy maguk az adatelemek klnbz
rtkek. Ilyenkor a kulcs a feldolgozs alapja, a rendezett kulcs alapjn kell keresni..
Ha adott elemszm mellett a ft gy ptem fel, hogy brmely elemre igaz, hogy az
elem baloldali rszfjban az sszes eleme kulcsa kisebb, a jobboldali rszfjban az sszes
eleme kulcsa pedig nagyobb az adott elem kulcsnl, akkor keresfrl (vagy rendezfrl)
beszlnk.

A keresfa jelentsge abbl ll, hogy ha van egy adott elemnk, amelyet meg akarunk
keresni a fban, akkor a gykrtl kiindulva brmelyik kulcs elem megkereshet gy, hogy
vizsgljuk, hogy a gykrelem kulcsa, megegyezik-e a keresett elem kulcsval. Ha igen,
megllunk, ha nem megnzzk, hogy attl kisebb vagy nagyobb. Ha nagyobb, akkor a
jobboldali rszfn (ha van), ha kisebb, akkor a baloldali rszfn (ha van) haladok tovbb
ugyanezzel a mdszerrel, mindaddig, mg az elemet meg nem tallom, vagy nem jutok el egy
olyan elemhez, amelyiknl az adott irnyban nincs tbb elem, ekkor a keresett kulcs elem
nem szerepel a fn. A keress gyors, mert maximum a fa magassga+1 hasonltssal vagy
megtallom az elemet, vagy az elem nincs a fban. A keresfban az elemek olyan sorrendben
vannak, hogy ha inorder mdon jrom be a ft, akkor az elemeknek egy rendezet sorozatt
kapjuk.
Egy ilyen fa ltrehozsa: Veszem az elemeket az adott sorrendben. Az els elem lesz a
fa gykere. A msodik elemet vve keresek, hogy szerepel-e mr a fban. Ha igen, akkor hiba
trtnt (ktszer nem lehet benne ugyanaz az elem), ha nem, akkor dntk, hogy az hol
helyezkedik el az elzhz kpest (kisebb vagy nagyobb a gykrelemnl). Ha nagyobb,
akkor a jobboldali rszfnak lesz az eleme, ha pedig kisebb, akkor a baloldalinak. Beillesztem

az j elemet vagy a rszfba: addig megyek, amg levlelemet nem tallok, mert mindig
levlelemmel bvtnk.
Alkalmazsa: Adva van a szavaknak egy sorozata, tetszleges szm sz egyms utn.
Hatrozzuk meg, hogy ebben hny sz van, s az egyes szavak milyen gyakorisggal
fordulnak el! Ennek megoldsa sorn a kulcs maga a sz lesz, az elemek msik rtke pedig
a szavak gyakorisga. Ezekbl keresft ptek fel, megkeresem az j elem helyt, majd
bvtek. Ez a program alkalmazhat olyan esetekben, amikor meg akarjuk tudni, hogy a
program szvegben lv szavakat milyen gyakorisggal hasznljuk. A fordtprogramok is
valahogy ilyenflekppen kezelik a problmt.
typedef struct ref {
char kulcs[20];
int szamlalo;
struct ref *bal;
struct ref *jobb;
} REF;
REF *gyoker;
char k[20];
void kiir ( REF *w , int l )
{
int i;
if ( w!=NULL )
{
kiir( w->bal, l+1 );
for (i=0; i<l; i++) printf( );
printf(%s\n,w->kulcs);
kiir( w->jobb, l+1);
}
}
void keres ( char x[20], REF *p )
{
if (p==NULL)
{
p= (REF*) malloc (sizeof (REF));
p->kulcs=x;
p->szamlalo=1;
p->bal = p->jobb = NULL;
}
else if ( x< p->kulcs ) keres( x, p->bal );
else if ( x> p->kulcs ) keres (x, p->jobb);
else (p->szamlalo)++;
}
{
gyoker = NULL;
scanf( %s, &k);
keres(k,gyoker);
kiir(gyoker,0);
}

A keresfbl fizikilag brmely elem trlhet. Hogyan tudom realizlni? A keress


eredmnye szerint kt eset lehet:
I. A trlend elem nincs a fban. Ez az eset a legegyszerbb, mert nincs dolgunk.
II. Az adott kulcs elem benne van a fban. Ekkor hrom alapeset lehetsges:

1.
2.

3.

A trlend elemnek nincs rkvetkezje (levlelem): Nincs gond, simn


megkeressk s trljk.
A trlend elemnek egy rkvetkezje van: Az elemet trlm s a baloldali vagy
jobboldali rszft (amelyik van) felcssztatom a trlt elem helyre (tlltom a
mutatjt).

A trlend elemnek kt rkvetkezje van (van bal- s jobboldali rszfja): Ebben


az esetben fllrom a trlend elemet: vagy a baloldali rszfa legjobboldalibb
elemt, vagy a jobboldali rszfa legbaloldalibb elemt rom a helyre. Ez is
mutattlltst jelent.

REF *q;
void tor (REF *r)
{
if (r->jobb != NULL ) tor(->jobb);
else
{
q->kulcs=r->kulcs;
q->szamlalo=r->szamlalo;
q=r;
r=r->bal;
}
}
void torol ( char x[20], REF *p )
{
if (p==NULL) printf(A szo nincs a faban!);
else
{
if (x<p->kulcs) torol(x,p->bal);
else if (x>p->kulcs) torol(x,p->jobb);
else
{
q=p;
if (q->jobb==NULL) p=q->bal;
else if (q->bal==NULL) p=q->jobb;
else tor(q->bal);
}
}
}

A keresfk jelentsge, hogy nagyon gyors keresst tesznek lehetv. Ez igazn nagy
adathalmaz esetn lnyeges. Ha a keresfa tkletesen kiegyenslyozott lenne (ez lenne az
optimlis eset, a minimlis magassg fa), akkor lenne a leggyorsabb a keress (a keress
maximum annyi lpsig tart, amennyi a fa magassga), de a mdostsok miatt nehz lenne
kezelni, mert mindig t kellene szervezni, hogy tkletesen kiegyenslyozott legyen. Nem ri

meg tkletesen kiegyenslyozni ket, ezrt kiegyenslyozott fkat alkalmaznak. (AVL-fa).


Egy fa kiegyenslyozott, ha brmely elem esetn a bal s jobb oldali rszfk magassgnak
klnbsge legfeljebb eggyel tr el. Kezelse egyszerbb, mint a tkletesen kiegyenslyozott
fk. Ezutn kiegyenslyozott fkkal foglalkozunk.
A kiegyenslyozott fa magassga elemszmtl fggetlenl legfeljebb 45%-kal nagyobb
mint egy olyan tkletesen kiegyenslyozott fa magassga, amelyik ugyanannyi elembl pl
fel, ezrt a kiegyenslyozott keresfk jtszanak fontos szerepet a gyakorlatban.. A keress
hatkonysgt maximum 50%-kal rontja, de a fa kezelst knnyebb teszi. Bvtsk s a
trls egyszeren megoldhat.
Tkletesen kiegyenslyozott ft csak fix elemszmnl rdemes hasznlni, mert sokszor
kell benne keresni. Ha az elemek szma dinamikusan vltozik, akkor kiegyenslyozott
keresfa marad.
Bvts: A Keres eljrst hasznlva megkeressk, hogy hova szrjam be az j elemet.
Levlelemmel bvtnk. Tegyk fel, hogy a beszrs utn a baloldali rszfa magassga ntt
meg. Ekkor hrom lehetsg van:
1.
Balra bvtnk, amikor a jobboldali rszfa magassga eggyel nagyobb volt (m bal <
mjobb a beszrs eltt). A fa kiegyenslyozdik.
2.
gy szrunk be, hogy korbban tkletesen ki volt egyenslyozva a fa (m bal =
mjobb a beszrs eltt). A fa mf a beszrs utn is kiegyenslyozott.
3.
Balra bvtnk, de a baloldali rszfa volt a magasabb (m jobb < mbal a beszrs
eltt), a kiegyenslyozottsg, gy ki kell egyenslyozni a ft mutatcservel. Egyegy ilyen kiegyenslyozsi lps kt vagy hrom elemet rint, ezeket forgatni kell.
t kell szervezni a ft, a tl hossz gat helyre kell billenteni.

Megolds:
(1)

(2).

(3).

(4).

A kiegyenslyozott fban a trlshez a kiegyenslyozott fban val trlst ki kell


egszteni, s kiegyenslyozst kell vgezni. Legyen a plda a kvetkez:

(a) Trljk a 4-es elemet! Az egyensly felborul, ezrt be kell lltani. Az eredmny:

(b). Trljk a 8 elemet az elz fbl!

(c). Trljk a 6 elemet az elz fbl!

(d). Trljk az 5-t!

(e). Trljk az 1-et!

(f). Trljk a 7-est!

Piros fekete fa: Specilis keresfa, minden elemnek van egy szne. Ezeknek a szneknek a
kiosztsnak szablyval biztosthat, hogy a fban minden, a gykrtl levlelemig vezet t
maximum ktszer olyan hossz, mint a legrvidebb t hossza. Egy ilyen fban pluszknt
megjelenik a szn mez a reprezentciban.
Levlelemei specilisak: az eddigi levlelemek NIL mutatja egy specilis NIL csompontra
mutat. Ezek a fa kls pontjai, a tbbiek a belsk.

Egy keresfa akkor lesz piros-fekete, ha a kvetkez tulajdonsgok teljeslnek:


1.
a fa minden elemnek szne piros vagy fekete,
2.
minden levlelem szne fekete,
3.
minden piros szn elemnek mindkt rkvetkezje fekete,
4.
brmely kt azonos elembl indul s levlig vezet ton ugyanannyi fekete elem
van. Ezt a ngy tulajdonsgot teljest piros-fekete fnl, amely n adatelemet
tartalmaz, maximum 2lg(n+1).
26
17

41

14

21

10
7
3

16
12

: piros elem,
: fekete elem,
N

: NULL.

15
N

19
N

30

N
N

23
20

28
N

47
38

N
N

N
35

N
39
N

Inorder mdon bejrva rendezett sorozatot kapok. Trlni s bvteni ugyangy kell, de
a fnak piros-fekete fnak kell maradnia. Ahhoz, hogy a piros-fekete tulajdonsgok
teljesljenek, a bvts illetve a trls utn a csompontok tsznezsvels forgatsval
tudunk eljutni.
a

A forgats mutatcserkkel reprezentlhat.


Bvts: Levlelemmel bvtnk, megkeresem a helyt, s berakom. Az j elem legyen piros,
s kt NULL elem tartozzon hozz. Tegyk fel, hogy a gykr szne fekete! A 3. Tulajdonsg
srlhet, ha a bevitt elem megelzje piros.
A fa bvtsnl hat alapeset van, ebbl 3-3 szimmetrikus.
z

Az x elemet szrom be, az x megelzje u,


u s y azonos szinten vannak, u s y

megelzje z.
u

u piros, x piros.

x
1.Az u s az y piros, a z biztosan fekete. Az u s az y legyen fekete, z legyen piros. Ekkor egy
szinttel feljebb kell tolni a problmt.
12
5

18

9
7

15

20

10

6
12
9
5
1

10
7

18
15

20

9
5

12

10

18
15

20

2. Az u piros, az y fekete, az x jobb oldali rkvetkez.


z

Ekkor hajtsunk vgre egy balra forgatst.

x
3. Az u piros, az y fekete, az x bal oldali rkvetkez.
z

Az u-t fessk feketre, z- pirosra, majd

csinljnk
egy jobbra forgatst (u-z-nl)!
u

x
Az 1. esetben lehet, hogy a gykr piros lesz. Minden algoritmust gy zrunk, hogy a
gykr fekete legyen.
Trls: Megkeresem az elemet, s vgrehajtom a trlst. Ha piros elemet trlk, akkor nem
srltek meg a tulajdonsgok; ha fekett, akkor a hrmas s a ngyes is srlhet.
Ha fekett trlk, a trlt elem rkveetkezjre rkldik a szne. Ha ez a szn a piros,
akkor rendben van. Ha a rkvetkez fekete, akkor ezt mozgatom felfel a fban. Ha eljutok a
gykrelemig, akkor a gykeret ki kell mozgatnom a fbl.
Nyolc alapesete van, ebbl ngy-ngy szimmetrikus. Trland elem: z, a rkvetkezi:
x s y.
z
x

1.

12
5

18

15

20

Az x fekete, az y piros. Cserljk meg y-nak s z-nek a sznt s forgassuk balra.

18
12

20

15

2. Az y mindkt rkvetkezje fekete. Az y pirosra vlt, mozgassuk t az extra fekete sznt az


x-tl a megelzjhez!
12
5

18

15

20

3. Az y bal oldali rkvetkezje piros, a jobb pedig fekete. Ekkor cserljk fel az y-nak s a
bal oldali rkvetkezjnek a sznt, s y krl forgassuk jobbra.
12
5

18

5. Az y jobb oldali rkvetkezje piros, a bal oldali mindegy, milyen.A z, y, s x sznt


lltsuk az ellenkezjre, s forgassunk z krl.
12
5

18

15

20

18
12

20

15

A gykeret a vgn mindig feketre kell vltoztatni. A keress gyors.

A binris fk bejrsa alapveten rekurzv algoritmusokkal oldhat meg, de ezek


memria- s idignyesek. A bejrs gyorstsa vezetett ahhoz az tlethez, hogy binris
fkban, sztszrt brzolst felttelezve, vannak olyan elemek (a levlelemek), amelyeknek
van 2 NULL mutatjuk. Clunk az, hogy hasznljuk ezen mutatkat arra, hogy
visszamutassanak a gykrre. Ezt nevezzk a vissza- ill. felfztt fk, vagy a kitaposott t
mdszernek.

Az inorder bejrs szerinti els elem baloldali mutatja mutasson a gykrelemre. Az


inorder bejrs szerinti utols elem jobboldali elem mutatja maradjon nil. Az sszes tbbi
esetben lltsuk be a mutatkat gy, hogy a baloldali mutat mutasson az adott elemet inorder
mdon megelz elemre, a jobboldali pedig az adott elemet inorder mdon kvet elemre.
Ezzel felfztk a ft, gy a fban ktfajta mutat lesz: a tnyleges (rszfra mutat) mutat s
visszafz mutat. Hogy a kt mutatt megklnbztessk, hozz kell rendelni egy-egy
jelzbitet. Pldul, ha a bit rtke 1, akkor rszfra mutat, ha 0, akkor visszafz mutat.

A felfztt fa a preorder s az inorder bejrst segti, mert ezen mutatk segtsgvel


rekurzi nlkl be tudom jrni a ft, viszont a postorder bejrst nem teszi hatkonyabb. Ez
ltalban statikus fknl hasznlhat jl, mert klnben minden vltoztatsnl a mutatkat is
vltoztatni kellene s kezelse nehzkess vlna.
A piros-fekete fk reprezentcijnl nagyon gyakran van egy plussz mutat, ami a
megelzre mutat; ez gyorstja a bejrst.
Tbbg fk: Tbbg rendezett fk esetn is lehet rtelmezni a bejrst.
Preorder bejrs: Ha a fa res, akkor vge. Egybknt feldolgozzuk a gykeret, majd utna
preorder mdon a legbaloldalibb rszft jrjuk be, majd az sszes tbbi rszft rendezettsg
szerint. Hasonlan lehet vgrehajtani az inorder s a postorder bejrst is.
A reprezentcijra az egyik megolds a binris fa. Msik lehetsges mdja az, hogy
tbbg fkat gy brzolok, hogy annyi mutatja legyen minden egyes elemnek, ahny
rszfa indul ki az adott elembl. Az elemeknl vagy dinamikus szm mutatt kell
alkalmazni, vagy fix mutattmbt, de ekkor a mutatk szma maximlt: annyi legyen, hogy
minden elem kezelhet legyen. A karbantartsa knny, de sok helyet foglal. Nincsenek
ltalnos elvek ill. algoritmusok, a megoldsa problmafgg.
Ezek a lemezen megjelen fknl jtszanak alapvet szerepet, mert az llomnyok
kezelsnl nagy problma a mozgats s az tviteli id. A mutatk lemezcmeket jelentenek,
s nem egy trbeli cmet. A cl az, hogy ne egy elemet mozgassunk, hanem adatcsoportokat.
A tbbg fa a lemezen van. Ha elemenknt fogom meg, minden elemet egyenknt ki kell
vinnem, s ez lass. A ft osszuk fel lapokra, egy lapon tbb elem legyen. Lapot mozgassunk
a lemez s a gp kztt, lapot hozzunk be a trba. A lap elrse perifria sebessg, az elem
sebessge pedig trsebessg, gy lnyegesen gyorsabb a mvelet.
Tkletesen kiegyenslyozott binris fa lapokra osztsa:

B-fk (balanced): Specilis keresfk. A kiegyenslyozott fk, a keres fk s a lapra trtn


feloszts elvt viszik tovbb. Viszonylag knny karbantartani, s gyors a keress.
Jelentsgk az llomnyoknl vannak.
Mindig adott egy n szm, amely a B-fa rendje. gy kell felpteni a ft, hogy minden
lapon legalbb n s legfeljebb 2n db elem legyen. Az aktulis elemszm egy olyan m szm,
melyre teljesl, hogy n<=m<=2n.
Ha sszesen k db elemem van, legrosszabb esetben n / logk hivatkozssal meg tudom
keresni az adott elemet. ltalban akkor hasznljuk, ha van kulcs az adatoknl.
Kulcsos elemeknl rdekes, a B-fk a memriban kulccsal rendelkezadatelemk
keressre hasznos.
Defincija: A B-fa elemi lapok sszesge. Minden lap maximum 2n db elemet tartalmaz, s
minden lap, kivve a gykrlapot, legalbb n db elemet tartalmaz, a gykrlap legalbb
eggyet. A B-fban minden levllap ugyanazon a szinten van. Egy lap vagy levllap, vagy
m+1 rkvetkezje van (m a lapon elhelyezett adatok szma).
Msodrend B-fa pldja:

A lapokon 2,3,4 elem (kulcs) helyezkehet el. A fa hromszint, a levlelemek azonos


szinten vannak. Minden elemnek eggyel tbb rkvetkezje van, mint amennyi elhelyezkedik
a lapon. A lapon az elemek kulcsuk szerint nvekv sorrendben helyezkednek el, rendezettek.
Ha a ft sszenyomnnk, akkor az elemeknek rendezett sorozatt kapnnk.
Egy nem levllap esetn a lappon kulcsok s mutatk helyezkednek el, a kulcsok
nagysg szerint rendezve. Levllapon a mutatk NULL rtkek. Egy lap szerkezete:

1.
2.
3.

A fa szerkezete (kulcsok elhelyezkedse a fban): Adott fban az x


kulcsot keressk, a gykrelembl indulva. Tegyk fel, hogy
valamelyik lap benne van a trban. A kulcsokra vonatkozan a lapon a
kulcsokat vgig kell keresnnk, sok elemnl binrisan. Ha megtalljuk,
rendben van. Ha nem talljuk meg, akkor a lehetsges esetek a
kvetkezk:
ki<x<ki+1:
Az x a lapon elhelyezett kt kulcs kz esik. Abban a
rszfban kell keresnnk, amelyre a pi mutat.
x<k1: A keresett kulcs kisebb a lapon lv legkisebb kulcsnl. A p0-al
cmzett, legbaloldalibb rszfa gykert kell megnznem.
km<x: A keresett kulcs nagyobb a legnagyobb kulcsnl. A pn-el cmzett,
legjobboldalibb lapon kell keresnem.

Elindulok a gykrlapon s behatrolom, hogy hol kell keresnem az elemet. Addig


keresek, amg meg nem tallom vagy levllaphoz nem jutok, s azon sem tallom.
A B-fa szemlletesen gy adja a kulcsok sorozatt, hogy sszenyomjuk a szinteket. Ha a
levlelemekrl indulunk, be tudjuk rakni a rszfa gykerbl (eggyel magasabb szintrl) az
elemeket, amelyek beillenek az alattuk lv lapok kztti rsbe.
Mveletek
Ltrehozs: res fa bvtse.
Bvts: Mindig levllapon trtnik. Megkeresem a bvtend elem helyt.
Egyszer esete az, amikor olyan lapra akarok bvteni, ahol az elemek szma kisebb
mint a megengedett maximlis rtk (m<2n). pl: 23 kulcs adatot akarom bevinni. Ha nem
tallom meg, akkor levllapra kell beilleszteni. A helye a 22 s a 24 kztt van. Ezen a lapon
az elemek szma kisebb, mint 2n, gy a 23 bevihet. Az elbbi keressi mdon megkeresem a
kulcs helyt.
22, 24

22, 23, 24

Ha olyan lapra kellene bvteni, amelyik tele van (2n eleme van), akkor j lapot kell
ltrehozni. Ha az j elemet is felviszem a lapra, akkor 2n+1 elemem lesz. Ezen elemek kzl
a kzps elemet flviszem a rszfa gykrlapjra, majd ott a megfelel helyre beillesztem. A
maradk 2n els felt az els, msodik felt a msodik lapra viszem. Ez a vgs. gy rszfa
gykrlapon bvtettnk. Ha a felvitt elem befrt, akkor nincs problma, ha nem frt be, akkor
ezen a szinten is vgni kell ugyanezzel az algoritmussal. Elfordulhat, hogy a gykrelemen
nem tudunk bvteni, ezrt itt is vgni kell, gy a fa magassga eggyel n, lesz egy j,
egyelem gykernk. Ez a egyetlen eset, hogy a fa magassga vltozhat egy szinttel,
egybknt nem vltozik.
Pl. 41-el akarok bviteni.
30, 40
42, 43, 45, 46

41

30, 40
41, 42, 43, 45, 46

30, 40, 43
41, 42

45,

46
Trls: Brmely laprl lehet.
1.
Meg kell keresni az adott kulcs elemet. Ha a trlend elemet levllapon talltuk
meg, akkor fizikailag trlm, a mutatkkal nem kell foglalkoni. Ha nem
levllapon talltuk meg, akkor a trlend elemet fellrom a rendezettsgben az t
megelz vagy a rkvetkez elemmel, s azt trlm.
2.
Ha az adott lapon az elemek szma minimlisan n marad, akkor nincs baj. Elem
trlse annyit jelent, hogy a tle jobbrallkat rhzom. Lehet, hogy kevesebb
lesz az elemek szma mint n, ilyenkor a szomszdos lapbl klcsnkrnk elemet.
Ez csak akkor lehetsges, amikor a szomszd lapon tbb mint n db elem van, s
ekkor az eggyel fentebbi lapon keresztl thzom az adott elemet.. Gyakorlatilag
ez az elbbi vgs inverze.
3.
Ha kt szomszdos lapon az elemek szma 2n-1, akkor sszevonjuk a kt
szomszdos lap elemeit, megszntethetjk az egyik (az res) lapot, s a gykrbl
hozzvesszk a kzps elemet. Ilyenkor az elz szintet is cskkentjk egy
elemmel. Lehet, hogy magasabb szinteken is kevs elem van, itt is hasonlan
jrunk el. Vgiggyrzhet a fn, lehet, hogy a gykrlapot is meg kell szntetni,
ekkor a fa magassga cskken eggyel.

Pl. 45 trlse.
30, 40, 43

30, 40

41, 42

45, 46

41, 42, 43, 46

Pl. 25 trlse.
25

24

24
Rendezs: Nincs.
Feldolgozs: Alapja a keress.
HIERARCHIKUS LISTA

Tekinthetjk ezt a listt a listk ltalnostsainak. A listk elemei listk


is lehetnek, ezrt a listamveletek rtelmezhetek erre a
adatszerkezetre.
Pl: ( Ez egy t elem lista(amelynek utols eleme egy(t elem lista)))
LISP dolgozik ezzel az adatszerkezettel.
Tekintsk az albbi rendezett ft, ami az adatszerkezet egy
reprezentcija.

Egy baloldali zrjel egy j szintet jell, egy bezr zrjel pedig egy
szint vgt. Tbbg rendezett fkat reprezentl.
A hierarchikus lista egy fa szimbolikus kezelsre szolglhat, az sszes,
a fknl ismertetett algoritmus alkalmazhat r. Olyan sztring, amely
szimblumokat tartalmaz.
HLS ADATSZERKEZETEK (HL)

A fk ltalnostsa, olyan adatszerkezet, amelyben az elemeknek akrhny


megelzjk s rkvetkezjk lehet, belertve azt is, hogy kt elem kztt olyan kapcsolat
van, hogy az egyik a msik megelzje s rkvetkezje s viszont (klcsnsen). Egy elem
akr nmaga megelzje s rkvetkezje is lehet. Nincs kitntetet eleme.

SSZEFGG IRNYTOTT GRF


Hlzatok modellezsre hasznlhat. Reprezentlni irnytott grf segtsgvel lehet. A
szkebben vett szmtstechnikban csak a hlzatoknl jelenik meg.
Pl:
1
2
3
a

4
5
6
Grfok reprezentcijra a szomszdossgi listt vagy a szomszdossgi mtrixot
hasznljk.
A szomszdossgi mtrix (cscsmtrix) egy logikai mtrix, amelynek elemei: 0,1. Ha a
grfnak n db eleme van, akkor ez a mtrix nn-es. Az oszlopokat s a sorokat is az elemekkel
cmkzzk fel. A mtrix kitltsnek szablya:

ha az adott elemek kztt nincs rkvetkez vagy megelz viszony, akkor 0-t
kell rni,

klnben 1-t.
Nem szabad elfelejteni, hogy c sajt magnak a rkvetkezje.
A fenti grf szomszdossgi mtrixa:
1
2
3
4
5
6
1
0
1
0
1
0
0
2
0
0
0
1
1
0
3
0
0
0
0
1
1
4
0
1
0
0
0
0
5
0
0
0
1
0
0
6
0
0
0
0
0
1
brzolsra alkalmazhat a sztszrt brzols, ahol ltalban a grfnak egy multilista
felel meg. Mutattmbket veszek fel az adatelemek mell. Kezelshez lehet
sorszmozni.Annyi elem mutattmbt ptek fel, ahny eleme van a hlnak. E tmb
elemei mutattmbk, a mutattmb elemei a rkvetkezkre mutatnak.
A fenti grf szomszdossgi listja:
1.
2
4
2.
4
5
3.
5
6
4.
2
5.
4
6.
6
Alapfogalmak:
A grfon bell tnak nevezzk az olyan elemsszessget, amelyek listt alkotnak. (pl: d-a-bc) A grfban krtnak nevezzk az olyan listt, amikor az utols elem az elsre mutat. (pl: da-b)
A grfok szerepe
A kvetkez krdseket rdemes feltenni:

Ltezik-e olyan t a grfban, amelyben az sszes elem benne van (maximlis t)?
Egyes csompontokbl melyik msik csompontokba vezett t ?
Van-e krt a grfban ?
Melyik a maximlis krt ?
Van-e olyan krt, amelyik az sszes elemet tartalmazza ?
Hogyan lehet olyan algoritmust tallni, amely a grf elemeit csak egyszer rinti?
(bejrs)
A grf egy homogn, dinamikus adatszerkezet, a mveleteket specilisan lehet rtelmezni.
Mveletek:
Ltrehozs: Az res hl ltrehozsa, ezutn bvtjk. A szomszdossgi mtrixban ez egy j
sor s egy j oszlop felvtelt jelenti, amelyeket megfelelen ki kell tlteni.
Trls: Egy elem trlse esetn az elemet reprezentl sort s oszlopot ki kell trlni.
Csere:
Rendezs, keress: Nincs.
Bejrs (keress, hl): Ezen alapszik a grf feldolgozsa. Ltezik szlessgi s mlysgi
bejrs.
Szlessgi keress: Kivlasztok egy elemet (s). Az s-rl indulva szisztematikusan megkeresem
a rkvetkezit, s felptek egy szlessgi ft. Ennek els szintjn az s rkvetkezi llnak,
erreptem r a msodik szintet, ahol az s rkvetkezinek rkvetkezi lesznek. A fa egyszer
fogja tartalmazni az elemeket, s egy msik elem a legrvidebb ton lesz elrhet.
Az elemekhez sznt rendelek: fehr, fekete, szrke. Alaphelyzeben minden elem fehr,
fokozatosan fognak szrkv, majd feketv vlni. Egy elem elrhet s-bl, ha az elbbi
bejrsnl elrtem az elemet, szne nem lehet fehr.Egy fekete elem minden megelzje
fekete, s minden rkvetkez szrke, esetleg fekete. A szrke elemnek minden megelzje
fekete, de lehet fehr rkvetkezje.
Amikor egy elem feketv vik, akkor felvesszk a fba. A keress folyamn ha az sbl elrhet elem feldolgozott, de van mg fehr elem, akkor az eljrst megismteljk a
fehr elemekre, amg minden elem fekete nem lesz.
Kezdpontnak (s-nek) azt az elemet rdemes vlasztani, amely a legtbb
rkvetkezvel rendelkezik.
Mlysgi keress: A sznezs ugyangy trtnik, de alapvet klnbsg az, hogy a ft
szintenknt ptem fel.

HETEROGN ADATSZERKEZETEK
Elemei ms-ms tpusak lehetnek.

REKORD (record, tuple)


A rekord, mint a trban ltez adatszerkezet, statikus. Kttt szm s kttt sorrend
mezkbl ll, az egyes mezk ms-ms, tetszleges tpus rtkeket tartalmaznak. A
rekordban minden mezt megneveznk, s r kzvetlenl a meznevvel tudunk hivatkozni.
Trolsa lehet folytonos s sztszrt is. ltalban folytonos a jellemz, br ez a krds
implementci-, rendszerfgg (rszben hardverfgg is). A folytonos trols esetn a mezk
egyms utn helyezkednek el.
Mveletek

Ltrehozs: Lrehozom a szerkezetet a nv, a tpus megadsval. Fontos a mezk sorrendje!


Az egyes mezkhz a nevk alapjn rtket rendelek. Elfordulhat az az eset is, hogy nem
minden mezhz rendelek rtket.
Bvts: Szkebb rtelemben nem ltezik, mert a rekord statikus. Bvts olyan rtelemben
ltezhet, hogy azon mezkhz, melyekhez a ltrehozskor nem rendeltem rtket, most
hozzrendelek.
Trls: Nincs, legfeljebb logikai, olyan hogy a meznek specilis rtket adok. A fizikai
trls realizlhat cservel.
Csere: Brmely mez rtkt fellrhatom.
Rendezs, keress, bejrs: Nem rtelmezhet.
Feldolgozs: A meznevek alapjn.
Az itt lertak a trban lv rekordok jellemzi, jelentsgk az llomnyoknl
mutatkozik meg.
Egyes nyelvek megengedik, hogy a rekord ne statikus, hanem dinamikus legyen. (pl:
Pascal) Az sszes homogn adatszerkezet elemeinek az rtkei vagy atomiak (tovbb nem
oszthatk, skalr tpusak), vagy rekordok; tgabb rtelemben egy adatszerkezet elemei
adatszerkezetek lehetnek. A rekordok mezinek rtke vagy atomi (a rendszerek nagyobb
rszben), vagy, modernebb rendszerekben, tetszleges adatszerkezet tpus lehet (pl: msik
rekord). gy a rekord dinamikuss vlik, ha a egyetlen mezje dinamikus. Adatbziskezel
rendszereknl ez a definci van eltrben (ortogonalits) A rekordok egymsba gyazhatak.
A relcis adatbziskezel rendszerek rekordja a tuple.

LLOMNY (file)
Az adatok perifrin jelennek meg, az llomny fogalom mindig perifrin
rtelmezhet, brmely perifrin. A httrtr hatrozza meg a fizikai struktrt, mi csak
httrtrakon lv llomnyokkal fogunk foglalkozni. A vals vilg modellezse (az
absztrakci els szintje) ugyangy trtnik llomnyok esetben is, mint adatszerkezeteknl
(az llomny kialaktsa). Msodik szinten megjelenik a fizikai llomny. gy ltezik egy
logikai s egy fizikai llomny.
A logikai llomny fogalmi rendszere
Adatelemekbl (adatttelekbl) pl fel.
Adatelem, adatttel: A logikai llomny legkisebb, nllan rtelmezhet rsze. Jellemzi:

nv

tpus: milyen tpus rtket vehet fel, tetszleges

hossz: ltalban karakterekben rtend, lehet:

fix hosszsg (pl: szletsi vszm (jobb esetben 4 karakter))

vltoz hosszsg (pl: szletsi hely)


A krds itt is az, hogy fizikai szinten hogyan jelennek meg ezek.
Adatcsoport: Az adatelemek nll nvvel elltott egyttese.
vektor adatcsoport: Klnbz tpus adatelemeket fog ssze valamilyen nagyobb
logikai egysgbe (pl: a lakcm tartalmazza az irnytszmot, teleplsnevet,
utct, hzszmot).
ismtld adatcsoport: olyan adatelemnk van, amelyiknek tbb rtke lehet
(halmazrtk). Az ismtldsek szma lehet 0 is. (pl: gyermeknk neve).
sszetett adatcsoport: Az elz kett kombincija: egy vektortpus adatcsoport
valamelyik eleme ismtldik.

Logikai rekord: Adatelemek s adatcsoportok adott sorrend, logikailag sszetartoz


egyttese. Nincs nll neve.

Rekordformtumok: A logikai rekordok szerkezetre vonatkoz osztlyozst


tartalmazzk.

fix rekordformtum (fix hossz): A logikai rekordok azonos


szerkezetek s azonos hosszsgak. Ez eleve kizrja a vltakoz
hosszsg adatelemeket s az ismtld adatcsoportokat. A
legegyszerbb szerkezet logikai rekord.

vltoz rekordformtum: A logikai rekordok szerkezete azonos, de


hosszuk eltr lehet. Ha van vltoz hosszsg adatelem, vagy
ismtld adatcsoport, akkor ezt alkalmazhatjuk. A leggyakoribb
rekordformtum.

hatrozatlan rekordformtum: A rekordok hossza s szerkezete is


klnbzhet. Adatelemek hinyozhatnak az egyes rekordokbl. A
krds az, hogy fizikai szinten ezt hogy tudom kezelni.

Logikai rekordazonost: Azt az adatelemet, vagy az adatelemeknek azon


egyttest, amelynek vagy amelyeknek rtke egyedi, azaz minden konkrt
rekordban ms s ms, logikai rekordazonostnak nevezzk (pl.szemlyi szm,
sorszm stb.). Lehet, hogy ltezik lehet, hogy nem. Ha ez egy adatelem, akkor
egyszer, egybknt sszetett rekordazonostrl beszlnk.
Logikai llomny: A logikai rekordok valamilyen feldolgozsi cl, tartalmi, vagy forma
szerinti egyttese, amelyett nvvel ltunk el. Az llomny lehet, hogy azonos szerkezetekbl,
vagy klnbz elemekbl ll. A logikai llomny egy absztrakt adatszerkezet. Akkor jn
ltre, ha a felsorolt jellemzi adottak, s megadom a nevt, valamint az adatokat.
Beszlhetnk az llomny szerkezetrl is:

struktra nlkli: A logikai rekordok sorrendje tetszleges.

asszociatv: Ha elvgezhet a rekordoknak valamilyen egyrtelm, diszjunkt


csoportostsa. Pl: a logikai rekordazonostk alapjn vgzett csoportosts, amely
1 elem csoportokat ad vissza.

szekvencilis: A logikai rekordok kztt valamilyen sorrend rtelmezett. (pl:


azonost szerinti rendezettsg)

hiearchikus: klnbz logikai rekordokat pakolok egy llomnyba gy, hogy


olyan szerkezetet alkotnak, amely leginkbb egy fval jellemezhet (pl. szemlyi
adatok + flvi eredmnyek)

A fizikai llomny fogalmi rendszere


Mez: Klcsnsen egyrtelmen felel meg az adatelemnek. A klnbsg az, hogy jellemzje
az brzolsi md, hiszen megjelenik a httrtron. A hossz itt byte-okban rtend. Nem fix
hossz adatelemek kezelsnl az adatelem mezjt fix hosszon kell megjelenteni.
Mezcsoport: Megfeleltethet az adatcsoportnak, az adatcsoport megjelentsre szolgl.
Blokk: Megfeleltethet a logikai rekordnak.
Fizikai llomny: Megfeleltethet a logikai llomnynak, nem ms mint blokkok sorozata.
Sajt neve van. Ennek kezelse opercis szinten zajlik.
Blokk: Az az adatmennyisg, amely egyszerre mozog a tr s a perifria kztt. Az
adattvitel egysge, byte-ban rtend. A blokk s a logikai rekord megfeleltetse:


1 logikai rekord alkot 1 blokkot,

tbb logikai rekord alkot 1 blokkot (szkebb rtelemben vett blokkols),

1 logikai rekord tbb blokkban jelenik meg (szegmentls esete).


Kezelse rendszerfgg. Egyes rendszerek a blokk mrett rgztik, s a felhasznl
nem vltoztathatja, msok megengedik, hogy a felhasznl szabja meg. Ha a blokk mrete
rgztett, akkor elkpzelhet, hogy a rendszer nagy blokkoknl automatikus szegmentlst
hajt vgre. Ltezik olyan rendszer, amely megengedi a szegmentlst, de az ilyen rendszer
kevs. A felhasznl ritkbban tud tnyleges mdon szegmentlni.
Hogyan lehet a blokkokat s a logikai rekordokat (rekordokat) megfeleltetni? Az
adatelem lehet fix s vltoz hosszsg. Az els esetben nincs gond, knnyen lehet kezelni.
A vltoz hosszsgnl megklnbztetnk numerikus s szveges adatot. Numerikus
szmbrzols esetn a hossz az brzlsi md megadsval lesz fix. Szveges tpusnl a
sztringnl megbeszlt brzolsi mdok mindegyike rvnyes.
1. Fix rekordformtum
Kezelse a legknnyebb, minden rendszer tudja kezelni. Ha egy rekord hosszt
rgztettem, akkor jellemzen a tbbi is ilyen lesz, gy nem kell az egyes rekordhoz
ktni az informcit. A rekordhossz az llomny jellemzjeknt rhat le.

1 blokk 1 rekord: Az sszes blokkjellemzt tudom.

Blokkols: Megmondom, hogy hny rekordot pakolok ssze egy blokkba. Ezt
nevezzk blokkolsi tnyeznek, ami szintn az llomnyra jellemz. Az utols
blokk lehet tredk-blokk, de a tbbinek azonosnak kell lennie.

Szegmentls: Meg kell mondani a rekord feltrdelst (azoos hossz bytesorozatokra bontom szt, de a szerkezetk nem lesz azonos), s ez minden
rekordra ugyanaz lesz. Csak egyszer kell trdelni, s az utols blokk lehet
rvidebb.
2. Vltoz hossz

1 rekord-1 blokk:
a)
A blokk mrete rgztett, gy vlasztom meg, hogy a leghosszabb
rekord is belefrjen.

b)

Ezrt azon rekordok, melyek kisebbek, nem foglaljk el teljes


egszben a blokkot. A ki nem tlttt rszt specilis bitkombincival
tlthetjk ki, szemtbyte-okkal. Vltoz lehet egy adatelem, vagy
egy ismtld adatcsoport. Fizikai szinten ilyenkor plusz informcit
kell kzlni, az ismtldsek szmt. Ez a rekordhoz van
hozzrendelve, a blokkmret viszont nem fgg a rekordtl. Ha nagy a
klnbsg a rekordok kztt, akkor rossz a helykihasznls, viszont
knny kezelni.
A blokkmret megegyezik a rekordmrettel. A blokk is vltoz hossz
lesz, a blokk elejn jellni kell a blokk hosszt.

Blokkolok:
a)
A rekordok szablyosan vesznek fel klnbz hosszakat, s csak
nhny kveti egymst (pl: 3 db). Ilyenkor tudok gy blokkolni, hogy
a blokk mrete azonos, a rekord mrett jellm. A blokkszerkezett
csak egyszer kell lerni, de a rekordra vonatkoz hosszinformcit a
rekord elejnek tartalmaznia kell.

b)

Fix blokkmrettel dolgozom. A rendszer veszi sorba a rekordokat s


addig pakolja a blokkba, amg belefr, a megmaradt helyet
szemtbyte-tal tlti fel. A tbbi rekordot a kvetkez blokkba rakja.

c)

Maximlis blokkmretet hatroz meg. A rendszer sszepakolja a


rekordokat mindaddig, amg belefr a blokkba, de a szemetet elhagyja.
Kezdi rakosgatni megint. Ha belefr a max. blokkmretbe, akkor
belerakja. gy vltoz mret blokkok keletkeznek, amelyeknl nem
csak a rekordok mrett, hanem a blokk hosszt is jellni kell. Ennek
igen j a helykihasznlsa, s kell plusz informc, a blokk mrete is.

Szegmentls: Nagyon nygs, ugyangy, mint a blokkolsnl, plusz informcit


kell elhelyezni a blokkban. Rendszertl fgg, hogy a plusz informcit hogyan
trolja. A blokk mrete pl. lehet azonban egy kln tblban is.
3. Hatrozatlan hossz
Minden rekord a trolsnl az elzek mellett olyan plusz informcit kell bevinni,
amely az adott rekordra vonatkozik, azaz hogy a rekordnak milyen mezi hinyoznak
(pl: lnykori nv). A rendszerek itt ltalban nem engedik meg a blokkolst s a
szegmentlst, ltalban nem tudjk kezelni a hatrozatlan hosszat.
Opercis rendszer fgg, hogy hogyan lehet ezeket megoldani. Van olyan rendszer,
amely semmit nem enged, de van olyan is, ahol a blokkmretet is be tudom lltani.
Szalagon a blokkok egyms utn helyezkednek el. Lemezen a fizikailag ssze nem
fgg blokkok alkotnak egy llomnyt s brmely blokk kzvetlenl elrhet, minden bytenak van lemezcme.
A logikai rekordazonost fizikai szinten az (elsdleges) kulcs, a msodlagos kulcs azon
adatelemekbl ll, amely(ek) nem tartoznak logikai rekordazonosthoz.
A logikai fizikai llomnyok kapcsolata tetszleges lehet:

1 fizikai llomny 1 logikai llomny rekordjait tartalmazza: Ez a leggyakoribb.

1 fizikai llomny tbb logikai llomny rekordjait tartalmazza

1 logikai llomny tbb fizikai llomnyban helyezkedik el.


A fizikai llomnynak sajt neve van, mellyel hivatkozni lehet r, kezelse opercis
rendszer fgg.
Mveletek
A mveletek mindig logikai rekordra vonatkoznak.
Ltrehozs: Az llomnyt valamelyik httrtron hozom ltre. Ki kell vlasztanom a fizikai
llomny szervezsi mdjt vagy az llomny trolsi szerkezett. Az adott szervezsi
mdnak megfelelen kell a logikai rekordokat elhelyeznem a fizikai llomnyban.
Bvts: Az llomny rekordjainak darabszma n, j rekord kerl be az llomnyba.
Trls:
a) logikai: Az llomny rekordjainak darabszma nem vltozik, de a logikailag trlt
rekordok meg vannak jellve, a tovbbiakban a feldolgozsban nem vesznek
rszt. Rendszerfgg a megvalstsa, a fizikai llomnyban minden logikai
rekordhoz van egy jelz, melynek kt llapota van: trlt ill. l.

Trlbjtot alkalmaznak, hogy eldnthet legyen, hogy tnyleges


rekord-e, vagy mr logikailag trlt. Ez plusz 1byte-on trolhat.
Logikai trlst jelentheti valamelyik mez tartalmnak fellrst
specilis bitkombincira.
A rendszer feldolgozskor a leveszi a logikailag trlt rekordot, de van olyan
is, amelyik ezt a felhasznlra bzza.
b)
fizikai: lesen elvlik a logikai trlstl. Ilyenkor az llomny rekordjainak
darabszma cskken, a rekordok nem nyerhetek vissza. Nehezebb vgrehajtani.
A krds az, hogy a rendszer egyltaln tud-e ilyet. ltalnos az a vlasz, hogy
nem.
Csere: A rekord brmely mezjnek (kivve a rekordazonostt) rtkt cserlhetem valamely
ms rtkre.
Elrs: Olyan tevknysg, mikor az llomny brmely rekordjt akarom megfogni.
Figyelembe kell-e venni a tbbi rekordot?

soros elrs: Alapja a rekordok fizikai sorrendje (ahogyan elhelyezkednek a


rekordok a httrtron).

szekvencilis elrs: Az alapja valamilyen logikai sorrend, az x-ik rekordot csak


az eltt llk elrse utn rhetem el.

kzvetlen elrs: Alapja az elsdleges, vagy msodlagos kulcs, brmely rekordot


egybl megtallok, fggetlenl a fizikai s logikai sorrendtl. Ilyen elrs csak
lemezen lehetsges.
Keress: Soros s szekvencilis elrsnl egy kitntetett rekordot kell megfognom. A
szoksos hrom mdszerrel.
Rendezs: A szoksos (kulcs alapjn).
Feldolgozs: Egy adott llomnyban lv informcihoz akarok hozzfrni. Egy-egy
szerkezetet az minst, hogy a feldolgozst mennyire segti. A feldolgozs alapja a szerkezet
s az elrs, keress.
jraszervezs: Az llomnyt a httrtr egy msik terletn jra ltrehozzuk gy, hogy
kzben megvltozik vagy a szerkezete, vagy a tartalma, esetleg mindkett.
A mveletek szervezsi md fggek.
llomnyszerkezetek:
1.
egyszer: csak a logikai rekordokat tartalmazza.
2.
sszetett: A logikai rekord adatain tl szerkezethordoz adatok is megjelennek,
melyek magrl az llomnyrl adnak informcikat. Ezek a feldolgozst segtik.
Egyszer llomnyszerkezetek
Egyszer llomnyszerkezetnl az osztlyozs alapja:

Van-e kapcsolat a logikai rekordazonost s a logikai rekord httrtron elfoglalt


helye kztt?

Van-e kapcsolat a logikai rekordazonostk kztt?


szerilis:
nem
nem
szekvencilis:
nem
igen
direkt:
igen
igen
random:
igen
nem
Szerilis llomny

Olyan llomny, amelynek nincs szerkezete, a rekordok sorrendje tetszleges. Nem


hasznlja fel, hogy van rekordazonost. Mindenfle httrtron megjelenhet, mindenfle
rekordformtumot tud kezelni, tetszlegesen lehet blokkolni s szegmentlni.
Mveletek
Ltrehozs: A tetszleges sorrendben jv rekordok bekerlnek az llomnyba a berkezsi
sorrend szerint.
Bvts: Mivel nincs rendezettsg, gy a bvts nagyon egyszer, az j rekord az llomny
vgre rdik.
Trls: Fix rekordformtum esetn lemezes httrtrnl lehet fizikai trls: az utols
rekorddal fellrom a trlendt. Szalagnl s nem fix rekordformtumnl csak logikai
trlsrl beszlhetnk.
Csere: A lemezen elhelyezett fix rekordformtum szerilis llomny tudja csak a csert, a
tbbi esetben csak jraszervezssel lehetsges.
Elrs: Csak soros elrsrl beszlhetnk, mert csak fizikai sorrend van.
Keress: Teljes keress.
Rendezs: Nincs.
Feldolgozs: Az adott fizikai sorrendben vgig fel tudom dolgozni az llomnyt, vagy addig,
amg a feldolgozand rekordot meg nem talltam (soros elrs). Nem ms, mint a rekordok
vgigolvassa. Viszonylag lass.
jraszervezs: A szerkezettalakts miatt ez nem merl fel, mert nincs szerkezet. Akkor van
r szksg, amikor logikailag trlt rekordok fizikai trlst akarom megvalstani, vagy
olyan csert (nem a fenti esetben), amely engedlyezett.
Jelentsge az, hogy egyszeren kezelhet, viszonylag gyors, kivve, ha egy adott
rekordot keresek, mert a teljes keress idignyes. Minden opercis rendszer, programnyelv
stb. tudja kezelni az ilyen tpus llomnyt. A szerilis llomny jelenik meg az
adatbziskezel rendszerek tblzatai mgtt. Alapvet szerepet jtszik olyan eseteknl,
amikor a rekordok vletlenszeren llnak el, vagy amikor a vletlenszeren rkez
rekordokat tmenetileg gyjteni kell, hogy az gy ltrejv llomnybl valamilyen
szerkezettel rendelkez llomnyt hozzunk ltre. A feldolgozs elklnlten jelentkezik.
Szekvencilis llomny
Olyan llomny, ahol a rekordok az azonost (elsdleges kulcs) szerint rendezettek.
Ez egy egyrtelm sorrendet ad, egy adott szerkezetet biztost. Ltrehozhat mind szalagon,
mind lemezen. Minden rekordformtumot tud kezelni, a blokkols is tetszleges. A szakma
szkebb rtelemben az azonost szerinti nvekv sorrendben rendezett llomnyt nevezi
szekvencilisnak, de a cskken sorrend is kielgti a fogalmakat.
Mveletek
Ltrehozs: Egy, vagy kt lpsben trtnhet.
1.
Ha egy lpsben trtnik, akkor nekem kell biztostani, hogy a rekordok csak
nvekv, vagy cskken sorrendben kerljenek be. Ez nagy llomnyoknl kiss
nehzkes.
2.
Ha kt lpsben trtnik a ltrehozs:

ltrehozok a rekordokbl egy szerilis llomnyt,

a rendszer ebbl csinl egy szekvencilisat, azaz rendezi azonost


szerint.
Bvts: Nem hajthat vgre kzvetlenl, csak jraszervezssel.
Trls: Csak logikai trlst realizl, fizikait csak jraszervezssel.
Csere: Fix rekordformtum esetn lemezen lehet, brmely ms esetben csak jraszervezssel.

Elrs: A szekvencilis llomnynl a logikai s a fizikai sorrend egybeesik, ezrt a soros s a


szekvencilis elrs ugyanazt jelenti.
Keress: Lineris keress, elnysebb, ha tbb rekordot keresnk egyszerre.
Feldolgozs: Lineris keresssel egy rekordot az llomnyban vagy meg tudok tallni, vagy
nincs benne. Tegyk fel, hogy tbb rekordot keresek. Ilyenkor clszer a keresend rekordok
azonostit ugyangy rendezni, mint a szerilis llomnyt, majd gy keresni, mert gy nem
kell mindig az egsz llomnyt vgignzni, egy keresssel meg tudom mondani, hogy az
llomnyban benne vannak-e.
jraszervezs: ltalnosan nvekv sorrend llomnybl cskken sorrend llomnyt
lehet ltrehozni, vagy fordtva. jraszervezssel oldhat meg a csere, a fizikai trls s a
bvts. Nem a szerkezetet vltoztatom.
Ha egy szekvencilis llomnyt feldarabolok, akkor szintn szekvencilis llomnyokat
kapok. Ez azrt lnyeges, mert ltalban kevs a hely, gy a rsztartomnyokkal knnyebb
dolgozni. Lnyeges lehet az llomnyok mrete a trkapacits miatt. Szekvencilis llomnyt
sok rendszer tud kezelni (nem mindegyik), ezrt alapvet szerepet jtszik a jelenlegi
problmk megoldsnl.. Az ilyen tpus llomnyok az adatbziskezel rendszerek mgtt
is megjelennek.
A tbbi llomnyszerkezet bonyolultabb az eddigieknl. A direkt s random llomnyra
a kulcstranszformcis tblzatoknl megbeszltek vonatkoznak: az elsdleges kulcs s egy
rekord lemezcme kztt ltezik egy lekpezs. Ha az elsdleges kulcs olyan, hogy azonos a
kulcsok s a rekordok szma, akkor direkt llomnyrl beszlnk, ha ez nem teljesl, akkor
random llomnyrl. Itt is rvnyesek a hash fggvnyek, csak itt nem a trba, hanem a
httrtrba kpeznk, ami itt csak lemez lehet.
Direkt llomny
Akkor hozhat ltre, ha a hash fggvny egy-egy rtelm, azaz az azonostk s az
adott azonostj rekord lemezen elfoglalt helye kztt klcsnsen egyrtelm lekpezs
van. Ha csak egyrtelm a lekpezs, akkor random llomny hozhat ltre.
Mveletek
Ltrehozs: Kt lpsben.
1. A lemezen kialaktjuk az llomny res szerkezett, a vzat. A direkt llomny csak
fix rekordformtummal dolgozik, nem lehet blokkolni s szegmentlni, vagyis egy
rekordnak egy blokk felel meg. A szerkezet kialaktsakor teht lefoglalunk adott
szm (amennyi rekordot trolni akarok), azonos mret res trhelyet az sszes
elvileg elfordul lehetsgnek, s sorszmozzuk ket. A rekordazonost elvi
lehetsgei s a gyakorlati lehetsgei krlbell megegyeznek. Megadom a hash
fggvnyt, amely megmondja, hogy az adott azonostj rekordot melyik
rekordhelyen kell elhelyeznem. Lehet, hogy abszolt lemezcmet mond, vagy csak
egy sorszmot, amelybl kiszmthat az abszolt lemezcm.
2. A rekordok tetszleges sorrendben rkeznek. A hash fggvny alapjn
meghatrozzuk, hogy melyik rekordhelyre kerlnek, majd elhelyezzk ket. gy a
ltrehozs vgn lesznek tnyleges rekordokat tartalmaz rekordhelyek (a
bemsolt rekordokkal), s res rekordhelyek is.
Bvts: Direkt mdon nem ltezik. gy lehetsges, hogy eddig res rekordhelyekre
helyeznk megfelel rekordokat. Az res rekordhely jelzse lehet pl. egy specilis
bitkombinci, pldul minden bit 0-val egyenl.

Trls: Az adott rekordhely bitkombincijt a fentebb lert bitkombincira lltom. Ez egy


specilis keverke a fizikai s a logikai trlsnek, hiszen trhely nem szabadul fel, de fizikai
trls, mert a rekordot nem lehet visszanyerni, tartalma elvsz.
Csere: Simn mkdik. Kulcsot nem lehet cserlni.
Feldolgozs: Ez az llomnytpus nyjtja a legsokrtbb s a leggyorsabb feldolgozst. A
feldolgozs alapja a kzvetlen elrs.
A fizikai sorrend szerint sorosan feldolgozhatak, elrhetek a rekordok.
Szekvencilisan, hiszen a sorrend a hash fggvnybl kvetkezik. Itt a logikai s a
fizikai sorrend megegyezik.
Ltezik kzvetlen elrs. Ezrt hoztk ltre ezt az llomnytpust.
Szakaszos szekvencilis elrs. Kzvetlen mdon belpek az llomnyba, rlpek
az llomny egy adott rekordjra, s onnan kezdve szekvencilisan rem el a tbbi
rekordot.
Mindig figyelnem kell, hogy az ppen feldolgozand rekord tnyleges rekord-e.
Keress: Ez a krds a kzvetlen elrs miatt nem igazn merl fel, de ha nagyon akarom,
akkor binris keresst tudok realizlni.
jraszervezs: Csak akkor merl fel, ha megvltozik az llomny szerkezete. Szigor
rtelemben vett jraszervezs nem ltezik.
Csak fix rekordformtumot tud kezelni, nincs blokkols s szegmentls. Nha
elfordulnak olyan rendszerek, amelyek ismerik a blokkolst, s a lefoglalt helyek
darabszma fix.
A rendszereknek s programnyelveknek csak egy rsze ismeri a direkt
llomnyszerkezetet. Van nhny rendszer, amely a relatv llomnyt tudja kezelni, ezek
megkvetelik, hogy a rekordazonost sorszm legyen, megkvetelik az res szerkezet
ltrehozst.
Random
Ha a hash fggvny csak egyrtelm, akkor random llomnyrl beszlnk. Random
llomnynl tlcsorduls van nhny helyen, a szinonmkat is kezelni kell.
Mveletek
Ltrehozs: Els lpsben ltrehozzuk az llomny szerkezett, az res rekordhelyeket, amit
a tlcsordulsi technika szab meg, s vlasztunk egy hash-fggvnyt. A msodik lps a
rekordok elhelyezse. Jn a rekord s a hash fggvny, vagyis a tlcsordulsi technika szerint
bekerl valahova. A ltrehozs vgn lteznek olyan rekordhelyek, amelyek resek s
amelyek tnyleges rekordot tartalmaznak.
Bvts: res rekordhelyre rekord bevitele a rekord kulcsa s a hash fggvnyben.
Trls: Logikai trlsrl beszlhetnk, brmely rekord fellrhat csupa nullval. Lncols
esetn (ld. szinonmk kezelse) kitrlm a lncbl fizikailag is.
Csere: Fix rekordformtumnl nem problma, nem fixnl kln nyg, de megy.
Elrs: Csak a kzvetlen elrsnek azonost szerint van ltjogosultsga a soros elrs
rtelmben. A nem tlcsordult rekordok kzvetlenl elrhetek, a tbbit keresnem kell, de a
szinonmakezelsi technikt jl megvlasztva szinte minden rekord kzvetlenl elrhet.
Rendezs, keress: Nincs.
Feldolgozs: A kzvetlen elrs alapjn.
jraszervezs: Csak logikai trls ltezik, gy a trlt llomnyok ott maradnak. A random
llomny a tlcsordulsi techniktl fggen nagyon rzkeny a tlcsordult rekordra, ami
jelentsen lassthatja az elrst, gy az jraszervezs a tlcsordult rekordok (tbb mint 10%)
s a fizikai trls miatt kvetkezik be. A cl a fizikai trlsek s a tlcsordul rekordok

szmnak minmliss ttele. Egy j hash-fgvny vagy szinonmakezelsi technika


bevezetse a szerkezetet vltoztatja meg.
Hogyan kezeljk a szinonimkat ?
1.
Nylt cmzs
A tlcsordult rekordot ugyanott helyezzk el, mint a nem tlcsordult rekordot.
Elnye, hogy egyformn tudom kezelni a tlcsordult s a nem tlcsordult
rekordokat. Htrnya, azon a helyen, ahonnan tlcsordult a rekord, nincs
informcim arrl, hogy hova kerlt tnylegesen a tlcsordult rekord. Jnnek a
rekordok s elhelyezem ket. Ha adott rekordhelyen mr nincs hely (egy rekord
tlcsordul), akkor elindulok a tlcsorduls helytl az llomny vge fel s
megkeresem az els szabad helyet s ott elhelyezem. A problmk ugyangy
fellpnek mint a tblzatoknl. Minden elemnl meg kell vizsglni, hogy az adott
helyen a helyhez rendelt elem van-e. Egy tlcsordult rekord esetleg olyan rekord
helyt foglalja el, amelyik nem lenne egybknt tlcsordult, de gy azz vlik. Ezt
ki lehet kszblni gy, hogy elsnek a nem tlcsordult rekordokat helyezk el,
majd a tlcsordultakat. A szksgesnl tbb rekordhelyet kell hogy lefoglaljak,
hogy a tlcsordulshoz viszonylag kzel legyen res hely, ez gyorstja a
visszakeresst.
Szerilis keresst kell folytatni, ha az adott rekord helyn nem a keresett rekord
van. Megll, ha a keresett rekordot megtalltuk, vagy az els res hely esetn,
teht nincs kzvetlen elrs.
2.
Lncols
Az llomny szerkezete mr sszetett, jellemzket hordoz: a rekordok
mindegyiknl megjelenik egy mutatmez (szerkezethordoz informci).

Ezt a mutatmezt hasznlom fel a tlcsordult rekord kezelsre, gy a


tlcsorduls helyn van informci arrl, hogy hova lett elhelyezve a tlcsordult
rekord. A nylt cmzst javtja fl keress szempontjbl.
Szabad helyek nyilvntartsa: Az llomnyhoz ltezik egy, az
llomnytl fggetlen tblzat, amely a rekordhelyek foglaltsgt jelzi.
gy elhelyezsnl a kvetkez szabad helyet nem az llomnyban
keressk, hanem a tblzatban, ami lnyegesen gyorsabb, mert a
tblzat a trban van.

Teht a szabadhelyet kikeressk a tblzatbl, ott elhelyezzk a


rekordot, s a cmt elelyezem az eredeti hely mutatjba, azaz a
tlcsordulst az adott helyen jelljk. Ha tbb tlcsordult rekord van,
akkor az elz tlcsordult rekord mutatja kapja meg az j tlcsordult
rekord helyt. Ez a mdszer gyorstja a bvtst s a keresst, a
karbantarts viszont bonyolultabb.
Fggetlen tlcsordulsi terlet alkalmazsa: A tlcsordult rekord
elhelyezse nem ugyanott trtnik, mint a nem tlcsordult rekord,
hanem egy kln lemezterleten. Beszlnk mutatkrl, fggetlen
tlcsordulsi terletrl, illetve elsdleges terletrl, amely a nem
tlcsordult elemeket tartalmazza. A fggetlen tlcsordulsi terlet, ,

3.

ahov az sszes tlcsordult rekord kerl, nem klnbzik az elsdleges


terlettl. Itt ugyangy rekordhelyek vannak. Nyilvntartunk egy
informcit, hogy melyik az els szabad hely ezen a terleten. A
ltrehozs folyamn teht rkeznek a rekordok. Elhelyezzk ket az
elsdleges terletre. Ha egy rekord tlcsordult, akkor a fggetlen
tlcsordulsi terlet els szabad helyre rakjuk, az elsdleges terletnek
a tlcsorduls helyn lv rekordjnak mutatja erre a tlcsordult
rekordra mutat. A tlcsordulsi terletre a rekordok a tlcsorduls
sorrendjben kerlnek be, egyms utn. Ezutn itt lncoljuk ssze az
egy helyrl tlcsordult rekordokat. Itt az elsdleges adatterletnl nem
kell tbletrszt lefoglalni, viszont egy msik trrszre is szksg van.
Osztott szabadhelyek mdszere (cillindertlcsordulsi terlet
alkalmazsa): Csak olyan lemezek esetn alkalmazhat, ahol egy
cilinderen bell tbb sv van. Itt a svok kzl az els nhnyat az
elsdleges adatterletnek, mg a tbbit a tlcsordult adatterletnek
tartjuk fenn. Ennl a techniknl van fejmozgs (a rekordok egy
fejmozgssal elrhetek, ezrt gyors elrs valsthat meg). A
problma a svok szmnak optimlis kivlasztsa, hogy nem lehet
megmondani, hogy hny svra van szksg a tlcsordult rekordok
kezelsre, gy lehet, hogy sok szabad terletet foglal le.
Ezen szitucik problmafggek. A fejlettebb rendszerek az utols kettt
kombinljk, a problma fggvnyben alkalmazhatv vlik.
Vyssotzky mdszer
(Vyssotzky teljesen j szemllet algoritmusokat dolgozott ki) gy kezeljk a
tlcsordult rekordokat, hogy ne legyen tlcsorduls. Vlasszunk ki nhny
klnbz hash fggvnyt, pldul 5-t. Vegyk az els hash fggvnyt s az
alapjn prbljuk elhelyezni a rekordokat. Ez addig megy, amg el nem rkeztnk
egy tlcsordulsig. Ekkor vegyk a msodik hash-fggvnyt s a rekordot
prbljuk meg elhelyezni aszerint. Ha sikerl, akkor azzal menjnk tovbb, ha
nem akkor vegyk a 3.-t, majd ha azzal sem sikerl, akkor gy tovbb. Ha
mindegyikkel tlcsordultt vlna a rekord, akkor helyezzk el a rekordot a nylt
cmzs mdszervel. ltalban 4-5 hash fggvny s kb +10% terlet
alkalmazsval a gyakorlatban nincs tlcsorduls.

A random llomny mindenfle rekordformtumot tud kezelni s tud blokkolni.


A direkt s a random llomnyokat jval kevesebb rendszer kpes kezelni, az opercis
rendszereknek s a programnyelveknek csak a tredke. A problmk ltalban pedig
olyanok, hogy nagy szksg lenne rjuk. Az adatbziskezel rendszerek mgtt majdnem
minden esetben van random llomny. A rendszerekben ltalban beptett hash fv-ek vannak.
Olyan megkts is lehet, hogy pldul a direkt llomnynl a rendszer azt mondja, hogy az a
sorszm. A direkt llomny kevsb jtszik szerepet.
sszetett llomnyszerkezetek
Van egy egyszer szerkezet alapllomny, s erre rakdik r egy msik llomny.
Minden esetben a feldolgozst segtik. Kialaktsuknl kt technika van, lncols s
indexels.
1.
Lncols: Az informcihordoz adatok az llomnyon bell jelennek meg (a
rekord mellett mutatmezk jelennek meg egyirnyba, ktirnyba lncols,
multilista).
2.
Indexels: Az llomnyon kvl jelennek meg az informcihordoz adatok.

Mindkt techniknak az alapja egy egyszer szerkezet llomny, amit


alapllomnynak neveznk. Erre rakdnak r a plusz szerkezethordoz informcik. Az ilyen
llomnyok (az alapllomnyok) ltalban szerilisak vagy szekvencilisak. Az indexels
esetn ltrejn egy n. informcis tbla:

Kt oszlopbl ll s annyi sorbl, ahny rekordja van az elsdleges llomnynak. Az


els oszlopban az alapllomny rekordjainak azonosti vannak nvekv sorrendben. A
msodik oszlop az adott rekord lemezcmeit tartalmazza vagy olyan informci, amibl a
lemezcm egyrtelmen meghatrozhat. Ez az elsdleges kulcsra vonatkoz egyszint, teljes
indexels. Erre azrt van szksg, hogy a szerilis, vagy szekvencilis llomnyra kzvetlen
elrst alkalmazhassunk. Az indextblban a kulcs szerint keresek, gy rgtn tudom a helyt.
Keresskor az indextblban, a trban binrisan keresek. Az indextblban a kulcs szerint
keresek, gy rgtn tudom a helyt. Ha benne van a keresett elem kulcsa, akkor a lemezcm
alapjn kzvetlenl meg tudom fogni.
Tbbszint indexels: a tbla egy szekvencilis llomny, indexelhet, teht e fl
felpthetek egy indextblt. A 2. s annl magasabb szinteken nem teljes indexels van.
Ennek a mdszernek nagymret llomnynl van rtelme, elsegti a hatkonyabb keresst.
Nem teljes indexels: az indextblban nem az sszes, csak bizonyos rekordazonostkat
tntetek fel. pl: minden 20.-t. Clja az indextbla mretnek cskkentse. Ennek a
mdszernek azrt van jelentsge, mert ha keresnk egy rekordot, akkor az indextbla alapjn
be tudjuk hatrolni az llomny egy rszt, hogy melyik intervallumban keressk. Az adott
intervallumon pedig mr lehet szekvencilis keresst alkalmazni.
Hardveres indexels alkalmazsa: Pl. nem minden azonostt tntetem fel, csak a svok utols
rekordjainak azonostjt. gy a keress egy svra cskken, a svon bell pedig sorosan
keresek. Ennek igen gyakori alkalmazsa van.
Msodlagos kulcsra pl indexels: Az indextblt felpthetem gy, hogy nem elsdleges,
hanem msodlagos kulcs szerint indexelek. gy az sszes olyan rekord cme is szerepel a 2.
oszlopban, annyi, amennyi rendelkezik az adott msodlagos kulcsrtkkel. Itt csak teljes
indexelsnek van rtelme az els szinten.
Terminolgia: Az elsdleges kulcsra felptett indextblkat s a (szerilis, vagy
szekvencilis) alapllomnyt gy hvjuk, hogy indexelt (szerilis, vagy szekvencilis)
llomny. A msodlagos kulcsra felptett indextbla s llomny egytt az invertlt llomny.
Elsdleges kulcsra pl sszetett llomnyszerkezetek
Szerilis alapllomny
1. Lncolt szerilis llomny: Adva van a szerilis llomny. Erre ptnk r egy
lncszerkezetet, amely a szerilis llomny szekvencilis feldolgozst segti. Ezt
gy valstjuk meg, hogy minden rekord mell az elsdleges llomnyban
beptnk egy mutatmezt, melyet arra hasznlunk, hogy nvekv vagy
cskken azonost sorrend szerint fzzk fel a rekordokat. Egyirny lncolt
listt hozunk ltre, a fej a legkisebb azonostj rekordra fog mutatni.

Egyestjk a szerilis llomny knny karbantarthatsgt a szekvencilis


llomny knny feldolgozsval.
Mveletek
Ltrehozs: Kt lpsben valsthat meg.
1.
Felviszk a rekordokat, azaz ltrehozzuk a szerilis alapllomnyt
(mutatmezkkel).
2.
Az llomnyra rillesztem az adatszerkezetet: megcsinljuk a
lncolst, kitltjk a mutatmezket (lemezcmekkel). Itt
lemezcmeket fznk ssze, gy ltezik egy fizikai sorrend, ahogy a
rekordok bekerlnek az llomnyba, s ltezik egy logikai sorrend,
amelyet a lncolssal alaktunk ki.
Bvts: Szerilis llomny bvtse, az alapllomny jellemzi miatt az
llomny vgre bvthetnk, a fizikai sorrend vltozatlan. Az j rekordot be kell
illeszteni a lncba, ez egy rendezett egyirnyba lncolt lista bvtse.
Trls: Az alapllomnyban csak logikai trls van. A logikai trlst
kihasznlhatom a lncban is, viszont innen fizikailag is trlhetnk.
Csere: Az alapllomnynl megbeszltek igazak itt is, azzal a kiktssel, hogy
azonostt nem lehet fellrni. Ennek megoldst csak a rekord trlsvel s
jrarsval lehet megoldani. A csere teht nem rinti a lncszerkezetet, mert
azonostt nem cserlek.
Elrs: Beszlhetnk soros elrsrl (teljes keresssel), amely a fizikai sorrend
szerint trtnik, s szekvencilis elrsrl, amit a logikai sorrend (a lncszerkezet)
hatroz meg (lineris keresssel). Ez a korbbi adatbziskezel rendszerek
kedvenc alkalmazsi technikja volt. Egyestem a szerilis llomny elnyeit a
szekvencilisval. A karbantarts egyszer.
Feldolgozs: Ha az egszet akarom, akkor vgigmegyek az llomnyon, ha csak
rszeket, akkor a lncon egy lineris keresssel knny a feldolgozand elemek
megkeresse.
jraszervezs: Akkor kell alkalmazni, amikor tl sok az alapllomnyban a
logikailag trlt rekord, vagy ellenkez irny rendezettsg szerint akarom
felfzni az llomny rekordjait.
2.

Indexelt (szerilis llomny): A szerilis llomny mell, tle fggetlenl felptek


egy indexszerkezetet (kzvetlen elrsi lehetsget) az elsdleges kulcsra. Ez az
egyik leggyakoribb, hatkony llomnyszerkezet. Az elsdleges szinten itt csak
teljes indexels jhet szba, de egyarnt lehet egy- vagy tbbszint indexelst is
alkalmazni. Tbbszintes indexels esetn sokkal bonyolultabb a kezels.
Mveletek
Ltrehozs: Kt lpsben trtnik.
1.
Ltrehozzk a szerilis alapllomnyt.
2.
Rrakjk az indexllomnyt.
Bvts: Fizikailag az alapllomny vgre bvthetnk, a szerilis
llomnyszerkezet tulajdonsga szerint. Brmely bvt rekord esetn aktualizlni
kell az indextblt.
1. Egyszint indexels esetn:
a)
Ha az indextbla befr a trba, a bvts index szint kezelse
egyszer, nem jelent problmt, mert egy rendezett tblzatba
val beszrst kell elvgezni.

b)

Ha nem fr el a trba, akkor az indextbla, mint szekvencilis


llomny bvtst kell alkalmazni. Csak jraszervezssel
trtnhet.
2. A tbbszint indexels esetn bucket technikt alkalmazunk, az sszes
indexszintet t kell szervezni. A bucketek kialaktsnl a szekvencilis
llomnyt tbb szekvencilis llomnyra osztunk. Az indextblt is
azonos mret rszekre osztjk fel, ezek a bucket-ek (pl: 50-50). A
msodik szint ezeket a bucketeket indexeli. Az els szinten nem tltjk
ki ezeket az indexeket, lesznek bejegyzsek s res helyek. Innentl
kedve a bucketek tszervezsrl lesz sz.

Trls: Alapllomny szinten csak logikai trls van. A felsbb szinteken, az


indextblban fizikai trlst is alkalmazok, gy hogy trlm a megfelel rekordot.
Az teht a tovbbi feldolgozsban nem vesz rszt.
Csere: Nem problma, mert nem rinti az indexszerkezetet, csak az
alapllomnyt. Csak olyan csere vgezhet el, amely nem rinti az indextblt,
egybknt a lncolsnl megbeszltek igazak.
Elrs:
a)
soros: A fizikai, avagy az alapllomnybeli, bekerlsi sorrend szerint.
b)
szekvencilis: Ha vgigmegyek az indextbln, minden egyes index
tagot feldolgozok. A logikai sorrend szerinti elrs.
c)
kzvetlen: Az indextblban keresek, s csak a keresett rekordot
emelem ki.
Feldolgozs: valamely elrs segtsgvel.
jraszervezs: Akkor kell, ha sok a logikailag trlt rekord s fizikailag trlni
akarok, vagy meg akarom vltoztatni az indexszerkezetet, pl: egyszintrl
tbbszintre. Tbbszint indexels esetn az indexszerkezet vlozatlan.
Minden relcis adatbziskezel alapllomnya, ahol ltalban csak egyszint indexels
van megvalstva.
Szekvencilis alapllomny
Ez azt jelenti, hogy elsdleges kulcs szerint rendezett, gy nincs rtelme, hogy arra
lncszerkezetet ptsnk, de indexelhet, rrakunk egy kzvetlen elrsi lehetsget. Nagyon
sok formja ltezik. Krdsek:

Milyen a struktra, amit rrakok (egyszint vagy tbbszint)?

Indexelsi krdsek

Hova kerlnek az j rekordok? (A szekvencilis sorrendet meg kell tartani.)


A szekvencilis alapllomnynl a kialaktskor a logikai s a fizikai sorrend megegyezik,
ksbb nem.
1. Indexelt (szekvencilis llomny), hardverindexels

A kzvetlen elrs megteremtse a cl a szekvencilis llomnynl. Klnbz


krdsek merlnek fel a mveleteknl:
Ltrehozs: A fizikai s logikai sorrend megegyezik, gy egy lpsben kialakthat az
indexllomny. Az alapllomnnyal egyidben jn ltre az indextbla. A krds az,
hogy milyen indexszerkezet alkalmazhat: teljes vagy nem teljes, egyszint vagy
tbbszint. Alapvet technika a hardverindexels. A sorrend s az indexllomny
sorrendje megegyezik. A sorrend s az indexllomny sorrendje megegyezik. Itt lehet
elsdleges szinten is nem teljes indexels. Milyen bvtsi technikt alkalmazzunk?
Problma a bvts megvalstsa, hiszen az alapllomnyom rendezett.
Bvts:
a)
jraszervezssel bvtek
A szekvencilis alapllomny miatt van erre szksg. Ez csak akkor
alkalmazhat, ha igen ritkn bvtek, hiszen az tszervezs viszonylag sok
idbe kerl. Elnye, hogy nem kell plusz informci a mvelet
vgrehajtshoz, nem kell hozznylni sem az indextblhoz, sem az
alapllomnyhoz. A gyakorlatban szinte soha nem fordul el.
b)
Fggetlen tlcsordulsi terlet alkalmazsa

Lncols A random llomnynl megbeszltek rvnyesek ide is. A


bvt rekordok kezelst fggetlen tlcsordul rekordokkal oldom
meg, az alapllomny vltozatlan. Elvlik a logikai s a fizikai
sorrend, a bvtst mint tlcsordulsnak a kezelst valstjk meg.
Ltrehozskor a fizikai s a logikai sorrend megegyezik. Jn az els
tlcsordult elem, s az a fggetlen tlcsordulsi terletre kerl. Azt,
hogy honnan csordult tl, lncolssal valstjk meg.

Minden rekord mellett van egy mutatmez, a tlcsordulsi terlet


rekordjainak is, amely segtsgvel a logikai sorrendet felptjk. Itt a
bvtend rekordot kezeljk tlcsordult rekordknt, s rkezsi
sorrendben az a fggetlen tlcsordulsi terlet kvetkez res helyre
kerl. Ezutn a lncolst gy kell elvgezni, hogy a logikai sorrendet
tkrzze. Elvlik a fizikai s a logikai sorrend, de a lnc segtsgvel
rizzk meg a szekvencialitst. Ez a technika nem rinti az
indexszerkezetet, kln kezeljk a kt dolgot. Az j rekordhoz tartoz
bejegyzs, a bvtrekord jellemzi az indextblba kerlnek be a
megfelel helyre. A teljes indexels kzvetlen elrst nyjt, nem teljes
indexels kvzi kzvetlen elrst. A lncols adja a szekvencilis
elrs lehetsgt. A bvts nem egyszer, lass. A kzvetlen elrs
adott, a szekvencilis elrs romlik.
Csoportok Csoportosts az alapllomny rekordjainl. Nem teljes
indexelst alkalmazunk, hanem az elsdleges llomny rekordjait
csoportokra osztom s a kapott csoportokat (svot) indexelem az
elsdleges szinten (pl: kerljn minden csoportbl az utols elem
elsdleges kulcsa az indextblba.). Mivel a sv krbefordul, a kvzi
kzvetlen elrs nem romolhat. Ezt a technikt alkalmazzk ltalban,
amikor hardveres indexelst vgznk. Egy sv az alapegysg, teht az
egy svon elhelyezked rekordok alkotnak egy csoportot. gy itt a
svokat indexelem, a svon utolsnak elhelyezked rekord kulcsa

kerl az indextblba. A msodik szinten rtelemszeren a cilindert


indexelem. Ezzel a technikval egy svot rhetek el kzvetlenl.
Amikor kialaktom a szerkezetet, szekvencilis llomnyt alaktok
ki, pl. kijellk egy lemezterletet, s a svokat nvekvleg feltltm
rekordokkal. Tlcsordult rekordnak nem a bvtend rekordot
tekintem, hanem a kvetkez mdon jrok el: A bvt rekordot a
megfelel csoporton bell beillesztem oda, ahova a rendezettsg
megkvnja. Hogy ezt megtehessem, az egy csoporton belli sszes
mgtte lv rekordot el kell cssztatni jobbra, gy megmarad a
csoporton belli logikai s a fizikai sorrend egysge. Ha nincs hely,
akkor az eddigi utols rekord lesz tlcsordult, teht ez kerl a
fggetlen tlcsordulsi terletre, ahol a rekordok a tlcsorduls
sorrendje szerint vannak elhelyezve. Adott csoportbl tlcsordult
rekordot mindig a csoportjhoz tartoz lnc elejre helyezem a logikai
sorrend megtartsa miatt, mert a lncban a szekvencialitst meg kell
rizni.
Az elsdleges llomnyban nincs lncols, nincs mutatmez,
hanem a tlcsorduls kezelshez szksges plusz informcit az
elsdleges indextblba rom, amelynek ngy bejegyzse lesz a
korbbi kett helyett. A csoportbl mindig a legutols csordul tl, ez
kerl be az indextblba. Ott fel kell feltntetnem a rekord cmt, az
adott csoport kialaktskori maximlis kulcsrtkt (ez soha nem
vltozik meg!), az aktulis maximlis kulcsrtket, s az adott
csoportbl elsnek tlcsordult rekord helyt.. Ha a kt kulcs eltr,
akkor abban a csoportban volt tlcsorduls, ellenkez esetben nem
volt. Tovbb a tblban meg kell adni mg a sv cmt (a csoport
kezdcmt), s azt, hogy az adott csoport tlcsordulsi lnca hol
kezddik.
Plda A 636 svon a kezdeti maximlis kulcs rtke 335, az
aktulis maximlis kulcsrtk 300. A tlcsordulsi lnc a 758 sv
els rekordjnl kezddik. Bvteni akarok a 299 kulcs
rekorddal. A kvetkez kppen jrunk el:
A 299 kulcs rekord helye a 636 svon van, behelyezzk.
A 300 kulcs rekord tlcsordul, elhelyezzk a fggetlen
tlcsordulsi terleten a kvetkez szabad helyre.
Az indexbejegyzs tlcsordult indext rlltja, s a 758-ra fog
mutatni, az aktulis kulcs 299 lesz.
A ltrehozskori maximlis kulcsok s a csoportok helye nem
vltozik. Ha pl: 303 rtk rekorddal bvtnk, akkor az rgtn
tlcsordultt vlik, s a lncot bvteni kell, de az alapllomnyt
nem vltozik.
Osztott szabad helyek mdszere (cillinder-tlcsordulsi terlet
alkalmazsa) A tlcsordult rekordok adott cillinderre kerlnek,
hasznlhatok cillinder s fggetlen tlcsordulsi terletet egyszerre.
Csak olyan lemezek esetn alkalmazhat, ahol egy cillinderen bell
tbb sv van. A tlcsordulsi terlet helye ms, a cillinder svjai kzl
nhnyat az elsdleges adatterletnek, mg msokat a tlcsordult
adatterletnek tartjuk fenn. Itt van fejmozgs, a rekordok egy
fejmozgssal elrhetek, gy ezzel a mdszerrel gyors elrs
valsthat meg. Igazak ide is a fentebb elmondottak (ugyangy

trtnik minden, ugyangy lncolok, mint a fenti esetben).


Problma lehet a svok szmnak optimlis kivlasztsa, mert nem
lehet megmondani, hogy hny svra van szksg a tlcsordult
rekordok kezelsre, gy lehet, hogy sok szabadterlet lesz lefoglalva.
A szitucik problmafggek. A fejlettebb rendszerek az elz kt
mdszert kombinljk, cillinder s fggetlen tlcsordulsi terlet
mdszert egyszerre hasznljk, a problma fggvnyben
alkalmazhatv vlnak.

Mutattmb Van tlcsordulsi terlet, amely vagy fggetlen, vagy


cillinder tlcsordulsi terlet. Ekkor az alapllomny rekordjai
vltozatlanok s a tlcsordult rekordok is. A tlcsordulst az
indextbln kezelem, a tlcsordult rekordokrl minden informci ott
van. Ekkor az elsdleges indextbla (teljes vagy nem teljes
indexels) a kvetkezt csinlja:

teljes indexels: ekkor a bvt rekordok csordulnak tl

nem teljes indexels: a csoport utols rekordja csordul tl


Az indextblban jelzem, hogy a rekord hova csordult tl (itt
szerepel a rekord kulcsa, cme, s a tlcsordult rekordok cmei), gy,
hogy a bejegyzsek sorrendeje jelenti a szekvencialitst. Az indextbla
egy sorban brmennyi tlcsordult rekord lehet, a mrete a
bejegyzsek szmval egytt vltozik. Ez egy viszonylag ritkn
alkalmazott megolds.
Trls: Az indexelt szekvencilis llomnynl az alapllomny miatt ltalban logikai
trls van. Lehetne fizikai trls is, de nem minden technika teszi lehetv (ld.
csoportosts), ezrt ltalban nem realizljk..
Csere: Nem problma, mert nem rinti az indexszerkezetet.
Elrs: Fennmarad a szekvencilis elrs, amikor csak az alapllomnyt hasznlom.
Van kzvetlen elrs is, ami a bvtsi technikk miatt egy igen tg fogalom, mert a
tlcsordult rekordok miatt nehz ilyenrl beszlni. A kzvetlen technikk egy rsznl
kvzi kzvetlen. Soros elrs nincs.
Feldolgozs: Olyan szituciban alkalmazzk, ahol az llomny mdostsa viszonylag
kevs. Bizonyos esetekben szekvencilisan, bizonyos esetekben kzvetlenl kell elrni
az llomnyt. A kzvetlen elrs clja az, hogy az llomnyt ne szekvencilisan
dolgozzuk fel.
jraszervezs: Lnyeges, akkor alkalmazzk, ha:
sok a tlcsordlt rekord (10%), mert lnyegesen lelasstja a munkt
fizikai trls esetn (alapllomnyt s az indexszerkezetet is)
indexszerkezet megvltoztatsa esetn
Direkt, random llomny
Az egyszer llomnyszerkezet az elsdleges kulcsra pl, kzvetlen elrs van, ezrt
sszetett llomny szerkesztse nem jhet szba.
Msodlagos kulcsra pl sszetett llomnyszerkezetek
Az egyszer llomnyszerkezetek a msodlagos kulcsra pl llomnyszerkezeteket
nem segtik semmilyen mdon, minden rekordot kln meg kell fogni. Mind a ngyfle
llomny lehet alapllomny. A msodlagos kulcsra pl adatszerkezetek segtsre az
asszociatv adatszerkezetek szolglnak.
Krdsek:

Egyszerre egy vagy tbb msodlagos kulcsot tudnak-e kezelni?


Ha tbb msodlagos kulcsot tud kezelni, akkor tbb szempont keresst meg
tudnak-e valstani?

1. Lncolsi technika
Ez a multilista llomnyszerkezet. A rekordok mellett megjelenik egy
mutatmez. Kivlasztom azt a msodlagos kulcsot, amire pteni akarok.

Van egy alapllomny, valamilyen szerkezettel, s van a rekoroknak egy olyan


mezje, amely alapjn fel akarom dolgozni az llomnyt. Hogy ezt megtehessem,
minden rekordnak rendelkeznie kell ezzel a mezvel. gy olyan krdsekre is
vlaszolhatunk, hogy pl: a rekordok kztt hny van, amelyikben szerepel a lila szn?
Minden rekordnak van egy mutatmezje, mely segtsgvel az azonos msodlagos
kulcsrtk rekordokat egy lncba fzzk. Az alapllomnyra olyan szerkezetet hzok
r, amely annyi rszlncbl ll, ahny klnbz msodlagos kulcsrtk szerepel az
llomnyban. Egy rszlnc egy asszociatv csoport, minden rszlncnak van feje.
Minden egyes rekord pontosan egy rszlncban szerepel, s annyi rszlnc van, ahny
msodlagos kulcsrtk elfordul az alapllomnyban (a msodlagos kulcs rtke
brmennyi rekordban lehet azonos). A listafejeket az llomnytl kln adom meg:
felpl egy olyan tblzat, amely a rszlistafejeket tartalmazza.

A tblzatnak 3 oszlopa, s annyi sora van, amennyi klnbz msodlagos


kulcsrtk elfordul az llomnyban.

1.oszlop: A listafejek a msodlagos kulcsrtkkel vannak azonostva. A


msodlagos kulcsrtkek az elforduls sorrendjben vagy a msodlagos
kulcs szerint kerlnek be a tblzatba.

2.oszlop: Az adott rszlnc els elemnek a cmt adja meg az llomnyon


bell

3.oszlop: Kiegszt informci, az adott rszlnchoz tartoz rekordok


szma. A feldolgozsnl fontos.
Garantltan a trban kezelhet. A tblzat vizsglatval (anlkl, hogy az
llomnyhoz hozznylnk) megmondhatom:

Hny darab msodlagos kulcsrtkfordul el?

Melyek ezek?

Hny olyan rekord van, amelyik ezzel a msodlagos kulcsrtkkel


rendelkezik?

Van-e egy adott msodlagos kulcsrtkkel rendelkez rekord?


Ha a tblzatban egy adott msodlagos kulcsrtk rekordot keresek, akkor a
tblzatban meg kell keresni a hozz tartoz sort. Ha megtalltam, az els elfordul
rekordot nzem, s esetleg tovbblpek eggyel, csak azokig, amelyekre szksg van.
Mveletek

Ltrehozs: (ld. feljebb) Els lpsben ltrehozom az alapllomnyt, majd felptem


erre a lncszerkezetet.
Bvts: Az elsdleges llomny szablyai mondjk meg, hogy fizikailag hova kerl a
bvtend rekord. A bvt rekordot be kell illesztenem a megfelel lncba. pl: jn egy
fehr. Elrakjuk valahova, majd beillesztjk.
1.
Olyan msodlagos kulcsrtkkel bvtek, amely mr elfordult egyszer. A
tblzat mrete nem vtozik, az j rekordot be kell illeszteni a lncba.

Az eddigi lnc elejre illesztem be az j elemet: egyszer, mert a


tblbl mindig meg tudom mondani, hogy hol van az els eleme a
rszlncnak. Ekkor fizikai s logikai sorrend eltr, a lnc nem azt a
fizikai sorrendet tkrzi, ami az llomnyban van, gy igen nagy a
fejmozgs, lass a feldolgozs. A bvt rekord helye valsznleg
messze van az eredeti fejtl.

A lnc vgre illesztem be az j elemet: vgig kell menni a lncon,


hogy megkeressk a legutols elemt, de kisebb a tvolsg a lnc
elemei kztt. A feldolgozs gyorsul, a karbantarts lassul.

Szoks egy negyedik oszlopot bevezetni, ahol a lnc utols elemnek


cmt troljuk. A bejegyzsek vltoznak, a sorok szma nem.
2.
Olyan szituci is elfordulhat, hogy eddig mg nem szerepl msodlagos
kulcsrtk rekorddal akarok bvteni. Ekkor a tblzatba flveszem ezt a
msodlagos elemet s jellm az egyelem lncot. gy a tblzat is bvlhet
egy sorral. Ebbe a sorba az j msodlagos kulcsrtk kerl, ltrejn egy
egyelem rszlnc az llomnyon bell.
Trls: Logikai trls van fizikai szinten (az elsdleges llomnyban). Multilista
szinten hasznlhat a logikai trls s realizlhat a fizikai trls is, de ekkor mdosul a
harmadik oszlop, s esetleg a msodik oszlop is. Ekkor a rszlnc hossza cskken, els
elem trlsnl mdosul az els elem bejegyzse is.
Specilis eset, amikor egyelem rszlncbl trlk egy elemet. Ilyenkor az adott
msodlagos kulcs eltnik a tblzatbl s a multilista llomnybl, a tblzat adott sort
trlni kell.
Csere: Ha nem msodlagos kulcsot cserlek, nincs gond, az elsdleges llomny
szintjn megll a vltoztats, nem jn fl a multilista szintre. Ha msodlagos kulcsot
cserlek, akkor az adott rekord az egyik rszlncbl tkerl egy msik rszlncba. Ezt
szablyos trlssel s bvtssel lehet megvalstani.
Elrs: Az alapllomny s a multilista-llomny elrsi lehetsgei egytt. A
multilista-llomny elrsi lehetsgei: egy-egy csoport kzvetlen elrse, a csoportban
szekvencilis elrst tesz lehetv.
jraszervezs: Az elsdleges llomny szerint jraszervezni az ottaniknak
megfelelen kell. Az egsz multilistt jraszervezni akkor kell, ha tl sok a bvt
rekord.
Feldolgozs: A msodlagos kulcsrtk szma kevs, ez a tblzat befr a trba. Pl:
lakhely, a msodlagos kulcs. A tblzat alapjn megmondhat:

Hny klnbz msodlagos kulcsrtk van ?

Egy adott msodlagos kulcsrtkhez hny rekord van ?

Egy adott msodlagos kulcs rtke elfordul-e ?

Hol vannak azok a rekordok, amelyeknek a msodlagos kulcs rtke ?

Ezt az llomnyszerkezetet brmely msodlagos kulcs mezjre fel tudom pteni, de


akr egyszerre az sszes mezre is. Ekkor annyi mutat s annyi tblzat kell, amennyi
msodlagos kulcs alapjn lncolok.
Hibja, hogy nmagban csak egy msodlagos kulcs kezelst segti, pedig a
msodlagos kulcsrtkeknl ltalban a kombinlt lekrdezsek a jellemzek.
Hny 180 cm magas, kk szem, felsfok llami angol nyelv vizsgval rendelkez
ember van az egyetemen? Ezen felsorolsban lehet vagy s s kapcsolat is. A multilista a
vagy kapcsolatot segti. Itt az sszes kkszem embert, az sszes 180 cm magas embert s
az sszes angol felsfokval rendelkez embert adni kell. Lehet, hogy valaki tbbszr
szerepel, de mindenki benne lesz a halmazban. Itt teht hrom tblzatot kell hasznlni.
VAGY-kapcsolat: A tblzatbl kikeresem a lncokat, ezek adjk az sszes lehetsget,
legfeljebb tbbszrzik. Az sszes engem rtint rekord benne van.
S-kapcsolat: Nem tmogatja. Ekkor kivlasztom az s-kapcsolatban ll rszlncokat,
majd ezek kzl a legrvidebbet, s ezen vgigmenve megvizsglom a tbbi tulajdonsg
teljeslst.
A multilista llomnyszerkezetet meg lehet valstani korltozott hossz lnccal. Ezt a
hardverhez kti, pl. csak olyan rszlncokat alaktok ki, amelyek az egy rszlncokon
elhelyezked rekordokat lncoljk ssze. gy tbb rszlnc alakul ki, de egy rszlnc egyetlen
fejmozgssal elrhet, a feldolgozs knnyebb vlik.
Lehet keverni az indexelsi s a lncolsi technikt gy, hogy a lncolst nem az
alapllomnyra ptem r, hanem egy indextblt ptek fel az elsdleges kulcsra, s a
lncolst az indextblra viszem t. Teljes indexls van, s a tblba beviszem a msodlagos
kulcsokra vonatkoz lncolst. Ezt akrhny msodlagos kulcsra megtehetem, egy abszolt
hibrid megoldst kapok. A tbla szerkezete s a karbantarts bonyolultabb, de a feldolgozs
knny. A listafejeknek meg kell lennik.
elsdleges kulcs msodlagos kulcs
mutat

Invertlt llomny
A defincinak megfelel megvalstsa: a tetszleges, egyszer alapllomny mell
felpl a msodlagos kulcsra egy teljes indextbla. Az indextbla els oszlopban vannak a
msodlagos kulcsrtkek. Az indextblnak annyi sora van, ahny klnbz msodlagos
kulcsrtk elfordul az alapllomnyban, s a 2. oszlopban annyi bejegyzs, ahny rekord
rendelkezik az adott sorbeli msodlagos kulcsrtkkel.
Vltoz formtum szekvencilis llomny. Tovbbi indexek plhetnek r.
Mveletei
Ltrehozs:
1.
Indextblzat ltrehozsa.
2.
Bvtnk j rekordokkal, az llomny dnti el, hogy az fizikailag hova kerl.
a)
Ha a rekord j msodlagos kulcsrtket hoz be, akkor az indextbla a
rendezettsgnek megfelelen bvl j sorral, az els oszlopba kerl az j
rekord msodlagos kulcsnak rtke. A msodik oszlopnak az j rekord
cme lesz az eleme.
b)
A bvt rekord mr szerepel az llomnyban, ekkor a msodik oszlopba
kerl az j rekord cme. A cmek sorrendje lnyegtelen.
Trls: Az alapllomnyban logikai trls, az indextblban fizikai trls realizlhat: az
adott rekord cmt kiemelem az indextblbl. Ha csak ez eleme volt a sornak a trls eltt,

akkor a teljes sort trlni kell az indextblbl.


Csere: Lehet, hogy nem rinti az indexszerkezetet. Msodlagos kulcsrtket cserlni
szablyos trls s bvts tjn szabad, ekkor az egyik sorbl egy msik sorba kerl t a
rekord.
Elrs: Msodlagos kulcs szerinti kzvetlen elrs van. Ha egy adott msodlagos kulcsrtkre
vagyunk kvncsiak, az indextblban kell keresni. Ugyangy, mint a multilista
llomnyszerezet, ez sem tmogatja a tbb msodlagos kulcs szerinti keresst.
jraszervezs: Az elsdleges llomny jraszervezsvel az indexeinket jra kell szervezni.
Az indexnk nmagban nem indokolja az jraszervezst.
Az invertlt llomny bitmtrixszal trtn megvalstsa
A bitmtrixnak annyi oszlopa van , ahny rekord van az alapllomnyban. Az
oszlopokat az elsdleges llomny rekordjai cmvel azonostjuk (vagy az ennek
ellltshoz szksges informcival). Az oszlopok sorrendje igazbl lnyegtelen, csak az
egyrtelmsg a fontos.
Annyi sora van, ahny klnbz msodlagos kulcsrtk elfordul. A sorokat ezzel a
msodlagos kulcsrtkkel azonostjuk, a msodlagos kulcsrtkek sorrendje nem lnyeges.
Feltltsnl 1 kerl oda, ahol az illet rekord tartalmazza az adott msodlagos kulcsot,
a tbbi helyre 0.
0
0
1

Budapest
Debrecen
zd

1
0
0

0
0
1

0
0
0

1
0
0

1
0
0

Egy sorban akrny egyes lehet, de egy oszlopban csak egy.


Mveletek
Bvts: Az, hogy a rekord hova kerl, az elsdleges llomny dnti el. A mtrixot is bvteni
kell egy j oszloppal. Mindegy, hogy az j oszopot hol szerepeltetem. Egy bvt rekord
hozhat j msodlagos kulcsrtket is, ekkor a tblzat bvl egy, az j msodlagos
kulcsrtket tartalmaz sorral. Ha nem hoz j msodlagos kulcsrtket a bvt rekord, nem
kerl j sor a mtrixba.
Trls: Vagy figyelembe veszem az elsdleges llomny fizikai trlst, vagy logikai trls
van. A trlt rekord ltal meghatrozott oszlopot kell eltntetni a mtrixbl. Lehet, hogy olyan
msodlagos kulcsrtket trlk ki, amely egyedi volt. Ekkor az adott sor csupa nulla lesz, a
sort trlni kell.
Csere: Vagy rint msodlagos kulcsrtket s befolysolja a mtrixot, vagy sem. Szablyos
trlsnek s bvtsnek felel meg. Az oszlopok szma nem vltozik, a sorok szma vagy nem
vltozik, vagy cskken, vagy n, vagy cskken s n (a sorok darabszma marad, de a sorok
nem ugyanazok).
Feldolgozs: A feldolgozshoz szksges informci kiolvashat a mtrixbl. Ha egy adott
msodlagos kulcsrtkkel rendelkez rekordhoz akarok hozzferni, kpezek egy
oszlopvektort (v, maszkvektor), amely elemeinek a szma egyenl a msodlagos kulcsrtkek
szmval. A v azon elemeibe, amire kvncsi vagyok, 1-t rok, mshova 0-t. A v-t, mint
maszkot vgigviszem a mtrixon (rendre az oszlopokra lltom) s vizsglom: ha az adott
helyen egyes van, akkor a rekord rdekel, klnben nem. A hozzfrs gy kzvetlen
hozzfrs lesz.
Keress: Egyidejleg brmennyi msodlagos kulcsra felpthet ilyen mtrix, csak a mtrix
sorainak szma vltozik, ezrt egyidejleg tbb msodlagos kulcsra is tudok keresni gy,

hogy a maszkvektor megfelel rtkeit egyesre lltom. A kulcsok kztt a logikai kapcsolat
lehet VAGY vagy S kapcsolat.
jraszervezs: A bitmtrix nmagban jraszervezst nem ignyel, csak az alapllomny.
A bitmtrix knnyen kezelhet, nagy llomny esetn is kicsi (ritka mtrix), knny
implementlni s gyors. A mveletvgzs logikai, ezrt nagyon gyors. Egyszerre tbb
msodlagos kulcsrtkkel rendelkez rekordhoz tudok hozzfrni (vagy-szer kapcsolat is
ltezik). Igazi elnye az, hogy akrhny msodlagos kulcsrtkre fel tudom pteni,
klnbz msodlagos kulcsokat tudok kezelni. A klnbz msodlagos kulcsrtkek szma
jval kisebb, mint a rekordok szma. A szerilis llomnyra rrakhat egy kzvetlen elrs.
Ezt egyetlen programozsi nyelv sem kezeli explicit mdon (a PL/1 tudja kezelni).
VSAM
Az IBM-nl a 60-as vekben alaktottk ki. Komplex llomnyszerkezet, az sszes
relcis adatbziskezel mgtt megjelenik. A PL/1 is ismeri.
Olyan llomnyszerkezetet, mely tbb llomnyszerkezetet egyest magba, s ahol
nem kell foglalkozni a fizikai szerkezettel, csak a logikaival. Egyesti:

a szerilis llomny kezelsi jellemzit,

a szekvencilis llomny kezelsi jellemzit,

a direkt llomny kezelsi jellemzit.


Lehet indexelni a szerilis s a szekvencilis llomnyt, s tud msodlagos kulcsokat
kezelni. sszefoglalva, a VSAM llomnyszerkezet tudja kezelni a szerilis, a direkt, az
indexelt s az invertlt llomnyszerkezetet.
Lnyege, hogy a rekordok elhelyezse gynevezett kontrollintervallumokban trtnik. A
kontrollintervallum egy logikai trolterlet, fggetlen a fizikai trolstl. Az intervallumok
mrett az llomny kialaktja adja meg (byte-ban), a fizikai trolterletre val lekpezst a
VSAM rendszer rendezi le, s ezrt ezt az llomnyt knny ms httrtrra tvinni. A
rekordok elhelyezse az azonos mret kontrollintervallumokban folytonosan trtnik.
Minden egyes kontrollintervallum vgn rendszerinformcik vannak, amelyekhez a
felhasznl nem frhet hozz. A kontrollintervallumok gynevezett kontrollterletre
szervezdnek, a VSAM llomny kontrollterletek egyttese. Ezek szintn azonos mretek,
s a programoz szabja meg, hogy a kontrollterlet hny kontrollintervallumot tartalmaz.
Az llomny kialaktsakor krhet, hogy minden egyes kontrollintervallum terletnek
valahny szzalka res legyen. Megadhat az is, hogy a kontrollterleteten n darab
kontrollintervallum maradjon resen.
Logikailag a kontrollterletek sorba llthatk:

az egy kontrollterleten belli kontrollintervallumok sorrendje adott,

az egy kontrollintervallumon belli rekordok sorrendje adott.


Ezalapjn a rekordoknak ltezik logikai sorrendje. Mindez lemezen trtnik, a
kontrollintervallumoknak s a kontrollterleteknek rendelkeznek kezdcmmel. Szmunkra ez
azt jelenti, hogy brmely byte-nak van relatv cme (a byte-ok meg vannak sorszmozva 0-tl
kezdden), minden rekordhoz hozzrendelem az els byte-jnak a sorszmt.
A nem teljes, tbbszint indexszerkezetet a kontrollterletekre pti fel. Elsdleges
szinten a kontrollintervallumokat indexeli. Ezek fl kerl egy egyszint indexrekord,
amelynek annyi bejegyzse lesz, ahny kontrollintervallum van. Az indexrekord tartalmazza
az adott kontrollintervallum relatv byte-cmt s az adott kontrollintervallumban elhelyezett
utols rekord azonostjt, a maximlis kulcsot vagy res kontrollintervallum esetn spacilis
jelet. Az elsrend indexrekordokat ktirnyban lncolja. Legfell egyetlen indexrekord van,
ez fgg az elsdleges llomnyban elhelyezett rekordok szmtl s terlettl.

A tovbbi indexrekordokat ppgy a kontrolintervallumban, a kontrollterleten trolja.


E fl jabb indexrekordokat pthet fel stb. Abban klnbzik az elsdleges szint
indexrekordoktl, hogy ezek nincsenek sszelncolva. A msodik indexszinttl felfel az
intervallum- s terletmret azonos!
Brmilyen mvelethez az indexszerkezetre kell hivatkozom. Az indexszerkezetre ms
kontrollintervallum- s kontrollterlet-mret adhat meg, mint az alapllomnyra.
ESDS: Szerilis llomnyt realizl. Vltoz hosszsg rekordokbl llhat, ennek az
sszes jellemzjvel rendelkezik a VSAM llomny. A kontrollterletek folyamatosan
tltdnek fel, nincs azonost. Bvteni a vgn lehet, innentl kezdve szablyos szerilis
llomny. Rrakhat egy kzvetlen elrsi lehetsg is, gy brmely rekord kzvetlenl
elrhet a relatv byte-cmn keresztl.
RSDS: Direkt llomny. Lefoglalok annyi trhelyet, amennyi kell, a rekordok fix
hosszsgak. Kialaktom a (fizikai) trszerkezetet. Brmely trhelynek tudom a relatv bytesorszmt, ezzel is tudok r hivatkozni. Definci szerint nem ltezik hash-fggvny, ettl
eltekintve a direkt llomny sorszmjelleg azonostval rendelkezik. A feltlts utn vannak
rekordokkal feltlttt helyek s res lyukak. Csak direkt llomnyknt hasznlhat.
KSDS: Indexelt szekvencilis llomny. Vltoz rekordformtumot tud kezelni. Az
alapllomny szekvencilis, s erre pl r az indexelt szerkezet. Nem teljes, tbbszint
indexelst alkalmaz, s a szekvncilis llomny karbantartst megoldja (bvts, trls,).
Egy kontrollterleten bell a karbantarts miatt nem tltnk fel minden intervallumot,
maradnak szabad kontrollintervallumok: van n-x darab feltltve s x darab kimarad. A
szabadon maradk szmt adom meg. Minden kontrollintervallumon bell hagyhatunk szabad
terletet, megmondhat, hogy a kontrollintervallum byte-jainak legalbb hny szzalka
maradjon szabadon. Azonost szerint nvekv sorrendben kerlnek be a rekordok a
szerkezetbe (szekvencilisan). Vigyz arra, hogy a megfelel szzalk byte szabadon
maradjon az alapllomny kialaktsakor. Az indexels a kontrollterleten trtnik: minden
kontrollterlet fl felpt egy indexrekordot (adatszint indexrekord), egy kontrollterlethez
rendeldik hozz. Ezeket sszelncolja mindkt irnyban. Egy indexrekordhoz annyi
bejegyzs van, ahny kontrollintervalluma van.
Mveletek
Bvts: A rendszer az indexszerkezet segtsgvel megkeresi a bvt rekord helyt. A
legfels indexrekordtl indul, s keresi az els olyan bejegyzst, amely nagyobb-egyenl,
mint a bvt rekord kulcsa. gy jut el az elsdleges szintre, a kontrollintervallumig.
1. Ha az adott kontrollintervallumban van elg szabad byte, lineris keresssel megkeresi az
elem helyt. Ha mr benne volt a bvt rekord, akkor hiba trtnt. Egybknt ha van mg
hely a kontrollintervallumban, a beszrs helye mgtt lev rekordokat jobbra tolja, s az
j rekordot bepakolja. A vltoztats az indexszerkezetet nem rinti, csak ha a legnagyobb
rekord utn bvtek.
2. Ha nincs elegend szabad byte a megfelel kontrollintervallumban:
a)
Ha van szabad kontrollintervallum a kontrollterleten, akkor kontrollintervallumfelezst hajtunk vgre.
1.
A teli intervallum els rsze maradjon a helyn, a msodik rszt vigyk t
az els res kontrollintervallumba. Tegyk ezt gy, hogy az elfoglalt terlet
arnya nagyjbl megfelezdjn.
2.
Az indexszerkezetet t kell alaktani a mdostsnak megfelelen. Az index
a logikai sorrendet fogja tkrzni, sztvlik a logikai s a fizikai sorrend. t
kell szervezni az indexbejegyzseket, ezek a kontrollintervallumok logikai
sorrendjt fogjk tkrzni. A vltozs tgyrzhet a teljes indexszerkezeten.
3.
A keletkezett helyre elvgezhet a beszrs.

b)

Ha a kontrollintervallumfelezs nem valsthat meg (mert nincs szabad


kontrollintervallum), kontrollterletfelezst hajt vgre.
1.
Lefoglal egy j kontrollterletet, s a teli kontrollterlet (logikailag utols)
felt tviszi az j kontrollterletre, a kontrollintevallumok szekvencialitsa
megmarad.
2.
Az indexszerkezet trja: aktualizlja a bejegyzseket, talaktja a lncolst a
megfelel mdon, hogy az a logikai sorrendet tkrzze.
3.
Ezutn kvetkezik kontrollintervallumba val beszrs, mdosul az
indexszerkezet.
Bvts specilis esete, amikor az llomny legutols kontrollterletnek
legutols kontrollintervallumn mg van hely, akkor ott trtnik a bvts (ha fr).
Ma mr lehet nagyobb kontrollterletet megadni menet kzben is, sok bvts
esetn, gy nem vlik el a fizikai s a logikai sorrend. ltalban megadnak egy
alapintervallum- s terletmretet, de ha terletfelezsre kerl sor, meg lehet adni
egy nvekedsi szzalkot, s ezt az indexbe is be lehet lltani.
Pl. Legyen az indexrekord s a kt kontrollterlet a kvetkez:
0, 11

512, 25

1024, 43 1536

0
2 9
11
512 20
25
1024 36 42 43
1536

2048, 91
2048

91

A 21-el akarok bvteni, megkeresem a helyt. Ha megvan, a szabad helyre tolom t a


mgtte levket, s a 21-t beszrom. Ha mr benne volt a tblban, hiba trtnt.
0
2 9
11
512 20
21 25
1024 36 42 43
1536
Ugyanezt jtszanm el a 24-gyel, de a kontrollterleten mr nincs elg szabad hely a
szmra, kontrollintervallum-felezst kell vgrehajtani, s mdosulnak az indexrekordbejegyzsek is a logikai sorrendnek megfelelen..
0, 11

512, 25

1536, 25 1536, 43

0
2 9
11
512 20
21
1024 36 42 43
1536 24
25

2048, 91
2048

91

Ha a 44-t akarom beszrni, kontrollterletfelezsre van szksg, s az indexrekordok


lncolsval megmarad a szekvencialits.

11

91

24

25

20

21

36

42

43

Trls: A KSDS llomnyban van fizikai trls is, mshol csak logikai. Megkeresem a
trlend rekordot. Ha megtalltam, akkor a mgtte lv byte-okat elremozdtom, s
gyjtm a felszabadul byte-okat. A fizikai trls egy esetben rintheti az indexszerkezetet: ha
a kontrollintervallum utols rekordjt kell trlni, ekkor mdosul az indexrekord s a
rendszerbejegyzs. A mdosts az egsz indexrendszeren vgigprghet.
Csere: Azonostt (elsdleges kulcsot) nem cserlnk, ezrt a csere az indexszerkezetet
sosem mdostja..

Ha a cserlend rekord hossza megegyezik az j rekord hosszval, akkor nincs


problma.

Ha nagyobb, akkor az resen maradt helyre rhzzuk a mgtte lev rekordokat.

Ha kisebb, a szabadon maradt byte-okat hasznlhatom fel.


Keress: Mindig nagyobb-egyenlre keres.
Feldolgozs:
1.
A fenti keressi szisztmval kzvetlen elrst tudunk realizlni, nagyobbegyenlre vgignzi.
2. Szekvencilis alapllomnyrl lvn sz, egy kontrollintervallumon bell
szekvencilis elrs van. Ehhez az elsdleges indexrekordokat hasznlom:
nvekv vagy cskken sorrendben dolgozhatom fel, anlkl, hogy tszerveznm
(mert ktirnyban van lncolva).
3.
Az
indexszerkezetet
figyelembe
vve
kzvetlen
mdon.
Csak
kontrollintervallumot tudja kzvetlen elrni.
jraszervezs: Akkor kell, amikor a kontrollterlet-osztsok felszaporodnak, de a megadott
paramterek is lehetnek rosszak. Clja az, hogy a fizikai s a logikai sorrend kzelebb
kerljn egymshoz. Rendszerfunkci.
Msodlagos kulcs kezelse: (indextbla, cm) A msodlagos kulcsrtkek mellett
relatv cmek vannak. Kezelse a fenti mdon trtnik, az alapllomny rekordjai az
indexllomny sorai. Tbb msodlagos kulcsot egyidejleg nem kpes feldolgozni. Az ESDS
s a KSDS msodlagos kulcsokat is tud kezelni (invertlt llomnyszerkezetet), brmely
msodlagos kulcsra felplhet egy indextbla.
A msodik oszlopban a msodlagos kulcsrtkek nvekv sorrendben vannak. A
harmadik oszlopban informci van arrl, hogy mely rekordok rendelkeznek az adott
msodlagos kulccsal. Az indexrekordok vltoz hosszak, s soraik is vltoz hosszak.
Kontrollintervallumok s kontrollterletek vannak. Kezelse olyan, mint amit a KSDS-nl
megszoktunk. Minden mvelet ugyangy hajtdik vgre.
Blokkolni nem lehet. Ha a kontrollintervallum mrete olyan, hogy egy olyan rekord
nem fr bele, a rendszer automatikusan szegmentl. Fix s vltoz rekordformtumot tud
kezelni, a tbbszempont lekrdezst a VSAM nem tmogatja.
A msodik oszlopban a msodlagos kulcsrtkek nvekv sorrendben vannak. A harmadik
oszlopban informci van arrl, hogy mely rekordok rendelkeznek az adott msodlagos
kulccsal. Az indexrekordok vltoz hosszak, s soraik is vltoz hosszak.
Kontrollintervallumok s kontrollterletek vannak. Kezelse olyan, mint amit a KSDS-nl
megszoktunk. Minden mvelet ugyangy hjtdik vgre.
B+-fa

Adatbzis kezelsi rendszerek mgtt B+-fk indexelsi mdszere ll. A B +-fa a B-fk
olyan mdostott vltozata, melyet llomnyok indexelsre hasznlnak.
Az alapllomny szekvenclis s szerilis is lehet (adatszint). Erre pl fel egy teljes
indexels, elsdleges indexszint. A B+-fk adott mret lapokbl llnak, a lapokon indexek,
azaz a kulcsok szerepelnek Az indexek elsdleges indexszinten lapokon vannak elhelyezve.
Tbbszint teljes indexelst tudunk megvalstani (elsdleges kulcsra), a tovbbi indexeknl a
lapmret lehet ms.
Elrhatjuk, hogy lrehozskor a lapokon legyenek res helyek minden szinten.
Manapsg az sszelncols is jellemz tulajdonsg.
Szerkezetkben klnbznek a levl- s a kzbens lapok.
A kzbens (nem levllapok) lapok szerkezete:
Ha a B+-fa rendje p, akkor a p a maximlis rtket jelli. Itt a rend a korbbinak a
ktszerese. A kvetkez informcik vannak elhelyezve a lapokon:
p1, k1, p2, k2, kq-1, pq (q p )
pi: egy mutat, amely brmely msik B +-fa-beli lapra mutathat
(famutat),
kj: kulcsrtkek, k1 < k2 < < kq-1.

Minden pi mutat ltal megcmzett lap esetn minden kulcsra igaz:

ki-1< x ki (1 < i < q, x az adott lapon egy tetszleges kulcsrtk)

x ki
(i = 1)

ki-1 < x (i = q)
A lapon maximum a B+-fa rendje darab mutat helyezkedhet el s eggyel kevesebb
kulcs. A gykrlapon kvl minden lap legalbb [p/2] mutatt tartalmaz. A gykrlap legalbb
2 mutatt tartalmaz.

l1

k1

A levllapok szerkezete:

k1

k2

n1

k2

m1

m2

k1, p1, k1, p2, k2, kq-1, pq-1, pq (q p)

ki : kulcsok.
pi: 1 i < q egy olyan mutat, amely az elsdleges llomny azon rekordjt
cmezi, amelyiknek a kulcsa ki. Ezek az adatmutatk kimutatnak a fbl az
elsdleges llomnybaa lapllomny rekordjait cmzik. pq a fban a tle
kzvetlenl jobbra elhelyezked levllapot cmezi.
k1

k2

k2

Teljes indexels van, minden rekord cmezve van. A levllapok azonos szinten
helyezkednek el.
Egyes rendszerekben a levlapok s a nem levllapok rendje eltrhet, a levllap
nagyobb lehet (bevezetnek egy p0 mutatt a lncols miatt), ez gyorstja a kezelst. A B +-fa
kialaktsnl a gykrlap levl s kzbens elem is.
Beszrs B+-fba: Legyenek a beszrand elemek a 8, 15, 1, 7, 3, 12, 9, 6, s legyen
p= 3 a B+-farendje. Lefoglaljuk az els lapot, rpakoljuk az els kulcsot s belltjuk a

mutatt. A kvetkez elemmel ugyanezt csinljuk. A jobb szlen lev levllap mutatja
mindig NULL.
5

Betelt a lap, az 1 beszrsnl mr laposzts kell:


5
1

A 3 s a 7 beszrsa utn a B+-fa:


3
1

A 12 beszrsa utn:
5
3

12

A 6 beszrsa utn:
5
3

Trls B+-fbl: Trljk 5-t a fbl!


1

12

12

Ebben a fban a 9-et a fa megvltoztatsa nlkl trlhetnnk, a 7-et csak


indexvltoztats rn, a 3 trlsekor pedig, mivel balrl nem tudok elemet tvenni, kt
levllapot kell sszevonni, ami vgigprg a fn:
6
1

8
9

12

A trlst a B+-fbl alkalmazhatom nem teljes indexels esetn is, ha az


alapllomnynl nem a rekordokat, hanem az alapllomny blokkjait indexelem. Blokkolt
szekvencilis llomnynl nem teljes indexelsre alkalmazhatom a B +-ft. Az elsdleges
llomny fl felpthetek egy invertlt indextblt s azt indexelem. Csak a teljes
indexelsnek van rtelme.
Ltezik a B+-fnak olyan megvalstsa, hogy ahogyan n a B+-fa szintjeinek a szma,
gy n a rend is. A B+-fa mdostsai:
1.
Az els lapon elhelyezett elemek szmt mskpp szablyozzk. A lapok jobb
kitltsre szolgl, minden lap minimum 2/3 rendig ki van tltve.
2.
A kitltttsget a felhasznl adhatja meg. (50-100%)
A VSAM-nl mr lttuk, hogy az indexelsnl s az indextbla bejegyzseinl logikai
s fizikai indexelsrl beszlnk (Logikai: elsdleges kulcs, az alapllomnynak elsdleges
kulcsra plnek kell lennie. Fizikai cm: abszolt vagy relatv lemezcm.). Invertlt
llomnyoknl van rtelme.
B*-fa: Csak annyiban klnbzik a B+-fktl, hogy a minimlis szm [2/3 p]. Minden lap
ktharmad rszig fel van tltve, s meg lehet adni szzalkosan is (50-100%) a ltrehozskor.

Anda mungkin juga menyukai