Fizikai (adat) trszerkezetek: Meg kell klnbztetni az operatv trat, vagy memrit,
amelynek brmelyik bjtja kzvetlenl elrhet. Vannak mg a httrtrak, vagy
perifrik. Ezeknl van mechanikai mozgs. A mgneslemeznl nem pontos az a
kifejezs, hogy kzvetlen elrs, mert br mindegyik elem elrhet, de ez nem
ugyanannyi id alatt trtnik. Az adatszerkezetek egyik fajtja az llomnyok (file).
llomny csak perifrin ltezik. Adatszerkezet, amelyik perifrin ltezik, az az
llomny. (data structure - adatszerkezet)
Adatszerkezetek szemlltetse:
Egy-egy elem ltalban adatcsoporttal jellemezhet. Az adatcsoport adatai mindig
sszefggenek. Az adatszerkezetek adatttelekbl, adatelemekbl llnak. Ezek kztt
valamilyen kapcsolat ll fenn. Adatelemek: o, kapcsolat: .
Adatszerkezetek osztlyozsa:
Rendezs
Keress
Bejrs (elrs): Az adatszerkezet minden elemt rinteni akarom, krds, hogy ezt milyen
sorrendben tehetem. Lehet soros (az adatszerkezet elemeit valamilyen fizikai sorrend alapjn
tudjuk megfogni, ahogy le vannak kpezve (ld. mgnesszalag)), szekvencilis (valamilyen
logikai sorrend az alapja (ld. sztszrtan trolt elemek)), vagy kzvetlen (fggetlen a tbbi
adatelemektl (ld. folytonos trols)).
Feldolgozs: Az adott adatszerkezet hogyan s mire hasznlhat.
Adatszerkezetek trolsa
A logikai adatszerkezeteket le kell kpezni a trba. A memriban ktfle mdon
trolhatunk adatszerkezeteket.
1. Folytonos (szekvencilis, vektorszer) trols. Ha a memriban trolt elemek egy
folytonos trterleten egyms utn helyezkednek el, sorba rendezzk ket valamilyen
szempont szerint. Az adatttelek trolsi jellemzi azonosak (tpus, brzolsi md, hossz).
Ismerni kell a kezdcmet, a trolsi jellemzket, s az elemek
szmt. Itt minden elemet kzvetlenl meg tudok fogni, minden adatszerkezet trolhat
ilyen mdon.
Mveletek:
Ltrehozs: Az adatelemeket, adattteleket egy-egy trrszbe helyezem el. A kezdcmtl
minden ttelt folytonosan pakolunk a trba.
Bvts: A vgre jabb elemeket lehet rakni. Beszrsnl az adott elem behelyezsnek
helye utn lv elemeket jobbra kell tolni, t kell mozgatni.
Trls: Megklnbztetnk fizikai s logiakai trlst:
Fizikai trls: A trrsz mgtt lv elemeket rcssztatom a trlend elemre,
mindegyiket eggyel balra.
Logikai trls: Az elemek szma nem cskken. A trlni kvnt elemet megjellm,
hogy trlve van ( trlt jellel). Ekkor az adatelem rtke vltozik meg, gy ez
valjban egy csere.
Csere: brmely elem kzvetlenl megfoghat.
Rendezs: Ha van rtelme, akkor mindegyik rendezsi algoritmus alkalmazhat.
Keress: Ha van rtelme, akkor minden keressi algolitmus alkalmazhat.
2. Sztszrt trols (vletlenszer). Az adatelemek trolsi jellemzik lehetnek
klnbzek. Minden adatszerkezet trolhat sztszrtan.
A tnyleges adatelem mellett ltezik a trrsznek egy gynevezet mutat rsze is,
amely olyan informcit tartalmaz, hogy az adott trelem utn melyik msik trelem
kvetkezik az adott adatszerkezetben.
a) Egyirnyban lncolt lista (linked list)
Trszerkezet vagy trolsi md.
reslista:
Mveletek:
Ltrehozs: Els lpsknt ltrehozom az reslistt, utna bvtek.
Bvts: A lista brmelyik helyre beilleszthetek egy j trolsi elemet:
a) A lista elejre: Lefoglalok egy helyet a trban. Brhol, de tudom a cmt. A fej az j
elemre, az jelem az eddigi els elemre mutat.
b) A lista vgn: Lefoglalom a trhelyet. Az j elem mutatja a lista vgt jelz
informci: NULL. Az utols elem mutatrszbe berom az j elem cmt, az
eddigi utols elem mutatja az j elemre fog mutatni. Az utols elemet meg kell
keresni, vgig kell menni a listn, teht szksg van egy bejrsra. Minden elem
megmondja, hogy hol a rkvetkezje.
c) Bvts a listban: Az elrs szekvencilis. (beszrs) A listnl a keress teljes
keress, ahol adatrtket keresek. Minden elemre csak gy tudok eljutni, ha eltte
vgig mentem az eltte lv elemeken. Az az elem, amin llok az aktulis elem.
Az aktulis elem el, vagy mg is beszrhatok.
Mg bvtek: A megelz elemekrl nincs informcim. Az aktulis elem
mutatrszbe az j elem cmt rom, az j elem mutatrszbe az aktulis
elem mutatrszben lv cmet rom.
Az utols elem mutatja az els elem cmre mutat. Brmelyik elembl krbe tudok
menni, a bejrst egyszersti.
c) Ktirnyba lncolt lista
Trls
Amikor adatszerkezetben trlst vgznk, akkor egy trhely felszabadul. Krds az,
hogy hogyan tudunk ezzel a szabad trhelyekkel gazdlkodni.
I.
II.
Absztrakt adatszerkezetek:
Ha az implementcitl eltekintnk, akkor beszlnk absztrakt adatszerkezetekrl. Az
implementci, a reprezentci mindig rendszerfgg, az absztrakt adatszerkezet fggetlen
tle, csak a tulajdonsgai definiljk.
HALMAZ (set)
Matematikai halmazfogalom megfeleltetse adatszerkezet szinten.
Olyan specilis halmaz, amely a halmaztl eltren ismtldst enged meg, teht
lehetnek azonos elemek.
Mindkt adatszerkezet dinamikus s vges. Beszlhetnk reshalmazrl is, viszont
vgtelen halmaz, mint adatszerkezet nem ltezik.
Specilis adatszerkezeti mveletek vannak: (,,,\ | in,+,*,)
,in: Meg lehet llaptani, hogy egy adott elem benne van-e a halmazban, vagy sem.
Eredmnye mindig logikai rtk.
, +: A multihalmazban az uni az sszes elem unijt jelenti, teht ha pl: az egyik
halmazban "a" 5x szerepel, a msik halmazban 3x, akkor unijukban 8x fog. Pl. ha
AB=C , akkor |A|+|B|=|C|.
, *: Ugyanez igaz a metszetkpzsre is, teht az elbb emltett kt halmaz metszetben
"a" 3x fog szerepelni.
A kvetkezkben definilt mveletek multihalmazra is igazak.
Mveletek
Ltrehozs:
Megadhatok egy prediktumot (felttelt). A halmaz elemei azok lesznek, amelyek
igazz teszik a felttelt. pl: X={200-nl nem nagyobb pozitv egsz szmok}
Felsorolhatom a halmaz elemeit, azaz konkrtan megadom ket. pl :
Y={fekete, piros, kk, fehr, srga}
Ltezik reshalmaz, s ehhez unival hozzpakolom az elemeket, s gy jn ltre a
halmaz.
Bvts: Unikpzssel.
Trls: Klnbsgkpzssel.
Csere: Nem ltezik, mert nem tudom megfogni az elemeket. Ha kitrlk egy elemet s jat
viszek be, akkor egy szimullt csert csinltam.
Keress: Nincs, a fenti indok miatt.
Rendezs: Nem rtelmezhet. Rendezett halmaz nem halmaz, hanem egy msik
adatszerkezet. Gyakran nincs is rtelme a rendezsnek.
Bejrs: Nincs, mert nem tudom megfogni az elemeket.
Feldolgozs: A definilt mveletek alkalmazsa.
A halmazok kztt rtelmezhet az sszehasonltsi mvelet. Kt halmaz egyenl, ha
ugyanazokat az elemeket tartalmazza, egybknt nem. Ha az egyik halmaz rszhalmaza a
msiknak, akkor az a kisebb. HK H<K
Halmazok reprezentcija: A karakterisztikus fggvnyen alapul, ltalban folytonos trolst
alkalmaznak. A reprezentcis szinten sorrend van, amikor a halmaz elemeit egy
sorrendisggel rendezett trhelyre kpezzk le. Annyi bitet foglalunk le, amennyi halmazelem
van. A tr vges, a trhely kicsi. Tudom, hogy maximlisan hny eleme van a halmaznak. A
halmaz elemeit sorrendbe rakom. A biteket 1-re lltom, ha az adott elem benne van a
halmazban, 0-ra ha nincs benne. reshalmaznak minden bitje 0. Ha minden elem benne van a
halmazban, akkor minden bit 1-es. Ez a karakterisztikus fggvny.
Pl. S= { hexadecimlis szmjegyek } Karakterisztikus fggvny: 16 bit = 2 bjt. Legyen
S={1,4,8,A}
A felttelezett sorrend: 0,1,...,E,F
Ez az S halmaz reprezentcija. Az
implementci dolga, hogy a halmaz elemei hol vannak, ezt a felhasznlnak nem szabad,
nem illik tudni. Elnye, hogy az sszes halmazmvelet visszavezethet logikai mveletre.
x (H1 H2 ) = x H1 x H2
x (H1 H2 ) = x H1 x H2
x (H1 H2 ) = x H1 x H2
Az eleme mveletet a processzor eltolssal, shift-tel valstja meg. Pl. c S : Ekkor a
processzor 10 bittel elre tolja, s megnzi, hogy 0 vagy 1 szerepel az adott biten. Ez gyorsan
vgrehajthat, de hibja, hogy a karakterisztikus fggvny nagy trhelyet foglalhat el. Ezen
ok miatt az implementcik 100-as nagysgrendnl szabjk meg a halmaz maximlis
elemszmt. Pl: Pascal: 256 db eleme lehet, ami 32 bjtot foglalhat el.
Asszociatv adatszerkezetek
Olyan halmaz, vagy multihalmaz, amelynek az elemeibl rszhalmazokat tudunk
kivlasztani. Lnyeges, hogy a rszhalmazokat milyen szempont szerint vlasztjuk ki. Ezek a
kivlasztott rszhalmazok tfedhetik egymst. A rszhalmazokat meg kell tudni fogni,
klnbztetni egymstl.
1.
2.
TMB
A rszhalmazok egyelemek s diszjunktak, s az osztlyozsba minden elem be van
vonva, ezrt minden adatelem megfoghat.
A legismertebb, a leggyakrabban alkalmazott statikus adatszerkezet. A tmb minden
eleme egsz szmok sorozatn keresztl rhet el (ezek az egsz szmok a tmbindexek). Az
indexek alkalmazsa azt teszi lehetv, hogy egyelem rszhalmazokat kpezhetnk.
Ha az adatelemekbl egy adott elem kivlasztst 1 index-szel meg tudom valstani,
akkor egydimenzis tmbrl vagy vektorrl beszlnk. Az indexnek van fels s als hatra,
amelyek az indextartomnyt definiljk. Az index tetszleges egsz szm lehet, ltalban 1-tl
kezddik. A tmbhz hozztartozik, hogy minden dimenziban rgztem az indexek kezd s
vgrtkt, rgztek egy intervallumot, ez meghatrozza az elemek szmt. Az egyes
dimenzikban lv elemek szmnak szorzata adja a tmb elemszmt.
Ha kt index segtsgvel lehet kivlasztani minden elemet, akkor ktdimenzis
tmbrl, mtrixrl beszlnk.
a s ,t 1
a
s ,m
a s 1,t
a s 1,t 1
a n ,t
a n ,t 1
a n ,m
A krds az, hogyha ismerem egy adott tmbelem indexeit, akkor hogyan tudom
meghatrozni a trbeli helyt. Ismerni kell a kezdcmet, egy elem hosszt bjtban s az
indexek als s fels hatrt dimenzinknt. gy az i-edik elem cme egy dimenzis tmbnl:
k+l*(i-s). Kt dimenzis tmbnl ai,j cme: k+l*(i-s)*(m-t+1)+l*(j-t) (ezek a cmfggvnyek).
Minden adatszerkezet (a tbb dimenzis tmb is) szimullhat egy dimenzis tmb
segtsgvel.
Tbb dimenzis tmbk kezelse egy dimenzis tmb segtsgvel
Mtrixok kezelse: Abban az esetben, ha a mtrix hromszg mtrix, azaz a ftl alatt vagy
fltt minden elem 0, a 0 elem trolst meg lehet sprolni. A mtrixot kezeljk vektorknt,
kpezzk le egydimenzis tmbre, ez csak a nem nulla elemeket tartalmazza. Elemi szma:
m=n*(n+1)/2
a11
a12
a22
a1n
a2 n
ann
Sokszor kell olyan mtrixot hasznlni, hogy sok elem 0, vagy sok azonos elem van.
Ezeket nevezzk ritka mtrixoknak. A krds az, hogy ezeket hogyan tudjuk kezelni.
A. Hrom soros reprezentci
A hrom egydimenzis tmb azonos elemei rnak le egy-egy elemet sorfolytonos
brzolsban.
A keress lineris, mert vagy megtalljuk, vagy nagyobbat tallunk s akkor 0 lesz az
rtke. Problma az, hogy nem tudjuk a sor, oszlop, rtk maximlis rtkt. A tmb statikus
adatszerkezet, ezrt tl kell helyetfoglalni, gy marad resen lefoglalt trrsz. Msik
problma, hogy nem lehet kzvetlenl elrni, csinlni kell egy keresst. Ez nem oldhat meg,
viszont az els problma sztszrt trols esetn megoldhat. A tmb statikus voltt
dinamikusra viszem.
Sorok egszben keressre, mtrix szorzsra remek.
2. Ngy soros reprezentci
A mutat vektor dolga, hogy lerendezze az oszlopok kezelst. rtkt gy lltjuk be,
hogy a megfelel helyre berjuk a soros reprezentci azon indext, amelyik megmondja,
hogy mely indexnl tallhat az oszlop kvetkez nem 0 eleme. (pldul: A 2. oszlopban a
kvetkez nem 0 elem a ngyes. A ngyes elemet a sorvektorban a negyedik elem rja le, gy
valban ngy az index. Ugyanez lthat a 6.oszlopnl.) Ennek oszlopfolytonos feldolgozsnl
van jelentsge, lehetv teszi, hogy ne kelljen vgignzni szekvencilisan az egszet, mert
megmondja, hogy hol a kvetkez elem az adott oszlopban. A ngy sorhoz mg kt vektort
hozzveszek, melyeket jelljnk S-el s O-val. A kt vektor gy van megllaptva, hogy a
vektor i-edik eleme megadja, hogy hol helyezkedik el az i-ik sor els nem 0 eleme a SOR
illetve az OSZLOP vektorban, gy kzvetlenl fel tudok dolgozni brmilyen mtrixot.
Folytonos trols esetn rtuk le. Itt is alkalmazhat a sztszrt trols, lncols. A ritka
mtrix trolshoz egy multilista szerkezetet hasznlhatunk.
TBLZAT (table)
Asszociatv, dinamikus adatszerkezet, amelyben minden elem kt rszbl ll.
A kulcs s az rtk tpusa brmilyen lehet, de egy tblzaton bell a kulcsok, rtkek
tpusa megegyez kell, hogy legyen. A kulcs s az rtk tpusa klnbz lehet. Minden
tblzati elem kulcsrtke egyediek, gy ez a kivlasztsi szempont. A tblzat nem ms, mint
egydimenzis tmb ltalnostva, ahol brmely elem a kulcson keresztl rhet el. (pl:
statikus helyett dinamikus). Reprezentcija lehet folytonos s sztszrt is (ltalban
folytonos). Gyakran gy troljk, hogy a kulcsot, rtket lekpezik egy-egy egydimenzis
tmbre. Klnbz szervezs tblzatok vannak.
1. Soros A kezels szempontjbl ez a legegyszerbb tblzat. Akkor rdemes soros
tblzatot hasznlni, ha az egyes elemek feldolgozsi valsznsge kzel azonos.
Mveletek
Ltrehozs: Az elemek az rkezs sorrendjben kerlnek a tblzatba.
Bvts: A tblzat vgre lehet.
Trls: Meg lehet oldani logikai trlssel s a szabadhelyek elfogysa utn
szemtgyjtssel, s meg lehet oldani fizikai trlssel is. A fizikai trls az, amikor a
trlend elem mgtt lv elemeket elretolom. A baj csak az, hogy gy sok elemet kellene
mozgatni. Helyette azt alkalmazzk, hogy kitrlik az elemet s a legutols elemet a helyre
rjk. gy csak egy elemet kell mozgatni.
Csere: Minden elem fellrhat. Megkeresem az adott kulcs elemet s fellrom az
rtkt. Soros tblzatnl nem jelent gondot, ha az rtket s a kulcsot is fell akarom rni,
de figyelni kell, hogy a kulcs ne szerepeljen mr elzleg.
Rendezs: Nem rtelmezett.
Keress: Kulcsra vonatkoz teljes keress.
Bejrs: Soros (az elhelyezs sorrendjben)
Feldolgozs: Kulcs alapjn.
A K-t gy mindig megtallom. Ha a legvgn tallom meg, akkor azt jelenti, hogy nincs
benne a tblzatban, ha eltte megtallom, akkor benne van. A tblzat elemeinek a szma
ezzel a manipulcival nem vltozott meg.
Beszrs vagy bvts: Bvtsnl azrt kell vigyzni, hogy az j elem kulcsa olyan
legyen, hogy addig mg ne szerepeljen a tblzatban.
void beszur(int k,int x)
{
int i;
KULCS[n]=k;
for (i=0;k!=KULCS[i];i++);
if (i>n) { ERTEK[i]=x; n++; }
else HIBA(Mr van egy ilyen kulcs elem.);
}
Trls: A K kulcs elemet akarjuk trlni. Kitrljk az elemet s berjuk az utols elemet.
void torol(int k)
{
int i;
KULCS[n]=k;
for (i=0;k!=KULCS[i];i++);
if (i>n) { HIBA(Nincs trlend elem.; return; }
KULCS[i]=KULCS[n];
ERTEK[i]=ERTEK[n];
n--;
return 1;
}
fggvny, amelyik a k-t lekpezi a cmre (minden kulcshoz hozzrendel egy cmet
meghatrozza az elemek helyt a tblban). Ez a hash fggvny, a technika pedig a
hashing. (randomizls). Az lenne j, ha a fggvny klcsnsen egyrtelm lenne, de ez
a gyakorlatban ritka mint a feht holl. ltalban a fggvnyek egyrtelmek, ami azt
jelenti, hogy klnbz kulcsokhoz ugyanazt a cmet rendelik hozz. Azon kulcsokat,
amelyekhez ugyanazt a cmet rendeli, szinonmknak (tlcsordulsnak) nevezzk.
A kulcsoknak tpusa van, gy ltezik a kulcsoknak egy elvi darabszma, amit a kulcs
tpusa megszab. A gyakorlatban ltalban az elvi lehetsgek tredkt hasznljuk fel. Ha
az elvi s a gyakorlati lehetsgek szma megegyezik, vagy a gyakorlati lehetsgek
szma egyenletesen oszlik meg az elvi lehetsgeken bell, akkor klcsnsen egyrtelm
lekpezst alkalmazhatunk. Ez a ritkbb, ltalban az elvi lehetsgek szma
nagysgrendekkel nagyobb, mint a gyakorlati lehetsgek szma, s az elhelyezs sem
egyenletes. (pl: a telefonszmok hatjegyek. Egy krzetben 1000000 lehet a
telefonszmok szma, de ebbl lehet vagy 10000 tnylegesen. Ezen bell hozz kell
szmtani, hogy az elhelyezs sem egyenletes.) Ilyenkor egyrtelm hash fggvnyt
alkalmazunk. Egy hash fv-tl elvrjuk, hogy:
1. A kulcsokat be kell transzformlnia egy sorszmintervallumba, pontosan oda,
ahova trat lefoglalok. Ez egy 0-n intervallum.
2. A kulcsokat lehetleg egyenletesen szrja szt, ne legyen sok szinonma. A kulcs
lehet numerikus vagy szveges. Ha szveges, akkor az els lpsben
hozzrendelnk numerikus rtket, pl: a karakterek bels kdjt. Ha
megvlasztottuk a kulcs tpust, az elvi lehetsgek szma eldl. A tovbbiakban
csak numerikus kulcsokkal foglalkozunk.
A valsgban:
1. Minden kulcs el is fordul (vagy majdnem mind)
2. Nagysgrendi klnbsg van az elvi lehetsgek s a tnylegesen elfordul
alkalmazott kulcsok kztt. De a gyakorlatban elfordul kulcsok valamilyen
szably szerint helyezkednek el az elvi lehetsgeken bell.
3. Nagysgrendi klnbsg s a gyakorlatban szablyszertlensg.
1., 2.: Klcsnsen egyrtelm hash fggvnyt alkamazunk. Az elvi lehetsgeket
megsorszmozom.
3. Tudnk klcsnsen egyrtelm fggvnyt hozzrendelni, de a trhely res lenne a
nagysgrendi klnbsg miatt, s vges a trolsi kapacits. Annyi helyet kell lefoglalnom,
ahny kulcs a gyakorlatban elfordul (becslni), aztn biztostani, hogy brmilyen elvi
kulcst le tujunk kpezni erre a kisebb terletre (ms-ms kulcshoz ugyanazt a trhelyet
rendeli hozz) ld. vidki telefonszmok 6 jegy.
Az elviekben elfordul brmely kulcshoz egy (0..m) kz es szmot rendelek. Ebbe a
0..m tartomnyba viszonylag egyenletesen kpezze le, szrja szt.
2. A szorzs mdszere
Kpezznk le a 0 - m tartomnyra. Legyen a szmjegyek db szma k, azaz a pl: 0 99999 esetn k=5. A transzformci az, hogy vegyk az eredeti kulcsot s szorozzuk meg egy
tetszleges prmszmmal, vagy nmagval, vagy osszuk kett s a kt felet szorozzuk ssze.
Az n db szorzatnak veszem a k db jegyt s ezt tekintem sorszmnak. Ez a transzformci jl
vletlenszerst, kevs szinonmt produkl.
3. Helyirtk kivlaszts mdszere
A legegyszerbb mdszer, de nem jl vletlenszerst. sok a szinonma. Az eljrs
lnyege, hogy a kiindulsi kulcsbl vletlenszeren kivlasztok k db szmjegyet.
1 (2) (3) 9 (9) 9 (9) (1) 7
4. Hajtogats
Legyen az eredeti kulcs: 5 4 3 2 1 5 4 3 2 1 6 1 s ebbl maximum 4-jegy sorszmot
akarok kpezni. (k=4) A kulcsot flosztom k elem csoportra s ha kell az elejre vagy a
vgre 0-t rok. Ezutn a csoportokat a kzps csoport al hajtogatom, s sszeadom. A
kapott sszegbl az utols k db szmjegyt veszem, az lesz a sorszm. Ezt a mdszert
szveges kulcsok esetben alkalmazzk.
1543
2345
1612
5500
5. Eltols
Ugyanaz, mint a hajtogats, csak a csoportokat eltolva rom egyms al.
1543
5432
2161
9136
6. Bzistranszformci mdszere
Legyen az eredeti kulcs a 7 6 1 3 4 5 0 . Vlasszunk egy 10-nl nagyobb prmszmot,
pl: 13. Ezt jelljk p-vel. Tegyk fel, hogy az adott szm a p szmrendszerben van flrva.
Ezutn konvertljuk t p-bl a 10-es szmrendszerbe.
7*136+6*135+1*134+3*133+4*132+5*131+0 = 36051314.
A megolds az, hogy tbb trolhelyet foglalok le, mint amennyire szksg lenne, marad
majd res hely a vgn.
2. Lncols
Informcit helyez el a tlcsorduls helyn arrl, hogy hol van a tlcsordult tblaelem.
A KULCS, RTK mez mell egy harmadik kapcsoldik: a MUTAT mez.
Ha az adott helyen nincs tlcsorduls: null. Ha van, berjuk, hogy hol van a tlcsordult
tblaelem.
Kikszbli a teljes keresst, nem kell az sszes elemet rinteni.
3. Tlcsordulsi listt alkalmaznak
A tlcsordult elemeket nem ugyanott helyezzk el, mint a nem tlcsordult elemeket.
A MUTAT listafej szerepet jtszik, az egy adott helyrl tlcsordult elemek ssze
vannak fzve egy egyirnyban lncolt listba. A tblaelemeket sajt jogon kzvetlenl elrem.
Egyszerbb a karbantarts, a karbantartani a legbonyolultabb, n. listallomnyt kell kezelni.
Kulcstranszformcis tblk kezelse
Ltrehozs: Meg kell becslni, hogy a gyakorlatban tnylegesen hny kulcs fog elfordulni
(m). Ezt kveten le kell foglalnom legalbb m trhelyet, de ltalban 1.2*m trhelyet
biztostanak, azrt hogy az (1.) s (2.) tlcsordulsi technika alkalmazsakor biztosan legyen
res hely. Kivlasztok valamilyen hash fggvnyt s valamilyen szinonma kezelsi technikt.
Ezutn bepakolom az elemeket. Ltrehozs utn lteznek res helyek s l elemek.
Bvts: A ltrehozs technikjval kerlnek be a tblzatba az j elemek.
Trls: Nylt cmzsnl csak logikai, msik kettnl fizikai trls is.
Csere: Kulcs alapjn keresem, az rtkrszt fellrom.
Rendezs: Nincs.
Keress: Nincs. Kulcs alapjn tudom az elemeket feldolgozni, mert nincs fizikai sorrend.
Logikai sorrend sincs. A keressnek nincs alapja, csak kulcs alapjn.
Bejrs: Nincs.
Elrs: Az esetek tbbsgben kzvetlen.
Feldolgozs: Kulcs alapjn.
LISTA (list)
Olyan dinamikus adatszerkezet, amelyiknek ltezik els s utols eleme (kivtel az res
lista) s minden adatelemnek ltezik rkvetkezje (kivtel az utols elem), tovbb minden
elemnek ltezik megelzje (kivtel az els elem). A lista elemeinek rendezettsge van,
amelyet az elhelyezs biztost. Jellse: q=[x1,x2, ... x]
Specilis listafogalmak, ill. mveletek
res lista: empty [ ]
A lista feje: (head) Az els elem.
A lista farka: (tail) Lista, amely az els elem elhagysval keletkezik.
A lista vge: (end) Az utols elem.
A lista mrete: A lista elemeinek a szma. |q|=n.
A lista alapmveletei: (Lista alatt a q=[x1,x2, ... xn] t rtjk.)
Hozzfrs: (access) A lista elemei egyrtelm sorrendben vannak felfzve. Megfogjuk
valamely elemt. A listbl az i-dik elem kivlasztsa. q(i) xi Ha i nem eleme a [1..n]
nek, vagyis i<1 vagy i>n, akkor a hozzfrs eredmnye [], res lista.
Allista kpzs mvelete: (sublist) q[i..j] [xi,xi+1, ... xj] A listbl tetszleges rszt
vlaszthatunk ki gy, hogy megadjuk a kezd- s a vgelemet (i<j). Ha i<1, vagy
hinyzik, akkor az allista a lista elejtl indul. Ha j hinyzik vagy j>n, akkor az allista a
lista vgig megy.
Konkatenaci: (concetenation) Egyests. Adva van kt lista: q=[x1,x2, ... xn] s
r=[y1,y2, ...,ym] . Ekkor q&r=[x1,x2, ... xn,y1,y2, ...,ym].
A szoksos adatszerkezeti mveletek ezen alapmveletek segtsgvel rtelmezhetek.
Ltrehozs: reslistbl indulva konkatencival rendeljk hozz az elemeket mint
egyelem listkat. A hozzfzs sorrendje adja a sorrendet a listban.
Bvts: A q listt a k-ik elem utn bviteni akarjuk az x elemmel.
q'=q[...k]&[x]&q[k+1...]
Allistval is bvthetek, ugyangy, ahogy egy elemmel.
Trls: Fizikai trls. A k-ik elem trlse: q'=q[...k-1]&q[k+1...]
Csere: A k-ik elemet cserlem x-re. q'=q[...k-1]&[x]&q[k+1...].
Azonos mret elemeket pakolunk bele (homogn). Az els eleme az aljra kerl, erre a
tbbi. Az utoljra betett elemhez tudok hozzfrni.Az alatta lvkhz csak gy frhetek
hozz, ha a felsket eltvoltottuk.
A reprezentcija lehet:
Folytonos A vermet vektorral kezeljk, ahol az els elem mindig a verem alja. Kell
hasznlni egy mutatt, ami a verem tetejt mutatja.
Bvteni, j elemet bevinni csak a verem tetejre lehet, ha van hely. Hozzfrni csak
a tetejhez lehet. Ha egy bels elemet akarunk, akkor trlni kell.
Sztszrt: egyirnyban lncolt lista. A listafej mindig az aktulis els elemre mutat. Ide
kell beszrni adatfelvtelnl.
reslista, resverem: a fej NIL.
3. Ciklikus sor Kt indexe van. Nincs nagytmeg adatmozgats, a sor ciklikusan vndorol
krbe. Ha a vektor utols eleme mr foglalt, nem tolom vissza az egszet, hanem a vektor
elejn folytatom az j elem bevitelt.
Mveletek
Ltrehozs: Kiindulunk az ressorbl s az elemek a berkezs sorrendjben bekerlnek.
Bvts: A vgn.
Trls: Csak az elejn
Csere, rendezs, elrs, bejrs: nincs rtelmezve.
Feldolgozs: Az 1-3-5 mveletek alapjn.
Ciklikus sor egy implementcija: Egydimenzis tmbbel valstjuk meg. Kezeljk a
szlssges eseteket. bra lsd fent.
SOR[1..n], E, V: indexmutatk
res sor: E=V=0
Sor tele: (E=1 vagy V=N) vagy (E=V+1)
PUT mvelet (bvts): Az x elem bevitele.
void put (int x)
{
if (v%n +1 == e) HIBA(A sor tele van.);
else
{
v= v%n +1;
SOR[v]=x;
if (e==-1) e=0;
}
}
GET mvelet:
int get( )
{
int a;
if (e==-1) { HIBA(A sor res.); return 1; }
a = SOR[e];
if (e==v) e=v=-1;
else e= e%n +1 ;
return a;
}
Vltoz hosszsgon trolok. Minden sztringnek annyi bjtot foglalok le, amennyi
bjtbl ll, csak a szksges helyet foglalom le. Problma, hogy nem tudom, melyik
meddig tart.
Jellni kell, hogy hol kezddnek az egyes sztringek, gy a sztring eltt letrolom
a hosszt. Kezelse sokkal nygsebb mint az elz, mert tudnom kell, hogy hol
vannak a sztring hosszjelzk, s meg kell tudnom klnbztetni a tnyleges
karakterektl. A Pascal ezt vallja.
Egy msik vltozata az, amikor vgjelt alkalmazok. Egy sztring vgjeltl
vgjelig tart. Egy-egy sztringbeli elem jelzi a sztring vgt.
Mindegyik megvalstst alkalmazzk. (Pascal: Text)
B. Sztszrt brzols
1. Minden lncoltlista elem egy-egy karaktert tartalmaz: A sok mutat miatt ez igen
nagy helyet foglalna el, ezrt ez csak egy elmleti megolds, a gyakorlatban nem
alkalmazzk.
2.
Az algoritmus mkdse:
100111010010100010100111000111
10100111
10100111
10100111
Az els algoritmus lpsszzma kb: N*M. A 2. algoritmus lpsszma N+M.
ltalnostani lehet gy, hogy az sszes elfordulst keressem. Nem jelent alapvet
problmt az, hogy a sztring egy tmbben van. Az algoritmus gy is mkdik, ha a
szveget a perifrirl olvasom be. A mintaszveg ltalban kicsi, gy knyen
kezelhet.
3. Dmlki Blint fle algoritmus
Ez nem sztringkezel algoritmusnak szletett meg, hanem az automata elmleti
algoritmusnak. ( A 60-as vekben szletett). Hatkonyabb algoritmus, mint az elzek,
s knnyebben programozhat. Dmlki Magyarorszgon dolgozott, gy br ez az
algoritmus knnyebben kezelhet, mgsem tudott gy elterjedni, mint a nyugaton
fejlesztettek. Dmlki vezetsvel rtak fordtprogramot az MProlg-hoz. A magyar
szmtstechnika trtnetben szinte egyedlllan, Dmlki llami djat kapott.
Az algoritmus
Legyen a kt sztring: a: ABAFBADC
p: BAD
Els lpsben hozzunk ltre egy logikai mtrixot, B-t. A B sorait cimkzzk, vagy
azonostsuk azokkal a karakterekkel, amelyek elfordulhatnak a kt sztringben.
HIERARCHIKUS ADATSZERKEZETEK
Olyan adatszerkezetek, amelyek valamilyen rtelemben a lista ltalnostsainak
tekinthetek. A hierarchikus szerkezeteben egy elemnek akrhny rkvetkezje lehet, de
minden elemnek csak egyetlen megelzje van. Van egy kitntetett eleme, amelynek nincs
megelzje, s tbb olyan eleme, amelynek nincs rkvetkezje.
FA (tree)
Dinamikus, homogn adatszerkezet, amelyben minden elem megmondja a
rkvetkezjt.
Alapfogalmak:
Gykrelem: A fa azon eleme, amelynek nincs megelzje. A legegyszerbb fa egyetlen
gykrbl ll. Mindig csak egy gykrelem van, res fban egy sem.
Levlelem: A fa azon elemei, amelyeknek nincs rkvetkezjk. Brmennyi lehet bellk.
gy rhetek el, hogy a gykrelembl indulva veszem a gykrelem rkvetkezjt, majd
annak a rkvetkezjt, stb.
Kzbens elem: A fa nem gykr- ill. levlelemei, hanem az sszes tbbi eleme.
t: A gykrelemtl kiindul, klnbz szinteken tmen, s levlelemben vgetr
egymshoz kapcsold lsorozat (lista). Az t hosszn az adott tban szerepl lek szmt
rtjk. Minden levlelem a gykrtl pontosan egy ton rhet el, t helyett szoks beszlni a
a fa gairl is. Egy fban az utak szma megegyezik a levlelemek szmval.
A fn bell vannak szintek, egy elem szintje megegyezik az elem gykrelemtl vett
tvolsgval.. A nulladik szinten a gykrelem helyezkedik el, az els szinten a gykrelem
rkvetkezi (a gykrtl egy lnyi tvolsgra lv elemek), a msodik szinten ezeknek a
rkvetkezi, s gy tovbb. A maximlis szintszmot a fa magassgnak vagy mlysgnek
(a lenti pldban 3) nevezzk.
Rszfa: Minden kzbens elem egy rszfa gykereknt tekinthet, gy a fa rszfkra bonthat.
Beszlhetnk resfrl is, ez a fknak az szlssges esete, amikor a fnak egyetlen eleme
sincs.
Ha valamely i-re B[i] s J[i] is nulla, akkor az Adat[i] levlelem. A bvts s a trls
nehezebb, a bejrs knny. Sztszrt brzols esetn azonosan nehz minden mvelet.
Brmely kifejezshez felrhat a megfelel binris fa (kifejezsfja), a kifejezs s a
binris fa kztt klcsnsen egyrtelm a megfeleltets. Az operandusokat s a mveleti
jeleket a fa egy-egy elemnek tekintem (a zrjelekkel nem foglalkozom). A krds az, hogy
az operandusokhoz kpest a mveleti jelek hol helyezkedik el.
Pldul: a/b+c*(d-e)
A hrom alak kzti klnbsg az, hogy a mveleti jel az operandushoz kpest hol
helyezkedik el. Az imperatv nyelvek a kzps alakot hasznljk, amely nem egyrtelm, de
teljes zrjelezssel vagy precedenciaszably alkalmazsval egyrtelmv tehet. (Egy infix
kifejezs teljesen zrjelezett, ha minden opertor s a hozz tartozoperandusok zrjelben
szerepelnek.) A prefix s a postfix alak egyrtelm. A postfix alakot szoks fordtott lengyel
formnak nevezni, ltalban ezt favorizljk az egyrtelmsg miatt. Amikor a fordt
felismer egy kifejezst, lefordtja, akkor a kifejezsbl pt egy binris ft, majd bejrja s egy
postfix alakot kszt belle.
Nhny algoritmus, plda
Van egy teljesen zrjelezett kifejezsem: ((a/b)+(c*(d-e))). Az operandusok s a
mveleti jelek egykarakteres nvvel ll vltozk, s tegyk fel, hogy a kifejezs szablyos s
teljesen zrjelezett. A feladat az, hogy ezen kifejezshez ksztsnk el a neki megfelel
binris ft. A fa elemeit egydimenzis tmbbel kell szimullni:
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.
} while (p == -1 );
A fa inorder bejrsa:
void bejar_inorder ( int gyoker )
{
int f;
int p= -1;
if ( gyoker != -1 )
{
f = gyoker;
do
{
if (f != -1)
{
feldolgoz( ADAT[f] );
p++;
VEREM[p] = f;
F = MUTATOB[f];
}
else
{
f = VEREM[p];
p--;
feldolgoz( ADAT[f] );
f = MUTATOJ[f];
}
} while (p == -1 );
}
}
Az implementcija:
REF *fa ( int n )
{
REF *ujelem;
int x,nb,nj;
if ( n == 0 ) return NULL;
else
{
nb = n/2;
nj = n-nb-1;
scanf ( %d, &x );
ujelem = (REF*) malloc (sizeof (REF) );
ujelem -> adat = x;
ujelem -> bal = fa(nb);
ujelem -> jobb = fa(nj);
return ujelem;
Plda: 8, 9, 11, 15, 19, 20, 21, 7, 3, 2, 1, 5, 6, 4, 13, 14, 10, 12, 17, 16, 18. n = 21, n b =
10, nj = 10.
A keresfa jelentsge abbl ll, hogy ha van egy adott elemnk, amelyet meg akarunk
keresni a fban, akkor a gykrtl kiindulva brmelyik kulcs elem megkereshet gy, hogy
vizsgljuk, hogy a gykrelem kulcsa, megegyezik-e a keresett elem kulcsval. Ha igen,
megllunk, ha nem megnzzk, hogy attl kisebb vagy nagyobb. Ha nagyobb, akkor a
jobboldali rszfn (ha van), ha kisebb, akkor a baloldali rszfn (ha van) haladok tovbb
ugyanezzel a mdszerrel, mindaddig, mg az elemet meg nem tallom, vagy nem jutok el egy
olyan elemhez, amelyiknl az adott irnyban nincs tbb elem, ekkor a keresett kulcs elem
nem szerepel a fn. A keress gyors, mert maximum a fa magassga+1 hasonltssal vagy
megtallom az elemet, vagy az elem nincs a fban. A keresfban az elemek olyan sorrendben
vannak, hogy ha inorder mdon jrom be a ft, akkor az elemeknek egy rendezet sorozatt
kapjuk.
Egy ilyen fa ltrehozsa: Veszem az elemeket az adott sorrendben. Az els elem lesz a
fa gykere. A msodik elemet vve keresek, hogy szerepel-e mr a fban. Ha igen, akkor hiba
trtnt (ktszer nem lehet benne ugyanaz az elem), ha nem, akkor dntk, hogy az hol
helyezkedik el az elzhz kpest (kisebb vagy nagyobb a gykrelemnl). Ha nagyobb,
akkor a jobboldali rszfnak lesz az eleme, ha pedig kisebb, akkor a baloldalinak. Beillesztem
az j elemet vagy a rszfba: addig megyek, amg levlelemet nem tallok, mert mindig
levlelemmel bvtnk.
Alkalmazsa: Adva van a szavaknak egy sorozata, tetszleges szm sz egyms utn.
Hatrozzuk meg, hogy ebben hny sz van, s az egyes szavak milyen gyakorisggal
fordulnak el! Ennek megoldsa sorn a kulcs maga a sz lesz, az elemek msik rtke pedig
a szavak gyakorisga. Ezekbl keresft ptek fel, megkeresem az j elem helyt, majd
bvtek. Ez a program alkalmazhat olyan esetekben, amikor meg akarjuk tudni, hogy a
program szvegben lv szavakat milyen gyakorisggal hasznljuk. A fordtprogramok is
valahogy ilyenflekppen kezelik a problmt.
typedef struct ref {
char kulcs[20];
int szamlalo;
struct ref *bal;
struct ref *jobb;
} REF;
REF *gyoker;
char k[20];
void kiir ( REF *w , int l )
{
int i;
if ( w!=NULL )
{
kiir( w->bal, l+1 );
for (i=0; i<l; i++) printf( );
printf(%s\n,w->kulcs);
kiir( w->jobb, l+1);
}
}
void keres ( char x[20], REF *p )
{
if (p==NULL)
{
p= (REF*) malloc (sizeof (REF));
p->kulcs=x;
p->szamlalo=1;
p->bal = p->jobb = NULL;
}
else if ( x< p->kulcs ) keres( x, p->bal );
else if ( x> p->kulcs ) keres (x, p->jobb);
else (p->szamlalo)++;
}
{
gyoker = NULL;
scanf( %s, &k);
keres(k,gyoker);
kiir(gyoker,0);
}
1.
2.
3.
REF *q;
void tor (REF *r)
{
if (r->jobb != NULL ) tor(->jobb);
else
{
q->kulcs=r->kulcs;
q->szamlalo=r->szamlalo;
q=r;
r=r->bal;
}
}
void torol ( char x[20], REF *p )
{
if (p==NULL) printf(A szo nincs a faban!);
else
{
if (x<p->kulcs) torol(x,p->bal);
else if (x>p->kulcs) torol(x,p->jobb);
else
{
q=p;
if (q->jobb==NULL) p=q->bal;
else if (q->bal==NULL) p=q->jobb;
else tor(q->bal);
}
}
}
A keresfk jelentsge, hogy nagyon gyors keresst tesznek lehetv. Ez igazn nagy
adathalmaz esetn lnyeges. Ha a keresfa tkletesen kiegyenslyozott lenne (ez lenne az
optimlis eset, a minimlis magassg fa), akkor lenne a leggyorsabb a keress (a keress
maximum annyi lpsig tart, amennyi a fa magassga), de a mdostsok miatt nehz lenne
kezelni, mert mindig t kellene szervezni, hogy tkletesen kiegyenslyozott legyen. Nem ri
Megolds:
(1)
(2).
(3).
(4).
(a) Trljk a 4-es elemet! Az egyensly felborul, ezrt be kell lltani. Az eredmny:
Piros fekete fa: Specilis keresfa, minden elemnek van egy szne. Ezeknek a szneknek a
kiosztsnak szablyval biztosthat, hogy a fban minden, a gykrtl levlelemig vezet t
maximum ktszer olyan hossz, mint a legrvidebb t hossza. Egy ilyen fban pluszknt
megjelenik a szn mez a reprezentciban.
Levlelemei specilisak: az eddigi levlelemek NIL mutatja egy specilis NIL csompontra
mutat. Ezek a fa kls pontjai, a tbbiek a belsk.
41
14
21
10
7
3
16
12
: piros elem,
: fekete elem,
N
: NULL.
15
N
19
N
30
N
N
23
20
28
N
47
38
N
N
N
35
N
39
N
Inorder mdon bejrva rendezett sorozatot kapok. Trlni s bvteni ugyangy kell, de
a fnak piros-fekete fnak kell maradnia. Ahhoz, hogy a piros-fekete tulajdonsgok
teljesljenek, a bvts illetve a trls utn a csompontok tsznezsvels forgatsval
tudunk eljutni.
a
megelzje z.
u
u piros, x piros.
x
1.Az u s az y piros, a z biztosan fekete. Az u s az y legyen fekete, z legyen piros. Ekkor egy
szinttel feljebb kell tolni a problmt.
12
5
18
9
7
15
20
10
6
12
9
5
1
10
7
18
15
20
9
5
12
10
18
15
20
x
3. Az u piros, az y fekete, az x bal oldali rkvetkez.
z
csinljnk
egy jobbra forgatst (u-z-nl)!
u
x
Az 1. esetben lehet, hogy a gykr piros lesz. Minden algoritmust gy zrunk, hogy a
gykr fekete legyen.
Trls: Megkeresem az elemet, s vgrehajtom a trlst. Ha piros elemet trlk, akkor nem
srltek meg a tulajdonsgok; ha fekett, akkor a hrmas s a ngyes is srlhet.
Ha fekett trlk, a trlt elem rkveetkezjre rkldik a szne. Ha ez a szn a piros,
akkor rendben van. Ha a rkvetkez fekete, akkor ezt mozgatom felfel a fban. Ha eljutok a
gykrelemig, akkor a gykeret ki kell mozgatnom a fbl.
Nyolc alapesete van, ebbl ngy-ngy szimmetrikus. Trland elem: z, a rkvetkezi:
x s y.
z
x
1.
12
5
18
15
20
18
12
20
15
18
15
20
3. Az y bal oldali rkvetkezje piros, a jobb pedig fekete. Ekkor cserljk fel az y-nak s a
bal oldali rkvetkezjnek a sznt, s y krl forgassuk jobbra.
12
5
18
18
15
20
18
12
20
15
1.
2.
3.
22, 23, 24
Ha olyan lapra kellene bvteni, amelyik tele van (2n eleme van), akkor j lapot kell
ltrehozni. Ha az j elemet is felviszem a lapra, akkor 2n+1 elemem lesz. Ezen elemek kzl
a kzps elemet flviszem a rszfa gykrlapjra, majd ott a megfelel helyre beillesztem. A
maradk 2n els felt az els, msodik felt a msodik lapra viszem. Ez a vgs. gy rszfa
gykrlapon bvtettnk. Ha a felvitt elem befrt, akkor nincs problma, ha nem frt be, akkor
ezen a szinten is vgni kell ugyanezzel az algoritmussal. Elfordulhat, hogy a gykrelemen
nem tudunk bvteni, ezrt itt is vgni kell, gy a fa magassga eggyel n, lesz egy j,
egyelem gykernk. Ez a egyetlen eset, hogy a fa magassga vltozhat egy szinttel,
egybknt nem vltozik.
Pl. 41-el akarok bviteni.
30, 40
42, 43, 45, 46
41
30, 40
41, 42, 43, 45, 46
30, 40, 43
41, 42
45,
46
Trls: Brmely laprl lehet.
1.
Meg kell keresni az adott kulcs elemet. Ha a trlend elemet levllapon talltuk
meg, akkor fizikailag trlm, a mutatkkal nem kell foglalkoni. Ha nem
levllapon talltuk meg, akkor a trlend elemet fellrom a rendezettsgben az t
megelz vagy a rkvetkez elemmel, s azt trlm.
2.
Ha az adott lapon az elemek szma minimlisan n marad, akkor nincs baj. Elem
trlse annyit jelent, hogy a tle jobbrallkat rhzom. Lehet, hogy kevesebb
lesz az elemek szma mint n, ilyenkor a szomszdos lapbl klcsnkrnk elemet.
Ez csak akkor lehetsges, amikor a szomszd lapon tbb mint n db elem van, s
ekkor az eggyel fentebbi lapon keresztl thzom az adott elemet.. Gyakorlatilag
ez az elbbi vgs inverze.
3.
Ha kt szomszdos lapon az elemek szma 2n-1, akkor sszevonjuk a kt
szomszdos lap elemeit, megszntethetjk az egyik (az res) lapot, s a gykrbl
hozzvesszk a kzps elemet. Ilyenkor az elz szintet is cskkentjk egy
elemmel. Lehet, hogy magasabb szinteken is kevs elem van, itt is hasonlan
jrunk el. Vgiggyrzhet a fn, lehet, hogy a gykrlapot is meg kell szntetni,
ekkor a fa magassga cskken eggyel.
Pl. 45 trlse.
30, 40, 43
30, 40
41, 42
45, 46
Pl. 25 trlse.
25
24
24
Rendezs: Nincs.
Feldolgozs: Alapja a keress.
HIERARCHIKUS LISTA
Egy baloldali zrjel egy j szintet jell, egy bezr zrjel pedig egy
szint vgt. Tbbg rendezett fkat reprezentl.
A hierarchikus lista egy fa szimbolikus kezelsre szolglhat, az sszes,
a fknl ismertetett algoritmus alkalmazhat r. Olyan sztring, amely
szimblumokat tartalmaz.
HLS ADATSZERKEZETEK (HL)
4
5
6
Grfok reprezentcijra a szomszdossgi listt vagy a szomszdossgi mtrixot
hasznljk.
A szomszdossgi mtrix (cscsmtrix) egy logikai mtrix, amelynek elemei: 0,1. Ha a
grfnak n db eleme van, akkor ez a mtrix nn-es. Az oszlopokat s a sorokat is az elemekkel
cmkzzk fel. A mtrix kitltsnek szablya:
ha az adott elemek kztt nincs rkvetkez vagy megelz viszony, akkor 0-t
kell rni,
klnben 1-t.
Nem szabad elfelejteni, hogy c sajt magnak a rkvetkezje.
A fenti grf szomszdossgi mtrixa:
1
2
3
4
5
6
1
0
1
0
1
0
0
2
0
0
0
1
1
0
3
0
0
0
0
1
1
4
0
1
0
0
0
0
5
0
0
0
1
0
0
6
0
0
0
0
0
1
brzolsra alkalmazhat a sztszrt brzols, ahol ltalban a grfnak egy multilista
felel meg. Mutattmbket veszek fel az adatelemek mell. Kezelshez lehet
sorszmozni.Annyi elem mutattmbt ptek fel, ahny eleme van a hlnak. E tmb
elemei mutattmbk, a mutattmb elemei a rkvetkezkre mutatnak.
A fenti grf szomszdossgi listja:
1.
2
4
2.
4
5
3.
5
6
4.
2
5.
4
6.
6
Alapfogalmak:
A grfon bell tnak nevezzk az olyan elemsszessget, amelyek listt alkotnak. (pl: d-a-bc) A grfban krtnak nevezzk az olyan listt, amikor az utols elem az elsre mutat. (pl: da-b)
A grfok szerepe
A kvetkez krdseket rdemes feltenni:
Ltezik-e olyan t a grfban, amelyben az sszes elem benne van (maximlis t)?
Egyes csompontokbl melyik msik csompontokba vezett t ?
Van-e krt a grfban ?
Melyik a maximlis krt ?
Van-e olyan krt, amelyik az sszes elemet tartalmazza ?
Hogyan lehet olyan algoritmust tallni, amely a grf elemeit csak egyszer rinti?
(bejrs)
A grf egy homogn, dinamikus adatszerkezet, a mveleteket specilisan lehet rtelmezni.
Mveletek:
Ltrehozs: Az res hl ltrehozsa, ezutn bvtjk. A szomszdossgi mtrixban ez egy j
sor s egy j oszlop felvtelt jelenti, amelyeket megfelelen ki kell tlteni.
Trls: Egy elem trlse esetn az elemet reprezentl sort s oszlopot ki kell trlni.
Csere:
Rendezs, keress: Nincs.
Bejrs (keress, hl): Ezen alapszik a grf feldolgozsa. Ltezik szlessgi s mlysgi
bejrs.
Szlessgi keress: Kivlasztok egy elemet (s). Az s-rl indulva szisztematikusan megkeresem
a rkvetkezit, s felptek egy szlessgi ft. Ennek els szintjn az s rkvetkezi llnak,
erreptem r a msodik szintet, ahol az s rkvetkezinek rkvetkezi lesznek. A fa egyszer
fogja tartalmazni az elemeket, s egy msik elem a legrvidebb ton lesz elrhet.
Az elemekhez sznt rendelek: fehr, fekete, szrke. Alaphelyzeben minden elem fehr,
fokozatosan fognak szrkv, majd feketv vlni. Egy elem elrhet s-bl, ha az elbbi
bejrsnl elrtem az elemet, szne nem lehet fehr.Egy fekete elem minden megelzje
fekete, s minden rkvetkez szrke, esetleg fekete. A szrke elemnek minden megelzje
fekete, de lehet fehr rkvetkezje.
Amikor egy elem feketv vik, akkor felvesszk a fba. A keress folyamn ha az sbl elrhet elem feldolgozott, de van mg fehr elem, akkor az eljrst megismteljk a
fehr elemekre, amg minden elem fekete nem lesz.
Kezdpontnak (s-nek) azt az elemet rdemes vlasztani, amely a legtbb
rkvetkezvel rendelkezik.
Mlysgi keress: A sznezs ugyangy trtnik, de alapvet klnbsg az, hogy a ft
szintenknt ptem fel.
HETEROGN ADATSZERKEZETEK
Elemei ms-ms tpusak lehetnek.
LLOMNY (file)
Az adatok perifrin jelennek meg, az llomny fogalom mindig perifrin
rtelmezhet, brmely perifrin. A httrtr hatrozza meg a fizikai struktrt, mi csak
httrtrakon lv llomnyokkal fogunk foglalkozni. A vals vilg modellezse (az
absztrakci els szintje) ugyangy trtnik llomnyok esetben is, mint adatszerkezeteknl
(az llomny kialaktsa). Msodik szinten megjelenik a fizikai llomny. gy ltezik egy
logikai s egy fizikai llomny.
A logikai llomny fogalmi rendszere
Adatelemekbl (adatttelekbl) pl fel.
Adatelem, adatttel: A logikai llomny legkisebb, nllan rtelmezhet rsze. Jellemzi:
nv
1 logikai rekord alkot 1 blokkot,
Blokkols: Megmondom, hogy hny rekordot pakolok ssze egy blokkba. Ezt
nevezzk blokkolsi tnyeznek, ami szintn az llomnyra jellemz. Az utols
blokk lehet tredk-blokk, de a tbbinek azonosnak kell lennie.
Szegmentls: Meg kell mondani a rekord feltrdelst (azoos hossz bytesorozatokra bontom szt, de a szerkezetk nem lesz azonos), s ez minden
rekordra ugyanaz lesz. Csak egyszer kell trdelni, s az utols blokk lehet
rvidebb.
2. Vltoz hossz
1 rekord-1 blokk:
a)
A blokk mrete rgztett, gy vlasztom meg, hogy a leghosszabb
rekord is belefrjen.
b)
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)
c)
3.
b)
Indexelsi krdsek
1. Lncolsi technika
Ez a multilista llomnyszerkezet. A rekordok mellett megjelenik egy
mutatmez. Kivlasztom azt a msodlagos kulcsot, amire pteni akarok.
Melyek ezek?
Invertlt llomny
A defincinak megfelel megvalstsa: a tetszleges, egyszer alapllomny mell
felpl a msodlagos kulcsra egy teljes indextbla. Az indextbla els oszlopban vannak a
msodlagos kulcsrtkek. Az indextblnak annyi sora van, ahny klnbz msodlagos
kulcsrtk elfordul az alapllomnyban, s a 2. oszlopban annyi bejegyzs, ahny rekord
rendelkezik az adott sorbeli msodlagos kulcsrtkkel.
Vltoz formtum szekvencilis llomny. Tovbbi indexek plhetnek r.
Mveletei
Ltrehozs:
1.
Indextblzat ltrehozsa.
2.
Bvtnk j rekordokkal, az llomny dnti el, hogy az fizikailag hova kerl.
a)
Ha a rekord j msodlagos kulcsrtket hoz be, akkor az indextbla a
rendezettsgnek megfelelen bvl j sorral, az els oszlopba kerl az j
rekord msodlagos kulcsnak rtke. A msodik oszlopnak az j rekord
cme lesz az eleme.
b)
A bvt rekord mr szerepel az llomnyban, ekkor a msodik oszlopba
kerl az j rekord cme. A cmek sorrendje lnyegtelen.
Trls: Az alapllomnyban logikai trls, az indextblban fizikai trls realizlhat: az
adott rekord cmt kiemelem az indextblbl. Ha csak ez eleme volt a sornak a trls eltt,
Budapest
Debrecen
zd
1
0
0
0
0
1
0
0
0
1
0
0
1
0
0
hogy a maszkvektor megfelel rtkeit egyesre lltom. A kulcsok kztt a logikai kapcsolat
lehet VAGY vagy S kapcsolat.
jraszervezs: A bitmtrix nmagban jraszervezst nem ignyel, csak az alapllomny.
A bitmtrix knnyen kezelhet, nagy llomny esetn is kicsi (ritka mtrix), knny
implementlni s gyors. A mveletvgzs logikai, ezrt nagyon gyors. Egyszerre tbb
msodlagos kulcsrtkkel rendelkez rekordhoz tudok hozzfrni (vagy-szer kapcsolat is
ltezik). Igazi elnye az, hogy akrhny msodlagos kulcsrtkre fel tudom pteni,
klnbz msodlagos kulcsokat tudok kezelni. A klnbz msodlagos kulcsrtkek szma
jval kisebb, mint a rekordok szma. A szerilis llomnyra rrakhat egy kzvetlen elrs.
Ezt egyetlen programozsi nyelv sem kezeli explicit mdon (a PL/1 tudja kezelni).
VSAM
Az IBM-nl a 60-as vekben alaktottk ki. Komplex llomnyszerkezet, az sszes
relcis adatbziskezel mgtt megjelenik. A PL/1 is ismeri.
Olyan llomnyszerkezetet, mely tbb llomnyszerkezetet egyest magba, s ahol
nem kell foglalkozni a fizikai szerkezettel, csak a logikaival. Egyesti:
b)
512, 25
1024, 43 1536
0
2 9
11
512 20
25
1024 36 42 43
1536
2048, 91
2048
91
512, 25
1536, 25 1536, 43
0
2 9
11
512 20
21
1024 36 42 43
1536 24
25
2048, 91
2048
91
11
91
24
25
20
21
36
42
43
Trls: A KSDS llomnyban van fizikai trls is, mshol csak logikai. Megkeresem a
trlend rekordot. Ha megtalltam, akkor a mgtte lv byte-okat elremozdtom, s
gyjtm a felszabadul byte-okat. A fizikai trls egy esetben rintheti az indexszerkezetet: ha
a kontrollintervallum utols rekordjt kell trlni, ekkor mdosul az indexrekord s a
rendszerbejegyzs. A mdosts az egsz indexrendszeren vgigprghet.
Csere: Azonostt (elsdleges kulcsot) nem cserlnk, ezrt a csere az indexszerkezetet
sosem mdostja..
Adatbzis kezelsi rendszerek mgtt B+-fk indexelsi mdszere ll. A B +-fa a B-fk
olyan mdostott vltozata, melyet llomnyok indexelsre hasznlnak.
Az alapllomny szekvenclis s szerilis is lehet (adatszint). Erre pl fel egy teljes
indexels, elsdleges indexszint. A B+-fk adott mret lapokbl llnak, a lapokon indexek,
azaz a kulcsok szerepelnek Az indexek elsdleges indexszinten lapokon vannak elhelyezve.
Tbbszint teljes indexelst tudunk megvalstani (elsdleges kulcsra), a tovbbi indexeknl a
lapmret lehet ms.
Elrhatjuk, hogy lrehozskor a lapokon legyenek res helyek minden szinten.
Manapsg az sszelncols is jellemz tulajdonsg.
Szerkezetkben klnbznek a levl- s a kzbens lapok.
A kzbens (nem levllapok) lapok szerkezete:
Ha a B+-fa rendje p, akkor a p a maximlis rtket jelli. Itt a rend a korbbinak a
ktszerese. A kvetkez informcik vannak elhelyezve a lapokon:
p1, k1, p2, k2, kq-1, pq (q p )
pi: egy mutat, amely brmely msik B +-fa-beli lapra mutathat
(famutat),
kj: kulcsrtkek, k1 < k2 < < kq-1.
x ki
(i = 1)
ki-1 < x (i = q)
A lapon maximum a B+-fa rendje darab mutat helyezkedhet el s eggyel kevesebb
kulcs. A gykrlapon kvl minden lap legalbb [p/2] mutatt tartalmaz. A gykrlap legalbb
2 mutatt tartalmaz.
l1
k1
A levllapok szerkezete:
k1
k2
n1
k2
m1
m2
ki : kulcsok.
pi: 1 i < q egy olyan mutat, amely az elsdleges llomny azon rekordjt
cmezi, amelyiknek a kulcsa ki. Ezek az adatmutatk kimutatnak a fbl az
elsdleges llomnybaa lapllomny rekordjait cmzik. pq a fban a tle
kzvetlenl jobbra elhelyezked levllapot cmezi.
k1
k2
k2
Teljes indexels van, minden rekord cmezve van. A levllapok azonos szinten
helyezkednek el.
Egyes rendszerekben a levlapok s a nem levllapok rendje eltrhet, a levllap
nagyobb lehet (bevezetnek egy p0 mutatt a lncols miatt), ez gyorstja a kezelst. A B +-fa
kialaktsnl a gykrlap levl s kzbens elem is.
Beszrs B+-fba: Legyenek a beszrand elemek a 8, 15, 1, 7, 3, 12, 9, 6, s legyen
p= 3 a B+-farendje. Lefoglaljuk az els lapot, rpakoljuk az els kulcsot s belltjuk a
mutatt. A kvetkez elemmel ugyanezt csinljuk. A jobb szlen lev levllap mutatja
mindig NULL.
5
A 12 beszrsa utn:
5
3
12
A 6 beszrsa utn:
5
3
12
12
8
9
12