Anda di halaman 1dari 85

Adatszerkezetek s algoritmusok

Jegyzet dr. Juhsz Istvn eladsa alapjn

Ksztette Csords Annamria s Mohai Gbor


A vals vilgban rendszerekrl beszlnk. A dolgok sszetevi egymssal klcsnhatsban
vannak, viselkednek, tulajdonsgaik vannak. Jellemzjk a viselkeds, ezzel foglalkozik a
rendszerelmlet.
Rendszernek nevezzk a kzs ismrv alapjn sszetartoz, egymssal meghatrozott
kapcsolatban lv elemek jl krlhatrolt egyttest. Az elem a rendszer azon rsze, amelyet azrt
vlasztunk ki, hogy vizsgldst vgezznk rajta. Segtsgvel jellemezhet a rendszer. Egy elem is
lehet rendszer. A klcsnhats az 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
valamint viselkedsk idben llandan vltoznak.
A vals rendszerek tlsgosan komplexek, a teljes sszetettsgkben ltalban nem tudjuk
kezelni ket, gy egyszerstsi mdszerekre van szksg. Clunk a komplex rendszerek
leegyszerstse.
A 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 rgztett formban van, s hozzfrhet.
Adatnak nevezzk a tnyek, elkpzelsek nem rtelmezett, de rtelmezhet formban rgztett
alakjt (pl. 1995).
Az informci az adatokon vgzett gondolati mvelet eredmnyeknt ll el (pl. 1995-vszm).
Az informci ltalban viszonylagos. Ugyanaz az adat az egyes emberek szmra mst s mst
jelent. A modellezs, az informci s a rendszer is viszonylagos.
A rendszerben az elemek klcsnhatsait, tulajdonsgait adatokkal rjuk le. Ezt nevezzk
adatmodellnek, ami igen bonyolult szerkezet lehet. Az adatmodellel az Adatszerkezetek s
algoritmusok trgy foglalkozik.
Az elemek viselkedst, a rendszer mdosulsait eljrsmodellnek nevezzk. Ezzel a
Programozs 1. 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 (data structure) beszlnk.
Az adatszerkezetek adatttelekbl vagy adatelemekbl llnak s kzttk valamilyen kapcsolat
van.
Fizikai adat- vagy trszerkezeteknl meg kell klnbztetni az operatv trat, vagy memrit,
amelynek brmelyik byte-ja kzvetlenl elrhet, valamint a httrtrakat vagy perifrikat,
melyeknl ltalban 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 llomny (file). Az llomny az az adatszerkezet, amelyik csak
perifrin ltezik.

Adatszerkezetek szemlltetse
Egy-egy elem ltalban adatcsoporttal jellemezhet, melyek adatai mindig sszefggenek. Az
adatszerkezetek adatttelekbl, adatelemekbl llnak. Ezek kztt valamilyen kapcsolat ll fenn.

2
A kett nem ugyanazt jelenti.

Adatszerkezetek osztlyozsa

Homogn adatszerkezet: Az adatelemek azonos tpusak.


Heterogn adatszerkezet: Az adatelemek klnbz tpusak.

Brmely adatszerkezet mindig vges szm adatelemet tartalmaz.

Mveletek az adatszerkezetekkel
Ltrehozs: Nem volt adatszerkezet, ltrehozs utn lesz.
Mdosts:
Bvts vagy beszrs (csak dinamikus adatszerkezeteknl): j adatelemek kerlnek be
az adatszerkezetbe, az adatelemek szma n.
Trls: Megklnbztetjk a logikai s fizikai trlst:
fizikai trls: Cskken az adatszerkezet elemeinek a szma, az addig ott lev
eleme(ke)t tvoltom el.
logikai trls: Az adatszerkezet elemeinek a szma nem cskken, a trlni kvnt
elemeket egy specilis jelzssel (trlt jellel) ltom el, ezek a tovbbi
feldolgozsban nem vesznek rszt.
Csere: Az elemek szma nem vltozik, csak valamely elem vagy elemek rtke, mert
kicserlem egy msik rtkre.

3
Rendezs
Keress
Bejrs (elrs): Az adatszerkezet minden elemt rinteni akarom, a krds az, hogy ezt milyen
sorrendben tehetem meg. A sorrendet alapul vve a bejrs lehet soros, ha az adatszerkezet elemeit
valamilyen fizikai sorrend alapjn tudjuk megfogni, ahogy le vannak kpezve (ld. mgnesszalag),
szekvencilis, ha a bejrsnak valamilyen logikai sorrend az alapja (ld. sztszrtan trolt elemek),
vagy kzvetlen, ha az elrs 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.

I. Folytonos (szekvencilis, vektorszer) trolssal. A memriban trolt elemek egy folytonos


trterleten egyms utn helyezkednek el, s az adatttelek trolsi jellemzi azonosak (tpus,
brzolsi md, hossz). Ismerni kell a trterlet kezdcmt, a
trolsi jellemzket, s az elemek szmt. Ilyen trolsnl minden elemet kzvetlenl meg
tudok fogni.
Minden adatszerkezet trolhat ilyen mdon.
Mveletek:
Ltrehozs: Az adatelemeket, adattteleket egy-egy trrszbe helyezem el. A kezdcmtl
kezdve 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 logikai 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 s fellrhat.
Rendezs: Ha van rtelme, akkor mindegyik rendezsi algoritmus alkalmazhat.
Keress: Ha van rtelme, akkor minden keressi algoritmus alkalmazhat.

II. Sztszrt trols. Az adatelemek trolsi jellemzi klnbzek lehetnek. Minden


adatszerkezet trolhat sztszrtan.
A tnyleges adatelem mellett ltezik a trrsznek egy gynevezett mutat rsze is, amely
olyan informcit tartalmaz, hogy az adott elem utn melyik msik elem kvetkezik az adott
adatszerkezetben.

1. Egyirnyban lncolt lista (linked list)

Minden elemnl a mutatrsz a kvetkez elem trolsi cmt, az adatrsz pedig az


adatelem rtkt tartalmazza. Tudni kell, hogy melyik a lista els eleme. Ennek a cmt a

4
fej tartalmazza, ez listn kvli elem, nem tartozik az adatszerkezethez. Az utols elem
mutatrsze nem mutat sehova sem, a lista vgt jelzi.
reslista: Csak a fej ltezik a specilis, mutat rtkkel.
Mveletek:
Ltrehozs: Els lpsknt ltrehozom az reslistt, utna bvtek.
typedef struct elem {
int adat;
struct elem *kov;
} ELEM;

ELEM *fej = NULL;

Bvts: A lista brmelyik helyre beilleszthetek egy j trolsi elemet.


Bvts a lista elejn: Lefoglalok egy helyet a trban. Brhol megtehetem, de
tudom a cmt. Az j elem az eddigi els elemre mutat, a fej pedig az j elemre.
ELEM *bovites_elejere ( ELEM *fej, int mit)
{
ELEM *uj;

uj = (ELEM*) malloc (sizeof (ELEM));


uj->adat = mit;
uj->kov = fej;
if (fej == NULL) return uj;
return fej;
}

Bvts a lista vgn: Lefoglalom a trhelyet. Az j elem mutatja a lista vgt


jelz informci, NIL. 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.
ELEM *bovites_vegere ( ELEM *fej, int mit)
{
ELEM *p = fej, *uj, *seged = NULL;

uj = (ELEM*) malloc (sizeof (ELEM));


uj->adat = mit;
uj->kov = NULL;
if (fej == NULL) return uj;
while (p->kov != NULL)
p = p->kov;
p->kov = uj;
return fej;
}

Bvts a listban (beszrs): Az elrs szekvencilis. A listnl a keress teljes


keress, ahol adatrtket keresek. Minden elemre csak gy tudok eljutni, ha eltte
vgig mentem az eltte lv elemeken. Az aktulis elem az elem, amin llok. Az
aktulis elem el, vagy mg is beszrhatok.
Az aktulis elem mg bvtek: A megelz elemekrl nincs
informcim. Az j elem mutatrszbe az aktulis elem mutatrszben
lv cmet, az aktulis elem mutatrszbe pedig az j elem cmt rom.

5
ELEM *bovites_elem_moge(ELEM *fej, int mit, int mi_moge)
{
ELEM *uj, *p = fej;

if ( fej == NULL ) {
printf("Nem talaltam meg a keresett elemet!\n");
return fej;
}
while (p->adat != mi_moge)
p = p->kov;
if (p == NULL) {
printf("Nem talaltam meg a keresett elemet!\n");
return fej;
}
uj = (ELEM*) malloc (sizeof (ELEM));
uj->adat = mit;
uj->kov = p->kov;
p->kov = uj;
return fej;
}

Az aktulis elem el bvtek: Az elz mdszerrel nem lehet bvteni,


mert nem tudom megmondani, hogy mi az elz elem cme, ezrt meg
kell jegyezni az aktulis elem eltti elem cmt.
ELEM *bovites_elem_ele(ELEM *fej , int mit, int mi_ele)
{
ELEM *uj, *p = fej, *elozo = NULL;

if (fej == NULL) {
printf("Nem talaltam meg a keresett elemet!\n");
return fej;
}
while (p->adat != mi_ele) {
elozo = p;
p = p->kov;
}
if (p == NULL) {
printf("Nem talaltam meg a keresett elemet!\n");
return fej;
}
uj = (ELEM*) malloc (sizeof (ELEM));
uj->adat = mit;
uj->kov = p;
if (elozo == NULL)
return uj;
elozo->kov = uj;
return fej;
}

6
Trls: A bvts ellentte.
Els elem trlse: A lista fejbe az els elem mutatrtkt viszem.
ELEM *torles_fejet ( ELEM *fej)
{
ELEM *p = fej;

if (fej == NULL) return fej;


fej = fej->kov;
free( p);
return fej;
}

Utols elem trlse: Az utols eltti elemet megkeresem s a mutatrszbe NIL-t


rok.
ELEM *torles_veget ( ELEM *fej )
{
ELEM *p = fej;

if (fej == NULL) return fej;


while (p->kov != NULL)
p = p->kov;
if (fej == p) {
free(p);
return NULL;
}
else {
free(p);
return fej;
}
}

Ha az aktulis elemet akarom trlni, akkor az aktulis elem mutatrszt


tviszem a megelz elem mutatrszbe.
ELEM *torles_elemet( ELEM *fej, int mit)
{
ELEM *p = fej, *elozo = NULL;

if (fej == NULL) return fej;


while (p->adat != mit) {
elozo=p;
p=p->kov;
}
if (p == NULL) return fej;
if (elozo == NULL) {
fej = p->kov;
free( p);
return fej;
}
elozo->kov = p->kov;
return fej;
}

Csere: Simn vgrehajthat.

7
Keress: Csak teljes keresssel, amennyiben a lista nem rendezett. Ha rendezett, akkor
lineris keresssel.
Rendezs: Tegyk fel, hogy van egy listm, s azt sajt helyn akarom rendezni. Ez nem
clszer, a gyakoribb az, hogy rendezetten hozok ltre egy j listt. Ezt gy tehetem meg,
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.

2. Krkrs (cirkulris) lista

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

Minden elemnek kt mutatja van, amelyek a kvetkez s a megelz elemrl


tartalmaznak informcit. ltalban kt fej van, a lista elejre s a vgre mutatnak, gy
kt irnyban tudok haladni.

4. Multilista
Tbb rtelmezse is van.
A. Az adatelemek sszetettek, pl.
Kialaktok az egyik s a msik rszre is egy listt. Pl. a listaszerkezet
tartalmazza a neveket bc-sorrendben, az tlagokat cskken sorrendben. Tbb
mutatrsz van, mindegyik egy-egy adatelem-rsz szerint lncol. Annyi
mutatrsz s annyi fej van, ahny lnc.

Ez is lehet ktirnyban lncolt, illetve krkrs lista.

B. Legyenek az adatelemek sszetettek, gy van egy adatelem sorozatom. Egytt


