• Nem Talált Eredményt

Adatstrukt´ ur´ak

In document Magyar nyelv˝ u irodalom (Pldal 39-43)

2. Alapfogalmak, jel¨ ol´ esek 24

2.8. Adatstrukt´ ur´ak

Felt´etelezz¨uk, hogy az olvas´o tiszt´aban van a lista (vektor) ´es a t¨omb fogalm´aval. Az adatb´any´aszatban tov´abbi k¨ozkedvelt adatstrukt´ur´ai az ´un.sz´ofa (trie), vagy m´as n´even prefix-fa (prefix-tree), a piros-fekete prefix-fa, illetve a hash-t´abla.

2.8.1. Sz´ of´ ak

A sz´of´at eredetileg sz´ot´ar szavainak t´arol´as´an´al alkalmazt´ak, annak ´erdek´eben, hogy gyorsan el lehessen d¨onteni, hogy egy adott sz´o szerepel-e a sz´ot´arban [40], [59]. A szavak az abc felett

´ertelmezett sorozatok, ´ıgy ´altal´anosan azt mondhatjuk, hogy egy sz´ofa egy adott v´eges elem-halmaz feletti sorozatok t´arol´as´ara ´es gyors visszakeres´es´ere alkalmas adatstrukt´ura. A sz´ofa angol neve (trie, amit ´ugy ejt¨unk, mint a try sz´ot) a visszakeres´es angol ford´ıt´as´ab´ol sz´armazik (retrieval). A tov´abbiakban az alaphalmazt I-vel, az alaphalmaz felett ´ertelmezett, adott so-rozatok halmaz´at sz´ot´arnak h´ıvjuk. A 2.1 ´abr´an egy sz´of´at l´athatunk, mely az C, F C, F B, CBP, F CAM P, F CABM sorozatokat t´arolja.

A sz´ofa egy (lefel´e) ir´any´ıtott gy¨okeres c´ımk´ezett fa. Egyd-edik szint˝u pontb´ol csakd+1-edik szint˝u pontba mutathat ´el. N´eha a hat´ekonys´ag kedv´e´ert minden pontb´ol a pont sz¨ul˝oj´ere is mutat ´el. A gy¨okeret 0. szint˝unek tekintj¨uk. A c´ımk´ek azI-nek egy-egy elemei. Minden pont egy elemsorozatot reprezent´al, amely a gy¨ok´erb˝ol ebbe a pontba vezet˝o ´eleken tal´alhat´o elemekb˝ol

´all. Akkor tartalmazza a sz´ofa az S sorozatot, ha van olyan pont, amely az S-t reprezent´alja.

Ha egy sorozatot tartalmaz egy sz´ofa, akkor annak tetsz˝oleges prefix´et is tartalmazza.

A prefix azonban nem biztos, hogy eleme a sz´ot´arnak. Ezt a probl´em´at k´etf´elek´eppen lehet

0

kik¨usz¨ob¨olni. Egyr´eszr˝ol megk¨ul¨onb¨oztet¨unk elfogad´o ´es nem elfogad´o pontokat. Egy soroza-tot akkor tartalmazza a sz´ofa, ha van olyan elfogad´o ´allapot, amely a sorozasoroza-tot reprezent´alja.

M´asr´eszr˝ol bevezethet¨unk egy speci´alis elemet, amit minden sorozat v´eg´ere illeszt¨unk, tov´abb´a sorozatot csak lev´el reprezent´alhat.

A sz´of´anak k´et implement´aci´oj´at k¨ul¨onb¨oztetj¨uk meg att´ol f¨ugg˝oen, hogy milyen technik´at alkalmazunk az ´elek t´arol´as´ara. Az ´un. t´abl´azatos implement´aci´oban (tabular implementation) [59] minden ponthoz egy r¨ogz´ıtett hossz´us´ag´u, mutat´okat tartalmaz´o vektort vesz¨unk fel. Az i-edik mutat´o mutat azi-edik elemhez tartoz´o ´el v´egpontj´ara. Ha a pontnak nincs ilyen c´ımk´ej˝u