akarom kezelni az azonos rtkeket (pl. a Debrecenben lakkat), teht olyan
rszlistk jnnek ltre, amelyben azonos rtk elemek vannak. Annyi rszlista s
fej van, ahny fle rtk tallhat. A fejek:

8
C. Az adatrsz is tartalmazhat mutatrszt, amely egy msik listra mutat. Ekkor
listkat fzk fel.

A jelzrsz azt jelzi, hogy a listaelem tnyleges adatra, vagy egy msik listra
mutat. Jelz: 1 adatrsz, 0 - mutat (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 szabadul fel. Krds az, hogy
hogyan tudunk ezzel a szabad trhellyel gazdlkodni.

I. folytonos trols esetn:

1. Az egyik megolds az, hogy a trhely felszabadulsakor tszervezzk az egszet, azaz a


trlend elemre rcssztatjuk a mgtte lv elemeket. A szabad helyek ilyenkor mindig a
lefoglalt trrsz utn lesznek. A folyamat igen idignyes, viszont a problmnkat biztosan
megoldja.
2. Hulladkgyjts (garbage collection): Csak logikai trls van, a lyukakat otthagyom,
folyamatosan rok tovbb. Amikor elfogy a rendelkezsre ll trhely, akkor a rendszer a
szabad helyeket rendszeres idkznknt tszervezi, trendszerezi a vgre, hogy
sszefgg trterletet kapjunk. Sok opercis rendszer van, amely gy kezeli le a trlst.
3. A trhelyeket nyilvntartjuk egy bitmtrix segtsgvel. A mtrix elemei: 1 (foglalt), 0
(szabad), ez alapjn tudok elemeket elrakni. Az adatelemeket nem kell mozgatni, viszont
kln nyilvntarts kell.

II. sztszrt brzols esetn:


1. A szabadhelyek ssze vannak lncolva. Ha j elemet akarok lncolni, akkor a
szabadhelyek listjrl leveszem az els elemet, s azt fzm az llomnyhoz. Ha trlst
vgzek, akkor az adott elem helyt a szabad elemek lnchoz lncolom. Idben
gazdasgos.
A gond az, hogy klnbz mret trhelyeket lncolok, gy olyan algoritmusokat kell
alkalmazni, amelyek ellenrzik, hogy az j elem befr-e a trrszbe s meg kell keresni azt
a trhelyet, ahova befr (first fit: az els megfelel trhelyet foglalom le; best fit: a
megfelelek kzl a legkisebbet foglalom le). Ha tl kicsi elemet pakolok bele, akkor nem
gazdasgos.
2. Szabadhelyek nyilvntartsa: Mint folytonos trols esetn. Bitmtrix segtsgvel
trtnik.

9
3. Hulladkgyjtsi technika, amelyben lncolom a szabadhelyeket. Ha elfogy a szabad hely,
akkor lncolok.

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

10
Struktra nlkli adatszerkezetek
Az egyes adatelemek fggetlenek, nincs kzttk kapcsolat. Az elemek kztt nincs sorrend,
mindegy, hogy hol helyezkednek el egymshoz kpest. Az egyes elemekrl meg tudom mondani,
hogy az adatszerkezetnek elemei-e, mg ha megkeverem ket, akkor is.

Halmaz (set)
Matematikai halmazfogalom megjelense adatszerkezet szinten.

Multihalmaz (multiset, bag)


Olyan specilis halmaz, amely a halmaztl eltren ismtldst is megenged, teht lehetnek
benne azonos elemek.
Mindkt adatszerkezet dinamikus s homogn. Beszlhetnk reshalmazrl is, viszont vgtelen
halmaz, mint adatszerkezet nem ltezik.
Specilis adatszerkezeti mveleteik vannak: (, , , \ | IN, +, *, )
, IN: Segtsgkkel 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" tszr szerepel, a msik halmazban hromszor, akkor unijukban
nyolcszor fog. Ha A B = C , akkor |A| + |B| = |C|.
, *: Ugyanez igaz a metszetkpzsre is, teht az elbb emltett kt halmaz
metszetben "a" hromszor fog szerepelni.
A kvetkezkben definilt mveletek a multihalmazra is igazak.
Mveletek
Ltrehozs:
Megadhatok egy prediktumot (felttelt). Azok az elemek lesznek a halmaz elemei,
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}
Van egy reshalmazom, s ehhez unival pakolom hozz az elemeket, s gy jn ltre a
halmaz.
Bvts: Unikpzssel.
Trls: Klnbsgkpzssel.
Csere: Nem ltezik, mert nem tudom megfogni az elemeket. Szimullt csert hajthatok vgre, ha
kitrlk egy elemet, s jat viszek be helyette.
Keress: Nincs, mert nem tudom megfogni az elemeket.
Rendezs: Nem rtelmezhet. A 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: H K H < K.
A halmazok reprezentcija a karakterisztikus fggvnyen alapul, ltalban folytonos trolst
alkalmaznak. A reprezentcis szinten sorrend van, amikor a halmaz elemeit egy sorrendisggel

11
rendezett trhelyre kpezzk le. Annyi bitet foglalunk le, amennyi halmazelem lehetsges. Mivel a
tr vges, a trhely kicsi, ezrt tudom, hogy maximlisan hny eleme van a halmaznak, s sorrendbe
rakom ket. A biteket 1-re lltom, ha az adott elem benne van a halmazban, 0-ra, ha nincs benne.
Az reshalmaznak minden bitje 0, ha pedig minden elem benne van a halmazban, akkor minden bit
1-es. Ez a karakterisztikus fggvny.
Pl. S = {hexadecimlis szmjegyek} Karakterisztikus fggvnye: 16 bit = 2 bjt. Legyen S = {1, 4,
8, A}. A halmaz elemeinek felttelezett sorrendje: 0, 1, , E, F. Ekkor a karakterisztikus
fggvny:

Ez az S halmaz reprezentcija. Az, hogy a hogy a halmaz elemei hol vannak, az


implementci dolga, a felhasznlnak nem szabad, nem illik tudni. A karakterisztikus fggvny
elnye az, 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 a karakterisztikus fggvnyt, 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 szzas nagysgrendnl szabjk meg a halmaz
maximlis elemszmt. Pl. Pascalban a halmaznak 256 db eleme lehet, ami 32 bjtot foglalhat el.

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

A rszhalmazok lehetnek pontosan egyelemek, gy meg tudom fogni brmelyik elemet (pl.
tmb) vagy tetszlegesek, gy tfedhetik egymst.

Tmb
A legismertebb, a leggyakrabban alkalmazott statikus adatszerkezet. A rszhalmazok
egyelemek s diszjunktak, s az osztlyozsba minden elem be van vonva, ezrt minden adatelem
megfoghat.
A tmb minden eleme egsz szmok sorozatn keresztl rhet el (ezek az egsz szmok a
tmbindexek), az indexek alkalmazsa teszi azt lehetv, hogy egyelem rszhalmazokat
kpezznk.

Az index tetszleges egsz szm lehet, ltalban egytl kezddik. Van fels s als hatra,
amelyek az indextartomnyt definiljk. 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 az adatelemekbl egy adott elem kivlasztst egy index segtsgvel meg tudom valstani,
akkor egydimenzis tmbrl vagy vektorrl beszlnk.
Ha minden elemet kt index segtsgvel lehet kivlasztani, akkor ktdimenzis tmbrl,
mtrixrl beszlnk. A ktdimenzis tmb sorokbl s oszlopokbl ll. Eleminek indexelsekor
elbb a sor-, majd az oszlopindexeket adjuk meg.

Ha minden elemet hrom index segtsgvel lehet kivlasztani, akkor hromdimenzis tmbrl
beszlnk. A hromdimenzis 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 rendezettsg az elhelyezs szerint van.
Az adatszerkezetet rtktl fggetlenl a szerkezet definilja.

13
Mveletek
Ltrehozs: A szerkezet ltrehozsa, nem az rtkek. Megmondom a dimenzik szmt s minden
dimenziban az indextartomnyt. A szerkezetet hozom ltre, s mivel a szerkezet statikus, gy mr
az elejn eldl, hogy a tmb hny elemet tartalmaz. Ebbe a szerkezetbe pakolom bele az elemek
rtkt.
Bvts: Nem ltezik olyan, hogy j helyre j elem bevitele, mivel a tmb statikus, az adatelemek
szmt ltrehozskor fixltam. A bvts szkebb vltozata az, hogy az res szerkezeti helyekre
adatelemet viszek be, azaz tvitt rtelemben: megadom azoknak az adatelemeknek az rtkt,
amelyeket eddig mg nem adtam meg.
Trls: Errl sem beszlhetnk, mert az adatelemek szmt nem tudom cskkenteni. Csak logikai
trlsrl beszlhetnk, mikor 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, ekkor az sszes rendezsi mdszer
alkalmazhat.
Keress: Mindenfle tmbnl rtelmezhet, s 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.

A tmbknl a folyamatos s sztszrt trols egyarnt alkalmazhat. ltalban folytonos


trolst alkalmaznak.
A tmb lekpzse folytonos trszerkezetre a kvetkezkppen trtnik. Legyen a kiindulsi
tmb:
a s ,t a s +1,t # a n ,t

a s ,t +1 a s +1,t +1 # a n ,t +1
" !

a a
s , m n , m
A ktdimenzis tmb els indexeinek tartomnya: sn s msodik indexeinek tartomnya:
tm. 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.
Elhelyezem az els sor elemeit, utna a msodik sor elemeit s gy tovbb. Az oszlopfolytonos
trols ugyanaz, mint a sorfolytonos, csak oszlopokat vesznk sorban. Ha tbb mint ktdimenzis
tmb van, akkor az indexek vgigfutnak az indextartomnyokon. Sorfolytonos trolsnl a
legutols index fut vgig a leggyorsabban s az els a leglassabban, oszlopfolytonosnl ez fordtva
van.
A tmb bejrsa s a tmbben val keress fgg attl, hogy a tmb oszlop- vagy
sorfolytonosan van trolva.

14
Krds az, hogy ha ismerem egy adott tmbelem indexeit, akkor hogyan tudom meghatrozni a
trbeli helyt. Ismerni kell a tmb kezdcmt (k), egy elemnek hosszt bjtban (l) s az
indexeinek als s fels hatrt minden dimenziban. gy
egydimenzis tmbnl az i. elem cme : k + l * (i - s),
ktdimenzis tmbnl az ai,j elem cme: k + l * (i - s) * (m t + 1) + l * (j - t), sorfolytonos
trols esetn.
Ezeket nevezzk cmfggvnyeknek.
Minden adatszerkezet (a tbbdimenzis tmb is) szimullhat egydimenzis tmb segtsgvel.
Mtrixok kezelse:
I. Abban az esetben, ha a mtrix hromszg mtrix, azaz a ftl alatt vagy fltt minden elem
nulla, a nullrtk elem trolst meg lehet sprolni. A mtrixot kezeljk vektorknt, kpezzk
le olyan egydimenzis tmbre, amely csak a nem nulla elemeket tartalmazza. A vektor
elemeinek szma: m = n * (n + 1) / 2.

a11 a12 # a1n



0 a 22 # a2n
A=
" " ! "

0 0 # a nn

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

V ji j ( j 1)
Ekkor a ij = t , t= +i.
0 j < i 2
ltalnosan a ktdimenzis tmb lekpezse egydimenzis tmbre indirekt indexelssel
trtnik. Egy A tetszleges ktdimenzis tmbt kpeznk le egy V vektorra. A indexhatrai:
(a1 f1, a2 f2). V mrete m * n, ahol m = (f1 - a1 + 1), n = (f2 - a2 + 1).
Hozzunk ltre egy IV indexvektort, amely elemeinek szma m.
Az IV k. eleme: 1 + (k - 1) * n, ez nem ms, mint az A mtrix (a1 1 + k). sora els elemnek
V-beli indexe.

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

II. Sokszor kell olyan mtrixot hasznlni, amelynek sok eleme nulla, vagy sok azonos rtk
eleme van. Ezeket nevezzk ritka mtrixoknak. A krds az, hogy ezeket hogyan tudjuk
kezelni.

15
1. Hromsoros reprezentci
A hrom egydimenzis tmb azonos elemei rnak le egy-egy elemet sorfolytonos
brzolsban.

1 2 0 0 0 6

0 4 0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0 0 0 0 0 2

C-ben az A mtrix lekpezse hromsoros reprezentcira gy nz ki:
void lekepez()
{
int i, j, k = 0;

for ( i = 1; i <= N; ++i)


for ( j = 1; j <= M; 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 = 1; 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 a keresett elemet, vagy nagyobb rtkt
tallunk s akkor 0 lesz a fggvny visszatrsi rtke. A problma az, hogy nem tudjuk a
sor, az oszlop, s az rtk maximlis rtkt. A tmb statikus adatszerkezet, ezrt tbb
helyet kell foglalni, gy marad resen lefoglalt trrsz. A msik gond az, hogy nem lehet
kzvetlenl elrni az elemet, keresst kell alkalmazni. Ez nem oldhat meg, viszont az els
problma sztszrt trols esetn megoldhat. A tmb statikus voltt dinamikusra viszem.

Sorok egszben keressre, mtrix szorzsra remek.

16
2. Ngysoros reprezentci

1 2 0 0 0 6

0 4 0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0 0 0 0 0 2

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

Az S-bl lthat, hogy a mtrix 3. s 4. sora csupa nulla.


Az M oszloppal rendelkez 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[j],OSZLOP[j],ERTEK[j]);
j = MUTATO[j];
}
}
}

Az algoritmus folytonos trols esetre vonatkozik. A ritka mtrix trolsnl is


alkalmazhat a sztszrt trols, lncols. Ehhez egy multilista szerkezetet hasznlhatunk.

BALRA: sorok lncolsa jobbrl balra.


FEL: oszlopok lncolsa lentrl flfel.

17
Listafejek is kellenek, gy a plda a kvetkezkppen nz ki:

A tmbk igazn nagy jelentsge az, hogy 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 egyedi, 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, de ltalban folytonos brzolst alkalmaznak.
Gyakran gy troljk, hogy a kulcsot s az rtket lekpezik egy-egy egydimenzis tmbre.
Klnbz szervezs tblzatok vannak.

I. Soros tblzat
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, ezrt 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 az elzekben ne szerepeljen.
Rendezs: Nem rtelmezett.
Keress: Kulcsra vonatkoz teljes keress.
Bejrs: Soros (az elemek elhelyezsnek sorrendjben).
Feldolgozs: Kulcs alapjn.

18
Keressre Wirth algoritmustechnikjt alkalmazzuk, amit strzsatechniknak neveznk. Az
algoritmus felttelezi, hogy van mg legalbb egy szabad hely. A strzsatechnika lnyege, hogy
m mret tbla esetn az elemek vgre (n elem esetn az n + 1. helyre) elhelyezem a keresett
elemet (k), s gy jutok a tbla vgre. A k-t gy mindig megtallom: ha a legvgn tallom
meg, akkor az azt jelenti, hogy nincs benne a tblzatban, ha mg a vge eltt megtallom,
akkor benne van. A tblzat elemeinek a szma ezzel a manipulcival nem vltozott meg,
mert 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 = 1; k != KULCS[i]; i++);
if (i == n) {
printf("Nincs benne.\n");
return -1;
}
else return i;
}

Bvtsnl arra kell vigyzni, hogy az j elem kulcsa olyan legyen, hogy addig mg ne
szerepeljen a tblzatban.
void beszur(int k, int x)
{
int i;

if (n > m) {
printf("Betelt a tablazat!\n");
return;
}
KULCS[n] = k;
for ( i = 1; k != KULCS[i]; i++);
if (i == n) {
ERTEK[i] = x;
n++;
}
else printf("Mar van ilyen kulcsu elem.\n");
}

Trls: A k kulcs elemet akarjuk trlni. Ha megtalltuk, akkor kitrljk az elemet s


berjuk a helyre az utols elemet.