´ele, akkor a mutat´o ´ert´eke NULL. A vektor hossza az Ielemsz´am´aval egyezik meg.

A l´ancolt list´as implement´aci´oban [40] az ´eleket egy l´ancolt list´aban t´aroljuk. A lista ele-mei ´elc´ımke, gyermekmutat´o p´arok. A l´ancolt lista k¨ovetkez˝o elem´ere mutat´o mutat´okat meg-sp´orolhatjuk, ha egy vektort alkalmazunk, aminek hossza megegyezik a pont ´eleinek sz´am´aval,

´es elemei szint´en c´ımke, mutat´o p´arok. Ez az´ert is j´o megold´as, mert egy l´ep´essel tudunk tetsz˝oleges index˝u elemre l´epni (a c´ımke, mutat´o p´ar mem´oriasz¨uks´eglet´enek ismeret´eben), ´es nem kell a mutat´okon kereszt¨ul egyes´evel l´epegetn¨unk.

Sz´of´ak eset´eben a legfontosabb elemi m˝uvelet annak eld¨ont´ese, hogy egy adott pontnak van-e adott c´ımk´ej˝u ´ele, ´es ha van, akkor ez hova mutat. T´abl´azatos implement´aci´on´al ezt a feladatot egy l´ep´esben megoldhatjuk a megfelel˝o index˝u elem megvizsg´al´as´aval. L´ancolt list´as, illetve v´altoz´o hossz´us´ag´u vektor eset´en a megold´as lassabb m˝uvelet. A vektor minden p´arj´at ellen˝orizn¨unk kell, hogy a p´ar c´ımk´eje megegyezik-e az adott c´ımk´evel. A hat´ekonys´agot n¨ovel-hetj¨uk, ha a p´arokat c´ımk´ek szerint rendezve t´aroljuk, ´es bin´aris keres´est v´egz¨unk.

Erdemes ¨osszehasonl´ıtanunk a k´et vektoros implement´aci´oban a pontok mem´oriaig´eny´et.´ Amennyiben a mutat´ok, ´es a c´ımk´ek is 4 b´ajtot foglalnak, akkor a t´abl´azatos implement´aci´oban egy pont mem´oriaig´enye (a vektor fejl´ec mem´oriaig´eny´et˝ol eltekintve) |I|·4 b´ajt, a list´as imple-ment´aci´o´en·2·4 b´ajt, aholn az adott pontb´ol indul´o ´elek sz´ama, amire igaz, hogy 0≤n≤ |I|. Ha a sz´ofa pontjai olyanok, hogy kev´es ´el¨uk van, akkor a list´as implement´aci´onak lesz kevesebb mem´ori´ara sz¨uks´ege, sok ´eln´el azonban t´abl´azatos implement´aci´o a jobb megold´as. A k´et tech-nik´at ¨otv¨ozhetj¨uk ak´ar egy adott sz´of´an bel¨ul is [154], [185] : ha a pont ´eleinek sz´ama meghalad egy korl´atot (´altal´abanI/2-t), akkor t´abl´azatos implement´aci´ot haszn´alunk, ellenkez˝o esetben maradunk a list´as megold´asn´al.

Megeml´ıt¨unk k´et sz´ofa lesz´armazottat. Ezek a nyesett sz´of´ak (pruned trie) ´es a

PATRI-CIA f´ak. Mindk´et fa abban k¨ul¨onb¨ozik az eredeti sz´of´at´ol, hogy kiiktatj´ak az olyan utakat a f´ab´ol, amelyekben nincsen el´agaz´as. A nyesett f´an´al ezt kiz´ar´olag lev´elhez vezet˝o utakkal teszik, PATRICIA f´akn´al ez a korl´atoz´as nem ´all fenn.

Halmazokat tartalmaz´o sz´of´ak