19
void torol(int k)
{
int i;

if (n == 1) {
printf("Ures a tablazat!\n");
return;
}
KULCS[n] = k;
for ( i = 1; k != KULCS[i]; i++);
if (i == n)
printf("Nincs torlendo elem.\n");
else {
KULCS[i] = KULCS[n - 1];
ERTEK[i] = ERTEK[n - 1];
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 ntrendez
tbla.

II. ntrendez tbla


Az egyes elemek feldolgozsi valsznsge klnbz. Az ntrendez tbla azt a
gondolatot valstja meg, hogy a leggyakrabban hasznlt elemek a tbla elejn legyenek. A
megolds nagyon egyszer. Ha egy elemet feldolgozunk, akkor azt helyezzk a tblzat elejre.
Ez a folyamat sok lps utn ahhoz vezet, hogy a legels helyen a leggyakrabban feldolgozott
elem fog llni. Reprezentcijnl sztszrt brzolst alkalmaznak, mert itt az trendezs
egyszer.

III. 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 bvtst
kell alkalmazni.
Rendezs: Nincs, mert a tbla rendezetten jn ltre.
Keress: Mindkt reprezentcinl alkalmazhat a lineris keress, folytonosnl a binris
keress is.
Bejrs: Szekvencilis, logikai sorrend szerint.
Feldolgozs: Kulcs alapjn trtnik.

20
A karbantartsi mveletek folytonos brzolsnl lassabbak, mg a feldolgozs gyorsabb a
binris keress miatt. Sztszrt brzolsnl a karbantarts (bvts, trls) kellemes, de a
feldolgozs nygs.
Binris keress folytonos brzolsnl:
int keres(int k)
{
int min = 1, max = n 1, 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 ERTEK[i];
else return -1;
}

Az algoritmus felttelezi, hogy legalbb egy elem ltezik. 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.

IV. 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). Az
f egy hash-fggvny, a technika pedig a hashing (randomizls). Az lenne a j, ha a fggvny
klcsnsen egyrtelm lenne, de ez a gyakorlatban ritka, mint a fehr holl. ltalban a
fggvnyek egyrtelmek, ami azt jelenti, hogy klnbz kulcsokhoz ugyanazt a cmet
rendelhetik hozz. Azon kulcsokat, amelyekhez ugyanazt a cmet rendeli, szinonimknak
(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-fggvnytl elvrjuk, hogy:
A kulcsokat be kell transzformlnia egy sorszmintervallumba ( [0 n] ), pontosan
oda, ahova trat lefoglalok.
A kulcsokat lehetleg egyenletesen szrja szt, ne legyen sok szinonima.
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.

21
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 van az elvi
lehetsgek s a tnylegesen elfordul alkalmazott kulcsok kztt.

1., 2.: Klcsnsen egyrtelm hash-fggvnyt alkalmazunk. Az elvi lehetsgeket


megsorszmozom.

4. Tudnk klcsnsen egyrtelm fggvnyt hozzrendelni, de a trhely res lenne a


nagysgrendi klnbsg miatt, s a trolsi kapacits vges. Annyi helyet kell
lefoglalnom, ahny kulcs a gyakorlatban elfordul (meg kell becslni), ezutn
biztostani kell, hogy brmilyen elvi kulcs elemet le tudjunk kpezni erre a kisebb
terletre (ms-ms kulcshoz ugyanazt a trhelyet rendeli hozz). Pl. hatjegy vidki
telefonszmok.

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 szinonimkat, 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
0-999999999-ig terjedhet. Tegyk fel, hogy a gyakorlatban 100000 lehetsg van, ezrt a
lekpzs:

A gyakorlatban elfordul kulcsok szma m, gy az intervallum: 0 - m. Vlasszuk ki az


m-nl kisebb legnagyobb prmszmot, s jelljk p-vel. A transzformcinl a tnyleges
kulcsot osszuk el p-vel, s sorszmnak tekintsk a maradkot. gy a [0 (p-1)]
intervallumot kapjuk. Ez a mdszer jl vletlenszerst, kevs a szinonima.

2. Szorzs mdszere
A kulcsot kpezznk le a 0 - m tartomnyra. Legyen az m szmjegyeink darabszma k.
A transzformcihoz vegyk az eredeti kulcsot s szorozzuk meg egy tetszleges
prmszmmal, vagy nmagval, vagy osszuk kett s a kt felet szorozzuk ssze. Az gy
kapott szmnak vegyk k db jegyt, s ezt tekintsk sorszmnak. Ez a transzformci jl
vletlenszerst, kevs szinonimt produkl.

3. Helyirtk kivlaszts mdszere


A legegyszerbb mdszer, de nem vletlenszerst jl, sok a szinonima. Az eljrs
lnyege, hogy a kiindulsi kulcsbl vletlenszeren kivlasztok k db szmjegyet, s ez lesz
a sorszm.
1 (2) (3) 9 (9) 9 (9) (1) 7

22
4. Hajtogats
Legyen az eredeti kulcs az 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 csoportokra, s ha kell, a
csoportok elejre vagy a vgre null(ka)t rok. Ezutn a csoportokat a kzps csoport al
hajtogatom, s sszeadom. A kapott sszegbl veszem az utols k db szmjegyet, ez 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. a 3-at, s 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). A
bzistrsnszformci egy igen kzkedvelt mdszer.

Adatbziskezelknl beptett hash-fggvnyek lteznek.

Hogyan kezeljk a szinonimkat?


A szinonimk tlcsordult elemek formjban jelennek meg. Vegyk az els elemet, s
helyezzk el a tblban. Ezutn vegyk a kvetkezt, s azt is helyezzk el. Tegyk fel, hogy a
harmadik elemet oda kellene betenni, ahol az els elem van. A krds az, hogy mi trtnik
ilyenkor.

1. Nylt cmzs mdszere


Ugyangy 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 meg, de haladhatunk mskppen is.

23
Pl. j = -m: az i. az a hely, ahol tlcsordult az elem.
j=j+2
((i 1 + |j|) % m) + 1
Ha a tblban vgig nincs res hely, akkor megyek a tbla elejre. Vagy tallok res
helyet, vagy sem. (ltalban a nylt cmzs felttelezi, hogy ltezik res hely. 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.
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.
Ennek a mdszernek az egyik hibja az, hogy a 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 msodik lpsknt rakjk be a flrerakott elemeket.
Nylt cmzsnl fizikai trlst nem tudunk megvalstani, mert az jonnan keletkezett
res hely meglltan a keresst, ezrt logikai trlst alkalmazunk. gy minden elemnek
hrom 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 a tblzatot).
Tudunk-e arrl valamit mondani, hogy egy tlcsordult tblaelem viszonylag hamar
kap-e res helyet? Ellenkez esetben 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 mez kapcsoldik, a MUTAT mez. Ha
az adott helyen nincs tlcsorduls, akkor azt NIL jelzi. Ha van, berjuk, hogy hol van a
tlcsordult tblaelem, gy az adott helyrl tlcsordult szinonimkat lncoljuk. Keressnl a
tlcsordult elem rgtn elrhet, mert tudjuk a helyt.
Kikszbli a teljes keresst, nem kell az sszes elemet rinteni. A karbantarts
bonyolult, a feldolgozs knnyebb.

24
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. Keveredik a folytonos s a sztszrt
brzols, az eredeti elemeket folytonosan, a tlcsordultakat sztszrtan brzoljuk.
Egyszerbb a karbantarts, mert multilista-szerkezetet kell kezelni.

Kulcstranszformcis tblk mveletei


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 szinonimakezelsi 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 van.
Csere: Kulcs alapjn keresem meg az elemet, 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 az,
hogy a tblzaton bell nincs rendezettsg, a feldolgozs s a karbantarts lass. Ez a lasssg
legjobban a gyorsan vltoz tblknl jelentkezik, hiszen ott igen sok a karbantartsi mvelet.

25
Szekvencilis (lineris) adatszerkezetek
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
elhelyezsk biztost. A lista jellse: q = [x1, x2, ... , xn]
Specilis listafogalmak, ill. mveletek:
res (empty) lista: [ ],
lista feje (head): A lista els eleme.
lista farka (tail): Az a lista, amely az els elem elhagysval keletkezik.
lista vge (end): A lista utols eleme.
lista mrete: A lista elemeinek a szma. |q| = n.
A lista alapmveletei:
Hozzfrs (access): A lista elemei egyrtelm sorrendben vannak felfzve.
Megfogjuk valamely elemt. A listbl az i. elem kivlasztsa (q[i] xi). Ha i nem
eleme az [1..n] intervallumnak, vagyis i < 1 vagy i > n, akkor a hozzfrs eredmnye
[], az res lista.
Allista (sublist) kpzs: q[i..j] [xi,xi+1, ... xj] A listbl tetszleges rszt
vlaszthatunk ki gy, hogy megadjuk a kezd- s a vgelemet (i s j, 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.
Konkatenci (concetenation): Listk egyestse. 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: Az reslistbl indulva konkatencival rendeljk hozz az elemeket, mint egyelem
listkat. A hozzfzs sorrendje adja a sorrendet a listban.
Bvts: A q listt a k. elem utn bvteni akarjuk az x elemmel: q' = q[..., k] & [x] & q[k+1, ... ].
Allistval is bvthetek, ugyangy, ahogy egy elemmel.
Trls: Fizikai trls. A k. elem trlse: q' = q[ ... , k-1] & q[k+1, ... ].
Csere: A k. elemet cserlem x-re: q' = q[... , k-1] & [x] & q[k+1, ...].
Rendezs: rtelmezhet abban az rtelemben, hogy a listt az adatelemek rtke szerint brmely
mdszerrel nvekv vagy cskken sorrendbe rendezem a sajt helyn, vagy ltrehozskor
rendezett listt hozok ltre.
Keress: Teljes keress, rendezett listnl lineris vagy binris keress.
Elrs: Soros, szekvencilis, kzvetlen.
Feldolgozs: A definilt mveletek alapjn. Lnyegesek azon mveletek formi, amelyek a lista
elejt vagy vgt rintik.

A szls elemek kezelsre hat esetet klnbztetnk meg:


Acces head: Hozzfrs a legels elemhez. q(1).
Push: Egy elemmel bvtem a listt az elejn. [x]&q
Pop: Trlm az els elemet. q[2, ... ]

26
Access end: Hozzfrs az utols elemhez. q[|q|]
Inject: A listt a vgn bvtem. q&[x]
Eject: Trlm az utols elemet. q[ ... , |q|-1]
A lista reprezentcija mind a ktfle mdon trtnhet. A folytonos brzolst vektorral, a
sztszrtat pedig egy ktirnyban 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 csak az 1., 2., 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 POP-
ba belertik a TOP-ot.

Ltezik resverem, s olyan verem is, amely tele van. Az reslista vagy az resverem onnan
ismerhet fel, hogy a fej NIL.
Mivel az adatszerkezet homogn, azonos mret elemeket pakolunk bele. Az elsnek
behelyezett elem a verem aljra kerl, majd erre pakoljuk a tbbit. Csak az utoljra betett elemhez
tudok hozzfrni, az alatta lvket csak gy rhetem el, ha a felettk levket eltvoltottuk. A
vermet szoks LIFO (Last In, First Out) adatszerkezetnek is nevezni.
A verem reprezentcija lehet:
I. Folytonos
A vermet vektorral kezeljk, ahol az els elem mindig a verem alja. Hasznlni kell egy
mutatt, ami a verem tetejt mutatja.

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

II. Sztszrt
Egyirnyban lncolt listval oldjk meg. A listafej mindig az aktulis els elemre mutat.
Ide kell beszrni az j elemet adatfelvtelnl.

A verem minden komoly szoftverben megjelenik. ltalban olyan helyzetben alkalmazzk,


amikor egy sorrend megfordtsa a cl. A sorrend gyakran idrendi sorrendet jelent, meg akarom

27
vltoztatni a folyamatok bekvetkezsnek a sorrendjt (pl. a hvsi lncon visszafel lpkedsnl).
Rekurzv algoritmusoknl is hasznljk.
Pl.

Mveletek
Ltrehozs: Van az resverem s az rkezs sorrendjben pakoljuk bele az elemeket.
Bvts: PUSH mvelet, definci szerint csak a verem tetejn.
Trls: POP mvelet, definci szerint csak a verem tetejn.
Definci szerinti keress, rendezs, csere, bejrs nincs.
Elrs: TOP, a verem legfels eleme rhet el.
Feldolgozs: Az alapmveletekkel.

Sor (queue)
FIFO (First In, First Out) adatszerkezet. A sor egy specilis lista, ahol csak 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. mvelet.)
Ltezik res s tele sor is. j elemet a sor vgre lehet bevinni, hozzfrni a sor elejhez lehet.

A sor reprezentcijnl mindkt mdszer megfelel. Folytonos brzolsnl vektorra


kpezzk le a sort, sztszrtnl egyirnyban lncolt listt alkalmaznak.
A folytonos brzols megoldsai:
I. Fix kezdet sor
A sor els elemnek indexe 1, teht rgztett, rtke x. Van egy indexmutat, ami a sor
vgt jelli. Ltezik res sor s tele sor. Bvteni a sor vgn, hozzfrni az 1-es index
elemhez lehet, ekkor az egsz sort eggyel balra kell tolni. A tbbi elemhez val hozzfrs azt
jelenti, hogy az eltte lv elemeket fizikailag trlm.
II. Vndorl sor
Kt indexmutat van, a sor elejt s vgt jellik. Bvteni az utols, V index elem utn
lehet, hozzfrni az els, E index elemhez lehet. Ha az els elem mgtt lv elemet akarom
elrni, akkor az E indext trlnm kell. Ha a rendelkezsre ll trhely vgre rtem, az egsz
vektor visszatoldik a trhely elejre.

III. Ciklikus sor


Kt indexe van, a sor elejt s vgt jellik. 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 elemek bevitelt.

28
A sort olyan esetben hasznljuk, ha az adatokat idrendben val berkezs szerint akarjuk
meghatrozott sorrendben feldolgozni. Szerepe kevsb fontos, mint a verem. Brmilyen
adatszerkezet bejrsa nem ms, mint egy sorra val lekpezse. A sor jelenik meg a puffereknl,
ilyen pl. a billentyzet puffer.
Ciklikus sor egy implementcija: Egydimenzis tmbbel valstjuk meg. Kezeljk a
szlssges eseteket. Az brt lsd fent.
SOR[1 ... n], E, V: indexmutatk. Ha a sor
res: E = V = 0,
tele van: (E = 1 vagy V = N) vagy (E = V + 1).
PUT mvelet (bvts). Vigyk be az x elemet n + 1. elemnek!
void put(int x)
{
if (v % n + 1 == e) printf("A sor tele van.\n");
else {
v = v % n + 1;
SOR[v] = x;
if (e == 0) e = 1;
}
}

GET mvelet. Vegynk ki egy elemet!


int get()
{
int a;

if (e == 0) {
printf("A sor ures.\n");
return -1;
}
a = SOR[e];
if (e == v) e = v = 0;
else e = e % n + 1;
return a;
}

Mveletek
Ltrehozs: Az ressorbl indulunk ki, s az elemek a berkezs sorrendjben kerlnek be.
Bvts: Csak a sor vgn.
Trls: Csak a sor elejn
A csere, a rendezs, az elrs s a bejrs nincs rtelmezve.
Feldolgozs: Az 1., 3., 5. mveletek alapjn.

Vannak specilisan kezelhet sorok is, pl. ktvg sor, ketts sor (dequeue).

Ez egy olyan specilis lista, amelynl mind a hat mvelet rtelmezve van. A sor mindkt vgn
lehet bvteni s mind a kt vgn lv elemekhez hozz lehet frni. A ktvg sor tekinthet gy,

29
mint kt darab aljnl sszeillesztett verem, gy a verem s a sor ltal megoldhat problmk
megoldsra egyarnt alkalmas. Vannak specilis esetei:
input korltozott ketts sor: Nincs rtelmezve r a 2. mvelet (RPUT), azaz nem lehet az
elejn bvteni, csak a vgn. Elemet kivenni az elejn s a vgn egyarnt lehet.
output korltozott ketts sor: Nincs rtelmezve r az RGET mvelet, hozzfrni csak a sor
els elemhez lehet, bvteni viszont mindkt vgn lehet.
Reprezentcira, implementcira nzve tvihetek az elzek. Memriakezelsi gondok
megoldsnl szoktk alkalmazni, dinamikusan.

Sztring (string)
A sztring olyan lista, amelynek elemeit az bc szimblumai alkotjk. Mi olyan sztringekkel
foglalkozunk, amelyeknek elemei karakterek. Sok terlet van, ami a sztringekkel foglalkozik:
formlis nyelvek,
formlis rendszerek: 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. A sztringhez kapcsold
fogalmak:
allista: Rszsztring.
konkatenci (egyests): 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: A sztring rszsztringjt cserlem egy msik rszsztringre, azonosra, rvidebbre vagy
hosszabbra.
A rendezs, az elrs s a bejrs nem rtelmezett.
Elrs: Kzvetlen elrs.
Keress: rtelmezett, de rszsztringet keresek.
Feldolgozs: Ksbb ltjuk.

A sztringek reprezentcijnl a folytonos s a sztszrt brzols is megjelenik.


I. Folytonos brzols
Ahny karakter, annyi bjt, bels kd alapjn. Egy sztring esetn trivilis. A krds tbb
sztring trolsnl a lnyeges.
1. Fix hosszon trolunk. A fix hossz akkora terlet kell, hogy legyen, hogy a leghosszabb
sztring is elfrjen benne. Ez azt jelenti, hogy a rvidebb sztringeket ki kell egszteni
szkzkkel. Kezelse igen knyelmes, de nagyon nagy helyett foglal el, s kihasznlatlan
trterletek maradnak.

30
2. Vltoz hosszsgon trolok. Minden sztringnek csak a szksges helyet foglalom le:
annyi bjtot, amennyi karakterbl ll. A problma az, hogy nem tudom, melyik meddig tart
a sztring. Erre az a megolds, hogy jellnm kell, hogy hol kezddnek az egyes sztringek,
ezrt a sztring eltt letrolom a hosszt. Kezelse sokkal nygsebb, mint az elz, mert
tudnom kell, hogy hol vannak a sztringhossz-jelzk, s meg kell tudnom klnbztetni a
tnyleges karakterektl. A Pascal ezt a megoldst vallja.

Ennek a trolsnak az egyik vltozata az, amikor a sztring hosszt nem eltte trolom
le, hanem a folyamatosan egyms utn rt sztringekrl 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.

II. Sztszrt brzols


Minden lncolt lista 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.

Az elz helyett azt alkalmazzk, hogy karakter helyett rszsztringet brzolnak. Ekkor a
trdels a problma, krds, hogy mi trtnik, ha a sztring n-nel nem oszthat hosszsg (
trt).

Mintailleszts (pattern matching)


A feladat: Van egy sztringem s keresem, hogy egy adott msik sztring elfordul-e benne, s ha
igen, akkor hol. Sok helyen elfordulhat. Ennek jelentsge pldul a kpfeldolgozsban, valamint
szvegben val keress s csere esetn van.
Legyen az alapsztring a[1 ... N] (a = 100111010010100010100111000111), a keresend sztring
p[1 ... M] (p = 10100111).
Az illesztsi algoritmusok:
I. Meztlbas algoritmus
Vesszk az alap- s a mintasztringet, s karakterenknt hasonltjuk ssze ket. Ha a
vizsglt karaktereik megegyeznek, akkor mindkt sztringben a kvetkez karakterrel folytatjuk
a hasonltst. Ellenkez esetben az alapsztringben visszalpnk oda, ahonnan a mintasztring

31
legutols hasonltst kezdtk, s az alapsztring kvetkez, valamint a mintasztring legels
karaktervel kezdjk jra a vizsglatot.

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 elszr


elfordul az alapsztringben, vagy (N + 1)-el, ha nem fordul el benne. Az alapsztring
karakterein az i megy vgig, a mintasztring karakterein pedig a j. Ha nincs egyezs, i-t a
kvetkez karakterre lltom, j-t pedig 1-re. Ha megtallok egy mintt, akkor tovbbi
elfordulsokat kereshetek.
Pl. Az els s a msodik karakterprok sszehasonltsnl mg egyezs van, de a
harmadikban mr eltrnek.

Ezutn az alapsztringnek a msodik, a mintasztringnek pedig az els karaktert veszi.

Ekkor mr az els sszehasonlts utn eltrst tall, s mindkt sztringben tovbblp.

Az alapsztringben a 17. karaktertl kezdden egyezik meg a rszsztring a


mintasztringgel.

A mintasztringet addig tolom eggyel jobbra, amg egyezst nem tallok vagy a vgre nem
rek. A pldban a fggvny 17-el tr vissza.
Az algoritmus lass, az sszes lehetsges esetet vgigvizsglja.

II. Knuth-Morris-Pratt mintaillesztsi algoritmus


Legyen az alapminta egy rszlete az ai-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, ha tovbb keresnk, vissza kellene menni az alapsztringbl lv rsz elejre.
Viszont az alapsztring rszletnek elejrl tudunk informcit, azaz ismerjk, hogy az nem
ms, mint a minta eleje. Ezt az ismeretet teht gy kell felhasznlni, hogy ezeket az elemeket
ne vizsgljam jra vgig. Ehhez a kvetkezt kell tenni: Vegyk a mintt, ami legyen neknk

32
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[i] = j, ekkor a
minta els (i - 1) karaktertl az utols (j - 1) karakter megegyezik a minta els (j - 1)
karaktervel. A kvetkez keressnl nem lpek teljesen elre, gy lnyegesebben kevesebb
lpssel dolgozom.
Els lpsknt tltsk fel a vektort:
void initkov()
{
int i, j;

i = 1;
j = 0;
KOV[1] = 0;
KOV[0] = 0;
while (i <= m) {
if (j == 0 || p[i] == p[j]) {
i++;
j++;
KOV[i] = j;
}
else j = KOV[j];
}
}

Az algoritmus mkdse a pldn:


i j KOV[i]
1 0 0
2 1 1
2 0 1
3 1 1
4 2 2
5 3 3
5 1 3
5 0 3
6 1 1
7 2 2
7 1 2
8 2 2
8 1 2
9 2 2
int KMPill()
{
int i = 1,j = 1;

initkov();
while (j <= m && i <= n) {
if (j==0 || a[i]==p[j]) {
i++;
j++;
}
else j=KOV[j];

33
}
if (j > m) return i - m;
else return i;
}

Az algoritmus mkdse a pldn:

Az els algoritmus lpsszma kb. N * M, a KMP-algoritmus lpsszma N + M. Az


algoritmust lehet gy ltalnostani, 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 knnyen kezelhet.

III. Dmlki-algoritmus
Ez nem sztringkezel algoritmusnak szletett meg a 60-as vekben, hanem az automata-
elmleti algoritmusnak. Hatkonyabb algoritmus, mint az elzek, s knnyebben
programozhat.
Legyen az alapsztring a = ABAFBADC s a mintasztring p = BAD. Els lpsben hozzunk
ltre a B logikai mtrixot. Cmkzzk sorait azokkal a karakterekkel, amelyek elfordulhatnak
a kt sztringben, s oszlopait a minta szerinti karakterekkel.
B A D
A 0 1 0
B 1 0 0
C 0 0 0
D 0 0 1
E 0 0 0
F 0 0 0
Legyen Bi,j = 1, ha az adott karakter az adott helyen elfordul, egybknt 0. Az algoritmus
hasznl hrom M elem logikai vektort: Q-t, U-t s V-t, amelyek indul rtkei a kvetkezk:
Q = (0 0 ... 0), U = (1 0 ... 0), V = (0 0 ... 1). Az algoritmus hasznl egy vermet is, ami a
mintaillesztshez nem felttlenl szksges. Mi a pldnkban alkalmazni fogjuk. Jelljk a
vermet S-el. Az alapsztring karaktereit egyenknt dolgozzuk fel: elhelyezzk ket a veremben,
mikzben vizsgljuk, hogy van-e egyezs az alapsztring s a mintasztring 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. Nyilvn, ha QM = 1, akkor a verem tetejn
megvan a minta. Az alapsztring minden egyes karaktere kivlaszt a B-bl egy sort, ami legyen
Bi. rtelmezve van egy olyan mvelet, az R: (a1 ... aM) (0 a1 ... aM-1), amely nem tesz mst,
mint jobbra shift-el eggyel. Vegyk az alapsztring karaktereit, pakoljuk a verembe, kzben Q
rtke a kvetkez lesz: (R(Q)U)Bi. Minden lps utn vizsgljuk, hogy QV egyenl-e V-
vel. Ha igen, akkor a minta a verem tetejn van. Plda:

34
Q S teteje A kvetkez
elem
(000) - A
(000) A B
(100) B A
(010) A F
(000) F B
(100) B A
(010) A D
(001) D
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) (100) & (010) = (000), Q = (000) (100) & (100) = (100) stb. Ha Q = (001), akkor a
verem tetejn ott van a minta. Ez nem implementci, hanem algoritmus. Az algoritmust gpi
kdban knny implementlni, s hossz sztringeknl is kitnen mkdik. Egyik elnye az,
hogy mg a tbbi algoritmusnl annyiszor vgig kell menni az alapsztringen, ahny mintt
akarok keresni, mg itt egyszerre akrhny mintt illeszthetnk.
Pl. Legyen az alapsztring ABADCBECABF, s a keresett sztringek BAD, BED, CAB, AB.
Ekkor U = (10010010010), V = (00100100101).
BAD BED CAB AB Q S teteje
A 010 000 010 10 (00000000000) -
B 100 100 001 01 (00000000010) A
C 000 000 100 00 (10010000001) B
D 001 001 000 00 (01000000010) A
E 000 010 000 00 (00100000000) D
F 000 000 000 00 (00000010000) C
(10010000000) B
(00001000000) E
(00000010000) C
(00000001001) A
(00000000101) B
(00000000000) F

35
Hierarchikus adatszerkezetek
Olyan adatszerkezetek, amelyek valamilyen rtelemben a lista ltalnostsainak tekinthetek.
A hierarchikus adatszerkezetben egy elemnek akrhny rkvetkezje lehet, de minden elemnek
csak egyetlen megelzje ltezik. 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:
A gykrelem a fa azon eleme, amelynek nincs megelzje. A legegyszerbb fa egyetlen
gykrbl ll. Mindig csak egy gykrelem van, res fban egy sem.
A levlelemek 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.
A fa kzbens elemei a fa nem gykr- ill. levlelemei, hanem az sszes tbbi eleme.
Az t a gykrelemtl kiindul, klnbz szinteken tmen, s levlelemben vget r
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 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 0. 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 nevezzk (a lenti pldban
3).
Minden kzbens elem egy rszfa gykereknt tekinthet, gy a fa rszfkra bonthat.
Beszlhetnk resfrl is, ez a fknak az a 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.

36
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:

A binrisan brzoland fa gykreleme a binris fban is gykrelem lesz. Ezek utn a binris
fa baloldali rszfjnak gykreleme legyen a 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 res ft, majd egy elemet visznk be (a gykrelemet), ezutn a
ltrehozs nem ms, mint a fa bvtse.
Bvts: Bvteni ltalban levlelemmel szoktunk, ritkbban rszfval. ltalban csak a
levlelemmel val bvtst rtelmezzk, de tetszleges helyen val bvts is rtelmezhet, a fa
tstrukturlsval jr.
Trls: Binris fbl brmikor trlhetek egy rszft, kzbens elemet ltalban 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. Pl. a lenti fnl: abdecfg.
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. Pl. a lenti fnl: dbeafcg.
postorder bejrs: res fnl vge, egybknt jrjuk be postorder mdon a baloldali, majd
a jobboldali rszft, vgl dolgozzuk fel a gykrelemet. Pl. a lenti fnl: debfgca.

37
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 NIL, 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 bvtst s a trlst
nehezebb teszi, a bejrst knnyebbb.
Brmely kifejezshez felrhat a megfelel binris fa, a 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 helyezkednek el.
Pl. ha a kifejezs az a / b + c * (d - e):

A ft klnbz mdon bejrva hrom kifejezst kapunk:


preorder bejrssal (prefix alak): + / a b * c d e,
inorder bejrssal (infix alak): a / b + c * d - e,

38
postorder bejrssal (postfix alak): 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 tartoz operandusok 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.
Pldul van egy teljesen zrjelezett kifejezsem: ((a / b) + (c * (d - e))). Az operandusok
vltozk, a mveleti jelek s a nevek egykarakteresek, 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:
typedef struct veremelem {
int mutato;
int merre; /* bal = 1 jobb = 2 */
} veremelem;

int kov_szabad_hely()
{
int i;

for ( i = 1; i <= m && ADAT[i] != ' '; i++);


if (i > m) return 0;
else return i;
}

int felepit()
{
char c, i = 0, j, irany, gyoker;
veremelem VEREM[n + 1];
int p = 0;
veremelem ve;

j = kov_szabad_hely();
gyoker = j;
irany = 1;
i++;
while (i < m) {
c = KIF[i];
if (c == '(') {
ve.mutato = j;
ve.merre = irany;
p++;
VEREM[p] = ve;
j = kov_szabad_hely();
if (irany == 1) MUTATOB[VEREM[p].mutato] = j;

39
else MUTATOJ[VEREM[p].mutato] = j;
irany = 1;
}
else if (c == ')') {
ve = VEREM[p];
j = ve.mutato;
if (ve.merre == 1) irany = 2;
else p--;
}
else {
ADAT[j] = c;
irany = 2;
}
i++;
}
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 mikor a baloldali rszfra megyek, tudjam hova kell visszatrnem. Az algoritmusnak akkor
lesz vge, mikor a verem kirl.
void bejar_preorder(int gyoker)
{
veremelem VEREM[n + 1];
int p = 0, f;
veremelem ve;

if (gyoker != 0) {
f = gyoker;
do {
if (f != 0) {
printf("%c\n",ADAT[f]);
p++;
ve.mutato = f;
ve.merre = 1;
VEREM[p] = ve;
f = MUTATOB[f];
}
else {
ve = VEREM[p];
f = ve.mutato;
if (ve.merre == 2) p--;
else VEREM[p].merre = 2;
f = MUTATOJ[f];
}
} while (p != 0);
}
}

40
A fa inorder bejrsa:
void bejar_inorder(int gyoker)
{
veremelem VEREM[n + 1];
int f, p = 0;
veremelem ve;

if (gyoker != 0) {
f = gyoker;
do {
if (f != 0) {
p++;
ve.mutato = f;
ve.merre = 1;
VEREM[p] = ve;
f = MUTATOB[f];
}
else {
ve = VEREM[p];
f = ve.mutato;
if (ve.merre == 1) {
printf("%c\n",ADAT[f]);
VEREM[p].merre = 2;
}
else p--;
f = MUTATOJ[f];
}
} while (p!=0);
}
}

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.

41
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 ugygy ellltjuk a gykr nj = (n - nb - 1) elemszm jobb oldali rszfjt.

Az ltrehozs 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;
}
}

Pl. Ha a fa elemei: 8, 9, 11, 15, 19, 20, 21, 7, 3, 2, 1, 5, 6, 4, 13, 14, 10, 12, 17, 16, 18.
Ekkor n = 21, nb = 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.