Amennyiben a sz´ofa hat´ekony adatstrukt´ura sorozatok t´arol´as´ara, ´es gyors visszakeres´es´ere, akkor ugyanez mondhat´o el elemhalmazok eset´ere is. Ha teh´at elemhalmazok adottak ´es az a feladat, hogy gyorsan meg´allap´ıtsuk, hogy egy elemhalmaz szerepel-e a megadottak k¨oz¨ott, akkor el´eg defini´alnunk az elemeken egy teljes rendez´est, ami alapj´an a halmazokat sorozatokk´a alak´ıthatjuk.

K¨ul¨onb¨oz˝o rendez´esek k¨ul¨onb¨oz˝o sorozatokat ´all´ıtanak el˝o, amelyek k¨ul¨onb¨oz˝o sz´of´akat eredm´enyeznek. Erre mutat p´eld´at a k¨ovetkez˝o ´abra, ahol k´et olyan sz´of´at l´athatunk, ame-lyek a AB, ABC elemhalmazokat t´arolj´ak. Az els˝o sz´ofa az ABC szerint cs¨okken˝o sorrendet haszn´al (C≺B≺A), m´ıg a m´asodik ennek ellenkez˝oj´et.

0

2.2. ´abra. P´elda : k¨ul¨onb¨oz˝o rendez´est haszn´al´o sz´of´ak

Egy sz´ofa mem´oriaig´enye ar´anyos a sz´ofa pontjainak sz´am´aval, ´ıgy jogos az az ig´eny, hogy azt a teljes rendez´est v´alasszuk, amely a legkevesebb pont´u, azaz minim´alis m´eret˝u sz´of´at adja.

Ez az ´un. minim´alis sz´ofa el˝o´all´ıt´as´anak feladata. Sajnos ez egy neh´ez feladat.

2.4. t´etel. A minim´alis sz´ofa probl´ema NP-neh´ez .

Eredetileg a feladatot n-esekre bizony´ıtott´ak, de ebb˝ol k¨ovetkezik, hogy halmazokra is

´erv´enyes. Legyen ugyanis az alaphalmaz I. Ekkor minden halmazt felfoghatunk, mint egy |I| hossz´u bin´aris ´ert´ekeket tartalmaz´o vektort.

A fenti p´eld´at szeml´elve az embernek az az ´erz´ese t´amad, hogy az a rendez´es adja a legkeve-sebb cs´ucs´u sz´of´at, amelyeben az elemek a halmazokban val´o el˝ofordul´asok sz´am´anak ar´any´aban cs¨okken˝o sorba vannak rendezve. Ugyanis a gyakori elemek fognak a halmazok kapott sorozatok elej´ere ker¨ulni, ´es ezek az elemek, mivel gyakoriak sok sorozat elej´en lesznek megtal´alhat´ok. A sz´ofa a k¨oz¨os prefixeket csak egyszer t´arolja, ´ıgy akkor lesz a sz´ofa m´erete v´arhat´oan a legkisebb, ha min´el t¨obb sorozatnak van k¨oz¨os prefixe. Az el˝oz˝o ´abra is ezt sugallta.

Sajnos a fenti m´odon kapott sz´ofa nem felt´etlen¨ul adja a legkevesebb pontot tartalmaz´o sz´of´at. Ezt a legegyszer˝ubben egy ellenp´eld´aval tudjuk bizony´ıtani. Legyenek a halmazaink a k¨ovetkez˝oek :AB,AC,CZ,BCZ,BZ,Z. AZ elem gyakoris´aga 4, a B, C-´e 3 ´es azAelem´e 2.

Ha felrajzoljuk ezen gyakoris´agok alapj´an kapott rendez´es (Z > B > C > A, de aC, B elemek sorrende tetsz˝oleges lehet) szerinti sz´of´at, akkor a bal oldali sz´of´at kapjuk. Ha az A ´es B, C elemek sorrendj´et felcser´elj¨uk, akkor eggyel kevesebb pontot tartalmaz´o sz´of´at kapunk (jobb oldal).

T≺DESC TOP T

2.3. ´abra. Ellenp´elda arra, hogy az el˝ofordul´as szerinti cs¨okken˝o sorrend adja a minim´alis m´eret˝u sz´of´at