42
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: Vegyk az elemeket az adott sorrendben. Az els elem lesz a fa
gykere. A msodik elemet vve keressk meg, hogy szerepel-e mr a fban. Ha igen, akkor hiba
trtnt (ktszer nem lehet benne ugyanaz az elem), ha nem, akkor dntsnk, 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. Beillesztjk az j elemet
a rszfba: addig megynk, amg levlelemet nem tallunk, mert mindig levlelemmel bvtnk.
Alkalmazsa: Adva van 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();

43
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)++;
}

main(){
gyoker = NULL;
scanf( %s, &k);
keres(k,gyoker);
kiir(gyoker,0);
}

A keresfbl fizikailag brmely elem trlhet. Hogyan tudjuk megvalstani? 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. A trlend elemnek nincs rkvetkezje (levlelem): Nincs gond, simn megkeressk s
trljk. Pl. a 22 trlse hiba (mert nincs a fban), a 13 trlse:

2. 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).
3. 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. Pl. a 10
trlse.

REF *q;

void tor (REF *r)


{
if (r->jobb != NULL) tor(r->jobb);
else {
q->kulcs = r->kulcs;

44
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.
Mveletek
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:
Balra bvtnk, amikor a jobboldali rszfa magassga eggyel nagyobb volt (mbal < mjobb a
beszrs eltt). A fa kiegyenslyozdik.
gy szrunk be, hogy korbban tkletesen ki volt egyenslyozva a fa (mbal = mjobb a
beszrs eltt). A fa mg a beszrs utn is kiegyenslyozott.
Balra bvtnk, de a baloldali rszfa volt a magasabb (mjobb < mbal a beszrs eltt), a
kiegyenslyozottsg, gy ki kell egyenslyozni a ft mutatcservel. Egy-egy ilyen
kiegyenslyozsi lps kt vagy hrom elemet rint, ezeket forgatni kell. t kell szervezni
a ft, a tl hossz gat helyre kell billenteni. Alesetek:

45
Pldk az alesetekre:
I. 1-el bvtek

II. 3-mal bvtek

III. 3-mal bvtek

IV. 5-tel bvtek.

46
Trls: A kiegyenslyozott fban a trlshez a kiegyenslyozott fban val trlst ki kell
egszteni, s kiegyenslyozst kell vgezni. Legyen a plda a kvetkez:

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

II. Trljk a 8 elemet az elz fbl!

III. Trljk a 6 elemet az elz fbl!

IV. Trljk az 5-t!

V. Trljk az 1-et!

47
VI. Trljk a 7-et!

Piros-fekete fa: Specilis keresfa, minden elemnek van egy szne (piros vagy fekete).
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. Teht az ilyen
fk megkzeltleg kiegyenslyozottak. A piros-fekete fa elemeinek deklarcija, hasonl a binris
keresfa elemeinek deklarcijhoz, azaz minden pont tartalmaz egy kulcs, bal s jobb mezket, de
a binris keresfktl eltren egy szn mezvel bvl a deklarci.
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 NIL cscs 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, a magassg
maximum 2lg(n+1).

Inorder mdon bejrva a ft az elemeinek rendezett sorozatt kapom.


A piros fekete fkon ugyanazokat a mveleteket tudjuk elvgezni, mint a binris keresfkon,
csak bizonyos mveletek esetben szksg van a fa tsznezsre s tszervezsre, pl. 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 tsznezsvel s
forgatsval tudunk eljutni.
A forgats mutatcserkkel reprezentlhat. Mdostja a fa szerkezett, de megrzi a keresfa
tulajdonsgot.

48
A b elem balra forgatsa esetn felttelezzk, hogy a b jobb oldali fia nem NIL. Ekkor a
forgats a b elem s jobboldali gyermeke (a) krl trtnik. A forgats utn az a lesz a rszfa j
gykere, a b az a bal fia, s az a bal fia a b jobb fia. A jobbra forgats hasonlan trtnik, az a s a
b cscsok, valamint a jobb s a bal oldalak felcserlsvel.

Bvts: Levlelemmel bvtnk, ugyangy, mint a keresfnl: megkeresem a bvt elem helyt
s berakom. Az j elem sznt lltsuk pirosra, s tartozzon kt NIL elem hozz. A 3. tulajdonsg
srlhet, ha a bevitt elem megelzje is piros. Tegyk fel, hogy a gykr szne fekete!
Az x elemet szrom be, az x megelzje u. Az u s az y azonos szinten vannak, megelzjk z.
Az x piros, s megelzje, u is. A fa bvtsnl hat alapeset van, ebbl 3-3 szimmetrikus (hrom
esetben x szlje jobb, a msik hrom esetben bal oldali gyermeke az x nagyszljnek). A
nagyszl mindig ltezik, mert feltevsnk szerint a gykr szne fekete, x szlje pedig piros.

1. eset. Az u s az y piros, z fekete. Ekkor az u s az y legyen fekete, z pedig legyen piros, majd
egy szinttel feljebb kell tolni a problmt. (a, b bra)

2. eset. Az y fekete, az u piros, az x jobb oldali rkvetkezje u-nak. Ekkor hajtsunk vgre egy
balra forgatst az u krl, ezzel elll a 3. eset. (b, c bra)

3. eset. Az y fekete, az u piros, az x bal oldali rkvetkezje u-nak. Ekkor az u, x szlje legyen
fekete, z, az x nagyszlje piros, s hajtsunk vgre egy jobbra forgatst u krl. (c, d bra)

49
Az 1. esetben lehet, hogy a gykr piros lesz. Minden algoritmust gy zrunk, hogy a gykr
legyen fekete.

Trls: Trlskor megkeresem az elemet, s vgrehajtom a trlst, ugyangy, mint a binris fknl.
Ha a trlend elem szne piros, akkor nem srl a piros-fekete tulajdonsg. Viszont ha fekete, akkor
a 3. s a 4. tulajdonsg is megsrlhet.
Ha a trlend cscs szne fekete, akkor minden olyan t, amely tmegy a trlend ponton,
eggyel kevesebb fekete pontot fog tartalmazni. Teht minden olyan pontra, amely se a trlend
pontnak, nem teljesl a 4. tulajdonsg. Ezt a problmt kikszblhetjk, ha gy tekintjk, hogy az
x pont egy extra fekete rtket tartalmaz. Vagyis minden olyan t fekete pontjainak szmhoz
hozzad egyet, mely tmegy az x ponton, ekkor teljeslne a 4. tulajdonsg. Mikor eltvoltjuk a
fekete y pontot, akkor a fekete rtkeket tovbbadjuk az x finak. Az egyetlen problma akkor van,
ha x mr eredetileg is fekete volt, gy ktszeresen fekete lesz, ami srti a 2. tulajdonsgot.
Ha fekete elemet trlk, a trlt elem rkvetkezjre rkldik a szne. Ha ez a szn a piros,
akkor rendben van, ha fekete, akkor ezt mozgatom felfel a fban. Ha eljutok a gykrelemig, akkor
a gykeret ki kell mozgatnom a fbl, amg
1. x olyan pontra mutat, amely piros szn, ekkor az utols sorban feketre sznezzk, vagy
2. x a gykrre mutat, s ekkor az extra fekete egyszeren elhagyhat, vagy
3. alkalmas forgatsokat s tsznezseket hajtunk vgre.
A trlsnek nyolc alapesete van, ebbl ngy-ngy szimmetrikus. A trlend elem a z, a
rkvetkezi pedig x s y.

50
1. eset. A trlend pont (y) piros szn, ekkor ltezik neki fekete gyermeke. Felcserlve y s z
pontok sznt, majd egy balra forgatst vgrehajtva az z pontra, a piros-fekete tulajdonsg
vltozatlanul teljeslni fog. Az x pont j testvre ekkor fekete lesz, gy az 1. esetet a 2., 3. vagy
4. esetre transzformltuk.

A 2., 3. s 4. esetekben az y szne fekete. A tovbbi eseteket y gyermekeinek sznei alapjn


klnbztetjk meg.
2. eset. Az y mindkt gyermeke fekete szn. Mivel y szintn fekete, elvetnk egy fekett x-tl s
y-tl, gy x egyszeresen fekete, y pedig piros lesz, s x j szljnek pedig tadunk egy extra
fekett.

3. eset. Az y fekete, bal gyermeke piros s jobb gyermeke fekete. Felcserlve y s bal
gyermeknek sznt, majd egy jobbra forgatst vgrehajtva az y pontra, a piros-fekete
tulajdonsg vltozatlanul teljeslni fog. Az x pont j y testvre fekete s y-nak a jobb gyermeke
piros lesz, gy a 3. esetet a 4. esetre transzformltuk.

4. eset. Az y fekete s jobb fia piros, a bal oldali mindegy, milyen. Az y-nak, x megelzjnek (z)
s y jobboldali gyermeknek sznt megvltoztatva (ellenkezjre lltva), majd x megelzje
krl balra forgatst vgrehajtva, eltrljk az x-rl az extra fekett, anlkl, hogy
megsrtennk a piros-fekete tulajdonsgot. Ezutn az x felveszi a gykr rtkt.

51
A gykeret a trls vgn mindig feketre kell vltoztatni. Piros-fekete fkban 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 NIL mutatjuk.
Clunk az, hogy hasznljuk ezeket a 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 plusz mutat: a megelz elemre
mutat, ezltal gyorstja a bejrst.

Tbbg fk: Tbbg rendezett fk esetn is lehet rtelmezni a bejrst. Pl. 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: annyinak kell lennie, hogy minden elem
kezelhet legyen. A karbantartsa knny, de sok helyet foglal. Nincsenek ltalnos elvek ill.

52
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 / log k hivatkozssal meg tudom keresni
az adott elemet. ltalban akkor hasznljuk, ha van kulcs az adatoknl.
A B-fa defincija: A B-fa elemi lapok sszessge. Minden lap maximum 2n db elemet
tartalmaz, s minden lap, kivve a gykrlapot, legalbb n db elemet tartalmaz, a gykrlap
legalbb egyet. 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) helyezkedhet 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 s a mutatk NIL rtkek. Egy lap szerkezete:

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


gykrelembl indulva. A kulcsokra vonatkozan a lapon a kulcsokat vgig kell keresnnk, sok

53
elemnl binrisan. Ha megtalljuk, rendben van. Ha nem talljuk meg, akkor a lehetsges esetek a
kvetkezk:
1. ki < x < ki+1: Az x a lapon elhelyezett kt kulcs kz esik. Abban a rszfban kell
keresnnk, amelyre a pi mutat.
2. x < k1: A keresett kulcs kisebb a lapon lv legkisebb kulcsnl. A p0-al cmzett,
legbaloldalibb rszfa gykert kell megnznem.
3. km < x: A keresett kulcs nagyobb a legnagyobb kulcsnl. A pn-nel 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.
1. 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.

2. 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 az egyetlen eset, hogy a fa
magassga vltozhat egy szinttel, egybknt nem vltozik.
Pl. 41-el akarok bvteni.

Trls: Brmely laprl lehet.


Meg kell keresni az adott kulcs elemet. Ha a trlend elemet levllapon talltuk meg, akkor
fizikailag trlm, a mutatkkal nem kell foglalkozni. Ha nem levllapon talltuk meg, akkor a
trlend elemet fellrom a rendezettsgben az t megelz vagy a rkvetkez levllapon lv
elemmel, s azt trlm.
Ha az adott lapon az elemek szma minimlisan n marad, akkor nincs baj. Elem trlse annyit
jelent, hogy a tle jobbra llkat 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.
Pl. 45 trlse.

54
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. 25 trlse.

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 telem lista(amelynek utols
eleme egy(telem lista))). LISP dolgozik ezzel az adatszerkezettel. Tekintsk az albbi rendezett
ft:

Ennek egy reprezentcija: (a(b)(c(d)(e)(f(g)(h)))(i)). 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.

55
Hls adatszerkezetek (hl)
A grf egy homogn, dinamikus adatszerkezet, 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. A grfnak nincs
kitntetet eleme.
A grf hlzatok modellezsre hasznlhat, reprezentlni sszefgg irnytott grf
segtsgvel lehet. A szkebben vett szmtstechnikban csak a hlzatoknl jelenik meg.
Pl.

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 a szmszdsgi mtrix n n-es. Az oszlopokat s a sorokat is a grf
elemeivel cmkzzk fel. A mtrix kitltsnek szablya: a mtrix (i,j) eleme legyen
0, ha az i s j cscsok kztt nincs rkvetkez vagy megelz viszony,
klnben 1.
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

A grf 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

A grfon bell tnak nevezzk az olyan elemsszessget, amelyek listt alkotnak (pl. a-c-d-b).
A grfban krtnak nevezzk az olyan listt, amikor az utols elem az elsre mutat (pl. b-c-d).

56
A grfok szereprl a kvetkez krdseket rdemes feltenni:
Ltezik-e olyan t a grfban, amelyben az sszes elem benne van (maximlis t)?
Egyes csompontokbl melyik msik csompontokba vezet 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 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: Megkeresem az elemet s fellrom.
Rendezs, keress: Nincs.
Bejrs (keress, hl): Ezen alapszik a grf feldolgozsa. Ltezik szlessgi s mlysgi bejrs.
I. Szlessgi keress
Az algoritmus a bejrs pillanatnyi llapott a cscsok sznezsvel (fehr, szrke,
fekete) tartja szmon. Kezdetben minden cscs fehr, s ksbb szrkre, majd feketre
vltozhat. Egy cscs elrtt vlik, amikor elszr tallunk r a keress sorn, s ezutn a
szne nem lehet fehr. gy a szrke s a fekete cscsok mr elrt cscsok, de a szlessgi
keress megklnbzteti ezeket is: egy fekete cscs sszes szomszdja elrt cscs, de a
szrke cscsoknak lehetnek fehr szomszdjaik, ezek alkotjk az elrt s a mg
felfedezetlen cscsok kztti hatrt. Teht eredetileg minden cscs fehr, kivve a kezd
cscsot, amelyik szrke. Egy cscs akkor vlik szrkv, amikor elrtk, s akkor
feketv, ha a belle kiindul sszes lt mr tvizsgltuk.
A szlessgi keress ltrehoz egy szlessgi ft, amely kezdetben csak a gykeret
tartalmazza. Kezdpontnak azt az elemet rdemes vlasztani, amely a legtbb
rkvetkezvel rendelkezik. A fa gykre az s kezd cscs. Ha egy fehr v cscsot elrtnk
egy mr elrt u cscs szomszdsgnak vizsglata sorn, akkor a ft kiegsztjk a v
csccsal s az (u,v) llel. Egy cscsot legfeljebb egyszer rhetnk el.
Az algoritmus kezdetn minden, az s-tl klnbz cscs sznt fehrre kell lltani.
A rkvetkezit a Q sorban troljuk, ebben kezdetben csak az s van, majd elemei a szrke
cscsok lesznek. A Q elemeit egy ciklus dolgozza fel, amely addig fut, amg el nem
fogynak a szrke cscsok (minden cscs fekete nem lesz), azaz amg van olyan cscs,
amelynek szomszdsgi listjt mg nem dolgoztuk fel. A ciklusban kivlasztjuk a Q sor
legels elemt, s ha ennek van olyan szomszd cscsa, amelyet mg nem rtnk el, azaz
fehr, akkor a Q sor vgre fzi a cscsot. Ha a kivlasztott cscs minden szomszdjt
megvizsgltuk, akkor a cscsot vegyk ki a sorbl, s sznt vltoztassuk feketre.
II. Mlysgi keress
A mlysgi keress sorn az utoljra elrt, j kivezet lekkel rendelkez v cscsbl
kivezet, mg nem vizsglt leket dertjk fel. Ha v-hez tartoz sszes lt megvizsgltuk,
akkor a keress visszalp, s megvizsglja annak a cscsnak a kivezet leit, amelybl v-
t elrtk. Ezt addig folytatja, amg el nem ri az sszes cscsot, amely elrhet az eredeti
kezd cscsbl. Ha marad olyan cscs, amelyet nem rtnk el, akkor ezek kzl
valamelyiket kivlasztjuk, mint j kezd cscsot, s az eljrst ebbl kiindulva
megismteljk. Ezt egszen addig folytatjuk, amg az sszes cscsot el nem rtk.
A szlessgi keresshez hasonlan a cscsok llapotait ebben az esetben is sznekkel
klnbztetjk meg. Kezdetben minden cscs fehr, amikor elrnk egy cscsot, akkor
szrkre sznezzk azt, s befekettjk, ha elhagytuk, azaz amikor a szomszdsgi

57
listjnak minden elemt megvizsgltuk. Ez a mdszer biztostja, hogy minden cscs
pontosan egy mlysgi fba kerljn, azaz, hogy ezek a fk diszjunktak legyenek.
A sznezs ugyangy trtnik, mint a szlessgi keresnl, de alapvet klnbsg az,
hogy a ft szintenknt ptem fel.

58
Heterogn adatszerkezetek
Az adatszerkezet elemei ms-ms tpusak lehetnek.

REKORD (record, tuple)


A rekord, mint a trban ltez adatszerkezet, statikus. Kttt szm s kttt sorrend mezbl
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: Ltrehozom 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.

59
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
A logikai llomny adatelemekbl (adatttelekbl) pl fel. Az 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.
Az adatcsoport az adatelemek nll nvvel elltott egyttese. Tpusai:
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.
A logikai rekord az adatelemek s adatcsoportok adott sorrend, logikailag sszetartoz
egyttese. Nincs nll neve.
A rekordformtumok a logikai rekordok szerkezetre vonatkoz osztlyozst tartalmazzk.
Tpusai:
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
hogyan tudom kezelni.
A logikai rekordazonostnak nevezzk azt az adatelemet, vagy az adatelemeknek azon
egyttest, amelynek vagy amelyeknek rtke egyedi, azaz minden konkrt rekordban ms s ms
(pl. szemlyi szm, sorszm stb.). Lehet, hogy ltezik, lehet, hogy nem. Ha ez egyetlen adatelem,
akkor egyszer, egybknt sszetett rekordazonostrl beszlnk.
A logikai llomny a logikai rekordok valamilyen feldolgozsi cl, tartalom, vagy forma szerint
sszetartoz egyttese, amelyet 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.

60
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)
hierarchikus: 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


A 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.
A mezcsoport megfeleltethet az adatcsoportnak, az adatcsoport megjelentsre szolgl.
A blokk megfeleltethet a logikai rekordnak, a fizikai llomny pedig megfeleltethet a logikai
llomnynak, nem ms, mint blokkok sorozata. A fizikai llomnynak sajt neve van, ennek
kezelse opercis szinten zajlik.
A 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 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
brzolsi md megadsval lesz fix. Szveges tpusnl a sztringnl megbeszlt brzolsi mdok
mindegyike rvnyes.
I. 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. 1 blokk 1 rekord: Az sszes blokkjellemzt tudom.
2. 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.
3. Szegmentls: Meg kell mondani a rekord feltrdelst (azonos hossz byte-sorozatokra
bontom szt, de a szerkezetk nem lesz azonos), s ez minden rekordra ugyanaz lesz. Csak
egyszer kell trdelni, s az utols blokk lehet rvidebb.
II. Vltoz hossz
1. 1 rekord-1 blokk
A. A blokk mrete rgztett, gy vlasztom meg, hogy a leghosszabb rekord is belefrjen.

61
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.
B. A blokkmret megegyezik a rekordmrettel. A blokk is vltoz hossz lesz, a blokk
elejn jellni kell a blokk hosszt.

2. 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 maximlis 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 informci, a blokk mrete
is.

D. 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.

III. 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 byte-nak van
lemezcme.
A logikai rekordazonost fizikai szinten az (elsdleges) kulcs, a msodlagos kulcs azon
adatelemekbl ll, amely(ek) nem tartoznak logikai rekordazonosthoz.

62
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 (Mindig logikai rekordra vonatkoznak.)


Ltrehozs: Az llomnyt valamelyik httrtron hozom ltre. Ki kell vlasztanom a fizikai
llomny szervezsi mdjt, vagyis 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:
I. Logikai trls
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.
1. Trlbjtot alkalmaznak, hogy eldnthet legyen, hogy tnyleges rekord-e, vagy
mr logikailag trlt. Ez plusz 1byte-on trolhat.
2. 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.
II. Fizikai trls
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 tevkenysg, mikor az llomny brmely rekordjt akarom megfogni. Figyelembe
kell-e venni a tbbi rekordot?
I. soros elrs: Alapja a rekordok fizikai sorrendje (ahogyan elhelyezkednek a rekordok a
httrtron).
II. szekvencilis elrs: Az alapja valamilyen logikai sorrend, az x. rekordot csak az eltt
llk elrse utn rhetem el.
III. 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.

63
A mveletek szervezsi md fggek. llomnyszerkezetek (szervezsi mdok):
I. egyszer: Csak a logikai rekordokat tartalmazza.
II. 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,
amikor nem fix a rekordformtum vagy szalagon vagyok.

A szerilis llomny 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.

64
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.
I. Ha egy lpsben trtnik, akkor nekem kell biztostani, hogy a rekordok csak nvekv,
vagy cskken sorrendben kerljenek be. Ez nagy llomnyoknl kiss nehzkes.
II. Ha kt lpsben trtnik a ltrehozs: Ltrehozok a rekordokbl egy szerilis llomnyt, a
rendszer ebbl elkszt egy szekvencilist, 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 az 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.
I. 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

65
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.
II. 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 pldul egy specilis bitkombinci, pl.
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. Viszont az llomny
bvthet a vgn.

Random llomny
Ha a hash-fggvny csak egyrtelm, akkor random llomnyrl beszlnk. Random
llomnynl tlcsorduls van, a szinonimkat 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, mert 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-fggvny segtsgvel.

66
Trls: Logikai trlsrl beszlhetnk, brmely rekord fellrhat csupa nullval. Lncols esetn
(ld. szinonimk kezelse) kitrlm a lncbl fizikailag is.
Csere: Fix rekordformtumnl nem problma, nem fixnl kln nyg, de megy.
Elrs: Kvzi kzvetlen. A nem tlcsordult rekordok kzvetlenl elrhetek, a tbbit keresnem
kell, de a szinonimakezelsi technikt jl megvlasztva szinte minden rekord kzvetlenl elrhet.
Rendezs, keress: Nincs.
Feldolgozs: A kzvetlen elrs alapjn.
jraszervezs: Csak logikai trls ltezik, gy a trlt rekordok 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 minimliss ttele.
Egy j hash-fggvny vagy szinonimakezelsi technika bevezetse a szerkezetet vltoztatja meg.
Hogyan kezeljk a szinonimkat?
I. 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 helyezzk el, majd a tlcsordultakat. A szksgesnl tbb rekordhelyet
kell, hogy lefoglaljak, hogy a tlcsordulshoz viszonylag kzel legyen res hely, ez gyorstja a
visszakeresst.
Teljes 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.
II. 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.
1. 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


elhelyezem 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