Patr´ıcia-f´ak

Egy ir´any´ıtott utat l´ancnak h´ıvunk, ha minden pontj´anak csak egy gyereke van. A Patr´ıcia-fa a sz´of´ab´ol sz´armaztathat´o ´ugy, hogy a sz´ofa nem b˝ov´ıthet˝o l´ancait egy-egy ´ell´e vonjuk ¨ossze.

Az ´uj ´el a l´anc utols´o pontj´aba mutat, c´ımk´eje a l´anc ´eleinek c´ımk´eib˝ol ´all´o sorozat. Ha a l´anc¨osszevon´ast csak a lev´elben v´egz˝od˝o l´ancokra hajtjuk v´egre, akkor ´un Patr´ıcia* f´at kapunk.

Ha a sz´ofa sok l´ancot tartalmaz, akkor a Patr´ıcia-fa sokkal hat´ekonyabb. Ellenkez˝o esetben viszont t¨obb mem´ori´at haszn´al, mivel a c´ımk´eket vektorokban t´aroljuk, ami egyetlen elem t´arol´asa eset´en nem c´elravezet˝o a nagy t¨obbletk¨olts´eg miatt.

2.8.2. Piros-fekete f´ ak

A piros-fekete (RB-tree vagy symmetric binary B-trees) f´ak a kiegyens´ulyozott bin´aris f´ak (balanced binary tree) egy t´ıpusa. Minden cs´ucsnak sz´ıne van, hagyom´anyosan piros vagy fekete.

Speci´alis forgat´asokat haszn´al´o besz´ur´as m˝uvelet biztos´ıtja, hogy b´armely a gy¨ok´erb˝ol lev´elbe vezet˝o ´ut hossza ne legyen nagyobb, mint a legr¨ovidebb ilyen ´ut hossz´anak k´etszerese. Egy piros-fekete fa a k¨ovetkez˝o tulajdons´agokkal rendelkezik :

I. Minden cs´ucsnak a sz´ıne piros vagy fekete.

II. Minden lev´el sz´ıne fekete.

III. Minden piros cs´ucsnak mindk´et fia fekete.

IV. B´armely k´et, azonos cs´ucsb´ol indul´o, lev´elig vezet˝o ´uton ugyanannyi fekete cs´ucs van.

A fentiekb˝ol k¨ovetkezik, hogy b´armely n bels˝o cs´uccsal rendelkez˝o piros-fekete fa magass´aga legfeljebb 2 lg(n+ 1). A bizony´ıt´as ´es a fa ´ep´ıt´es´enek menete megtal´alhat´o az irodalomban (pl.

[100]).

2.8.3. Hash-t´ abla

A hash-t´abla magyar elnevez´ese has´ıt´o-t´abla (,), de mi ezt a sz´ot nem fogjuk haszn´alni. A hash-t´abla elemek gyors elhelyez´es´ere ´es visszakeres´es´ere haszn´alt adatstrukt´ura. A t´abl´azatnak cell´ai vannak, amibe elemeket helyezhet¨unk. Minden cell´anak van egy c´ıme (vagy indexe). A hash-t´abl´as t´arol´asban k¨ozponti szerepet t¨olt be az elemeken ´ertelmezett ´un.hash-f¨uggv´eny, ami

megadja az elem hash-´ert´ek´et. Egy elemet arra a c´ımre helyez¨unk be a hash-t´abl´aban, amelyet a hash-´ert´eke megad. El˝ofordulhat, hogy k¨ul¨onb¨oz˝o elemekhez a hash-f¨uggv´eny ugyanazokat a hash-´ert´eket rendeli. Ezt¨utk¨oz´esnek h´ıvjuk. A hash-t´abl´akr´ol ¨onmag´aban fejezeteket lehet ´ırni, ennyi bevezet˝o azonban el´eg ahhoz, hogy meg´erts¨uk a jegyzet tov´abbi r´eszeit.

In document Magyar nyelv˝ u irodalom (Pldal 39-43)