67
tlcsordult rekord helyt. Ez a mdszer gyorstja a bvtst s a keresst, a karbantarts
viszont bonyolultabb.
2. 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, 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 tbbletrszt lefoglalni, viszont egy msik trrszre is szksg van.
3. Osztott szabadhelyek mdszere (cilindertlcsordulsi 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 a tlcsordult s nem tlcsordult 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 problmafggk. A fejlettebb rendszerek az utols kettt kombinljk a
problma fggvnyben.
3. Vyssotzky-mdszer
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-fggvnyek 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.
I. Lncols: Az informcihordoz adatok az llomnyon bell jelennek meg (a rekord
mellett mutatmezk jelennek meg egyirnyban, ktirnyban lncols, multilista).
II. Indexels: Az llomnyon kvl jelennek meg az informcihordoz adatok.

68
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 indexelsnl a tbla egy szekvencilis llomny, indexelhet, teht e fl is
felpthetek egy indextblt. A msodik s annl magasabb szinteken nem teljes indexels van.
Ennek a mdszernek nagymret llomnynl van rtelme, elsegti a hatkonyabb keresst.
Nem teljes indexelskor az indextblban nem az sszes, csak bizonyos rekordazonostkat
tntetek fel, pl. minden huszadikat. 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 alkalmazsakor pl. nem minden azonostt tntetek 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 szerepel a 2. oszlopban,
s mindegyik 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
I. 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 azonostval rendelkez rekordra fog mutatni.

69
Egyestjk a szerilis llomny knny karbantarthatsgt a szekvencilis llomny
knny feldolgozsval.
Mveletek
Ltrehozs: Kt lpsben valsthat meg.
1. Felvisszk a rekordokat, azaz ltrehozzuk a szerilis alapllomnyt (mutatmezkkel).
2. Az llomnyra rillesztem az adatszerkezetet: elksztjk 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 egyirnyban 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.

II. 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. Tbbszint 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.
1. A tbbszint indexels esetn bucket technikt alkalmazunk, az sszes indexszintet t
kell szervezni. A bucketek kialaktsnl a szekvencilis llomnyt tbb szekvencilis
llomnyra osztjuk. 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

70
a bucketek tszervezsrl lesz sz.
Az indextbln bell csoportokat kpeznk, s ezen csoportokban nem minden
helyet tltnk ki. A tblzat egy hzagosan vagy linerisan kitlttt tblzat, gy a
csoportokon bell lehet bvteni. A f hangsly az elsdleges indexelsen van.

Trls: Alapllomny szinten csak logikai trls van. A felsbb szinteken, az indextblban
fizikai trlst is alkalmazok, gy hogy trlm a megfelel indexberst. 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:
1. soros: A fizikai, avagy az alapllomnybeli, bekerlsi sorrend szerint.
2. szekvencilis: Ha vgigmegyek az indextbln, minden egyes index tagot
feldolgozok. A logikai sorrend szerinti elrs.
3. 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 vltozatlan.
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.
Indexelt szekvencilis llomny
A kzvetlen elrs megteremtse a cl a szekvencilis llomnynl. Klnbz krdsek
merlnek fel a mveleteknl:

Mveltek

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

71
hardverindexels. Itt lehet elsdleges szinten is nem teljes indexels. Milyen bvtsi technikt
alkalmazzunk? Problma a bvts megvalstsa, hiszen az alapllomnyom rendezett.
Bvts:
I. 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. A gyakorlatban szinte soha nem fordul
el.
II. Fggetlen tlcsordulsi terlet alkalmazsa
1. Lncols
A random llomnynl megbeszltek rvnyesek ide is. A bvt rekordok
kezelst fggetlen tlcsordulsi terleten 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 bvt rekord 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.
2. Csoportok
Csoportosts az alapllomny rekordjainl. Nem teljes indexelst alkalmazunk,
hanem az elsdleges llomny rekordjait csoportokra osztom s a kapott csoportokat
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 nvekv sorrendben 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

72
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 csoport
cmt, az adott csoport kialaktskor meglv 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.
Pl. 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 kvetkezkppen 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 ltrehozskor meglv 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.
3. Osztott szabad helyek mdszere (cilinder-tlcsordulsi terlet alkalmazsa)
A tlcsordult rekordok adott cilinderre kerlnek, hasznlhatok cilinder s
fggetlen tlcsordulsi terletet egyszerre. Csak olyan lemezek esetn alkalmazhat,
ahol egy cilinderen bell tbb sv van. A cilinder svjai kzl nhnyat az elsdleges
adatterletnek, mg msokat a tlcsordult adatterletnek tartjuk fenn. Itt a tlcsordult
s a nem tlcsordult 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 problmafggk. A fejlettebb rendszerek az elz kt mdszert
kombinljk, cilinder s fggetlen tlcsordulsi terlet mdszert egyszerre hasznljk,
a problma fggvnyben alkalmazhatv vlnak.
4. Mutattmb
Van tlcsordulsi terlet, amely vagy fggetlen, vagy cilinder 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
teszi:
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 sorrendje
jelenti a szekvencialitst. Az indextbla egy sorban brmennyi tlcsordult rekord
lehet, a mrete a bejegyzsek szmval egytt vltozik. Ez egy viszonylag ritkn
alkalmazott megolds.

73
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 tlcsordult 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?

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 rekordoknak 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 rszlista-fejeket

74
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 rendezve 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 kulcsrtk fordul 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.
I. Olyan msodlagos kulcsrtkkel bvtek, amely mr elfordult egyszer. A tblzat mrete
nem vltozik, az j rekordot be kell illeszteni a lncba.
1. 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.
2. 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.
3. Szoks egy negyedik oszlopot bevezetni, ahol a lnc utols elemnek cmt troljuk. A
bejegyzsek vltoznak, a sorok szma nem.
II. 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.

75
Trls: Logikai trls van 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 ottaniaknak 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 nyelvvizsgval 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 rint 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 cilinderen 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 indexels 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.

76
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:
I. Indextblzat ltrehozsa.
II. Bvtnk j rekordokkal, az llomny dnti el, hogy az fizikailag hova kerl.
1. 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.
2. 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 llomnyszerkezet,
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 Budapest 1 0 0 1 1
0 Debrecen 0 0 0 0 0
1 zd 0 1 0 0 0

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

77
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 oszlopot 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 hozzfrni, 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). Relcis
adatbziskezelknl alapvet.

VSAM
Az IBM-nl a 60-as vekben alaktottk ki. Komplex llomnyszerkezet. A PL/1 is ismeri.
Olyan llomnyszerkezetet, mely tbb llomnyszerkezetet egyest magba, s ahol nem kell
foglalkozni a fizikai szerkezettel, csak a logikaival.
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 kontrollterleten n darab
kontrollintervallum maradjon resen.

78
Logikailag a kontrollterletek sorba llthatk:
az egy kontrollterleten belli kontrollintervallumok sorrendje adott,
az egy kontrollintervallumon belli rekordok sorrendje adott.
Ez alapjn 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.

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 byte-
sorszmt, 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 szekvencilis 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.
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 specilis 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.
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.
I. 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

79
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.
II. Ha nincs elegend szabad byte a megfelel kontrollintervallumban:
1. Ha van szabad kontrollintervallum a kontrollterleten, akkor kontrollintervallum-
felezst hajtunk vgre.
A. 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.
B. 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.
C. A keletkezett helyre elvgezhet a beszrs.
2. Ha a kontrollintervallum-felezs nem valsthat meg (mert nincs szabad
kontrollintervallum), kontrollterlet-felezst hajt vgre.
A. Lefoglal egy j kontrollterletet, s a teli kontrollterlet (logikailag utols) felt
tviszi az j kontrollterletre, a kontrollintervallumok szekvencialitsa megmarad.
B. Az indexszerkezet trja: aktualizlja a bejegyzseket, talaktja a lncolst a
megfelel mdon, hogy az a logikai sorrendet tkrzze.
C. 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:

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.

Ugyanezt jtszanm el a 24-gyel, de a kontrollintervallumban mr nincs elg szabad hely a


szmra, kontrollintervallum-felezst kell vgrehajtani, s mdosulnak az indexrekord-bejegyzsek
is a logikai sorrendnek megfelelen.

80
Ha a 44-t akarom beszrni, kontrollterlet-felezsre van szksg, s az indexrekordok
lncolsval megmarad a szekvencialits.

Trls: A KSDS llomnyban van fizikai trls is, mshol csak logikai. Megkeresem a trlend
rekordot. Ha megtalltam, akkor a mgtte lv rekordokat 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.
I. Ha a cserlend rekord hossza megegyezik az j rekord hosszval, akkor nincs problma.
II. Ha nagyobb, akkor az resen maradt helyre rhzzuk a mgtte lev rekordokat.
III. Ha kisebb, a szabadon maradt byte-okat hasznlhatom fel (ld. bvts).
Keress: Mindig nagyobb-egyenlre keres.
Feldolgozs:
I. A fenti keressi szisztmval kzvetlen elrst tudunk realizlni, nagyobb-egyenlre
vgignzi.
II. 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).
III. 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.

Alternatv indexek
A VSAM a KSDS llomnyokra automatikusan felptett elsdleges indexen kvl lehetsget
ad arra, hogy minden KSDS s ESDS llomnyra tovbbi egy vagy tbb , n. alternatv indexet
ptsen fel. Az alternatv index az elzekben emltett VSAM llomnyok (KSDS, ESDS) logikai
rekordjainak brmely olyan adatmezjre felpthet, mellyel kln hozzfrst kvnunk
biztostani ugyanazon llomny rekordjaihoz.
Az alternatv indexek teht lehetv teszik, hogy egy VSAM llomnyt (RRDS-t nem) tbb
szempont szerint is feldolgozhassunk, illetve annak logikai rekordjait klnbz utakon elrjk
anlkl, hogy tbb msolatot tartannk ugyanarrl az adatllomnyrl. Pldul egy dolgozi
trzsllomnyt, amit brelszmolsnl hasznlunk, a dolgoz szma mint rekordazonost szerint
KSDS szerkezetre alaktunk ki, de ha a dolgozi trzsrekord egyb adatmezi szerint is fel akarjuk
dolgozni az llomnyt, mint pldul a dolgoz neve, szletsi ve, stb., akkor ezekre a msodlagos
kulcsokra alternatv indexeket pthetnk. Ezen alternatv indexek mindegyikt klnbz
felhasznli programok hasznlhatjk.
Egy alternatv indexnek egy ESDS llomnyban ugyanolyan rendez (rendszerez) funkcija
lehet, mint egy KSDS file-ban az elsdleges indexnek. Ezt a gondolatmenetet folytatva ltni kell,
hogy egy ESDS llomny rekordazonostjra felptett alternatv index indexelt szerilis struktrt
hoz ltre, mely bizonyos esetekben sokkal hatkonyabban felhasznlhat, mint egy indexelt

81
szekvencilis file (lsd indexelt szerilis llomny). Teht ez azrt nagy jelentsg, mert nemcsak
az indexelt szekvencilis szerkezet file-ok rendelkeznek szoftvertmogatssal, hanem az indexelt
szerilis szerkezet file-ok is, a VSAM ESDS llomny rekordazonostjra felptett alternatv
indexen keresztl.

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.

82
B+-fa
Adatbzis-kezel rendszerek mgtt B+-fk indexelsi mdszere ll. A B+-fa a B-fk olyan
mdostott vltozata, melyet llomnyok indexelsre hasznlnak.
Az alapllomny szekvencilis 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 ltrehozskor a lapokon legyenek res helyek minden szinten. Manapsg az
sszelncols is jellemz tulajdonsg.
Szerkezetkben klnbznek a levl- s a kzbens lapok.
I. 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:

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.

II. A levllapok szerkezete:

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
llomnyba. pq a fban a tle kzvetlenl jobbra elhelyezked levllapot cmezi.

Teljes indexels van, minden rekord cmezve van. A levllapok azonos szinten
helyezkednek el.
Egyes rendszerekben a levllapok 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+-fa
rendje. Lefoglaljuk az els lapot, rpakoljuk az els kulcsot s belltjuk a mutatt. A kvetkez
elemmel ugyanezt tesszk. A jobb szlen lev levllap mutatja mindig NIL.

83
Betelt a lap, az 1 beszrsnl mr laposzts kell:

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

A 12 beszrsa utn:

A 6 beszrsa utn:

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

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:

84
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:
I. Az egy lapon elhelyezett elemek szmt mskpp szablyozzk. A lapok jobb kitltsre
szolgl, minden lap minimum 2/3 rendig ki van tltve (B*-fa).
II. A kitltttsget (50-100%) a felhasznl adhatja meg.

85

Anda mungkin juga menyukai