Hierarchikus lista Kétféle értelemezése van: d e f a b c i h g Kétféle értelemezése van: Tekinthető a rendezett fa egy karakteres reprezentációjának, amely a fa preorder bejárásával kapható meg: (a(b)(c(d)(e)(f(g)(h)))(i)) Ugyanazok a fa műveletek végezhetők el, mint korábban, illetve ugyanúgy rendezhető is. 23:07:05
Hierarchikus lista A lista adatszerkezet általánosításának is tekinthető (a lista elemei maguk is lehetnek listák). Az összes listaművelet értelmezhető rajta. (Ez egy ötelemű lista (melynek utolsó eleme egy (ötelemű lista))) A hierarchikus lista ez utóbbi értelmezése fontos pld. A LISP programozási nyelv esetén. Ezt a nyelvet a hierarchikus listára találták ki. A lista elemei lehetnek: karakter, karaktersorozat, lista. 23:07:05
Hálós adatszerkezet (háló) Bármely elemnek akárhány megelőzője és akárhány rákövetkezője lehet (fa általánosítása). Szélsőséges esetek: egy adatelem önmaga megelőzője és rákövetkezője is lehet (f), két adatelem kölcsönösen egymás megelőzője és rákövetkezője lehet (b, c). irányítatlan gráf esetén ….. A matematikából ismert, összefüggő irányított gráffal reprezentálható rajzban. A gráfok fogalmai, algoritmusai alkalmazhatók. Tárolás: szétszórt vagy folytonos d e f a b c 23:07:05
Háló szétszórt ábrázolása Ezt multilistával szokás megvalósítani Mutató tömböket alakítunk ki az elemeknél (az elemeket önkényes módon sorbarendezzük). Ezek a mutatótömbök a megfelelő elemeket címzik. d 5 e 3 f 6 a 1 b 4 c 2 1 4 2 2 4 2 5 5 4 4 3 6 5 6 6 23:07:05
Háló folytonos ábrázolása Ezt szomszédsági mátrixszal szokás megoldani. Boole-mátrix (0,1: logikai értékek) Mérete a háló elemeinek számával négyzetesen arányos: nxn-es, ha n elemünk van. A mátrix sorait és oszlopait az önkényes sorrend szerint a csúcsok sorszámaival cimkézzük. 1 2 3 4 5 6 d 5 e 3 f 6 a 1 b 4 c 2 23:07:05
Hálós adatszerkezet műveletei A hálós adatszerkezet dinamikus és homogén, de az alapműveletek speciálisan értelmeződnek rá: Létrehozás: üres adatszerkezetet hozunk létre Bővítés: a szomszédsági mátrixnak eggyel nő a sor és oszlop száma: az új sor és oszlop értékeit a szomszédsági viszonynak megfelelően töltjük fel. Törlés: a mátrixnak törlődni fog egy azonos címkéjű sora és oszlopa. Az, amelyik a törlendő elemet reprezentálja. 23:07:05
Hálós adatszerkezet műveletei Csere: megoldható. Rendezés, keresés nem értelmezett. Feldolgozás alapja a bejárás. Bejárás: egy adott hálós adatszerkezetben kitüntetünk egy elemet, a kezdőpontot, majd ebből kiindulva térképezzük fel a háló összes elemét. A bejárás lehet Szélességi Mélységi 23:07:05
Háló szélességi bejárása Szélességi bejárás: a bejárás szisztematikusan vizsgálja az elemeket, az adott elem rákövetkezőit és összegyüjti az S-ből elérhető összes elemet. Létrehoz egy S gyökerű szélességi fát (erdőt), mely ezen elemeket tartalmazza, és benne az S-ből egy adott elemhez vezető út mindig a legrövidebb. Az algoritmus mindig az S-től azonos távolságra levő elemeket vizsgálja, és buborékszerűen terjeszti ki a vizsgálatot eggyel lejjebb lépve. 23:07:05
Háló szélességi bejárása A szélességi fa szintenként épül fel, ezért kezdetben minden elem fehér (ezek később szürkékre, majd feketére változnak). Egy elem a bejárás során elértté válik, és szürke színű lesz, ha először jutunk el hozzá. Ezután a színe már nem lehet fehér. A fekete elemek összes megelőzője fekete, rákövetkezőik vagy szürkék, vagy feketék lehetnek. A szürke elemek rákövetkezői fehérek is lehetnek, de a megelőzőjük fekete. A szürke elemek alkotját a buborék felszínét (csak szürke elemről tudunk tovább menni). 23:07:05
Háló szélességi bejárása Szürke: elértük a csúcsot. Kiegészítjük vele a fát, amit szintenként építünk. Fekete: elértük a csúcsot , plusz az összes rákövetkezőjét is. Ha az S-ből az összes elemet megtaláltuk, és még van fehér elem, akkor új kezdőpontot kell választanunk, és újra végre kell hajtanunk rá az algoritmust. Új kezdőpontnak választjuk azt az elemet, pl. amelynek a sorában a legtöbb egyes van. 23:07:05
Háló szélességi bejárása A gyakorlatban sok szürke elemet kell kezelnünk, így ezeket az elérésük és feldolgozásuk közötti időre egy sorba jó betenni. A sor első elemével dolgozunk mindig. A fába csak a fehérről szürkére változott elemeket vesszük fel. Egy szélességi fa vagy egy szélességi erdő lett az eredmény (A kezdőcsúcsoktól függően eltérő fák ill. erdők is kialakulhatnak.) 23:07:05
Háló szélességi bejárása d b c d 5 e 3 f 6 a 1 b 4 c 2 (a) (c, b) [a] (c, b) (b, d) [a, c] (b, d) (d) [a, c, b] (d) () [a, c, b, d] (e) (f) [a, b, c, d, e] (f) [a, b, c, d, e, f] f e 23:07:05
Háló szélességi bejárása d c b f e d 5 e 3 f 6 a 1 b 4 c 2 e b d f a c c a b d f e Valójában az az érdekes, hogyan lehet eljutni valahová S-ből. 23:07:05
Háló szélességi bejárása d c b f e d 5 e 3 f 6 a 1 b 4 c 2 e b d f a c c a b d f e Valójában az az érdekes, hogyan lehet eljutni valahová S-ből. 23:07:05
Szélességi keresés (egy) algoritmusa procedure SzK (G,s) for i 1 to méret(G) do SZÍN[i]fehér D[i] [i]0 endfor SZÍN[s]szürke D[s]0 Qúj_üres_SOR PUT(Q,s) -- D[i]: Az i. csúcs ilyen -- messze van az s.-től. -- [i]: Az s.-ből i.-be vezető -- úton ez az utolsó csúcs while NEM_ÜRES(Q) do uGET(Q) for i1 to méret(G[u].KÖV) do vG[u].KÖV[i] if SZÍN[v] = fehér then SZÍN[v]szürke D[v]D[u]+1 [v]u PUT(Q,v) end if end for SZÍN[u]fekete end while end procedure 23:07:05
Háló mélységi bejárása Mélységi bejárás: mélységi fa (erdő) építésével S-ből induló utakat próbálunk nyilvántartani. Hasonlít a széleségi bejáráshoz, csak a szürke csúcsok feldolgozási idejét változtatjuk meg: amikor választanunk kell a szürke csúcsok közül, mindig az utoljára elért szürke csúcsokból haladunk tovább. Egy verembe rakjuk a szürke csúcsokat az elérésük sorrendjében. Mélységi erdő lesz az eredmény. Itt abban az értelemben is, hogy a részfák is mélységi fák. 23:07:05
Háló mélységi bejárása d c d 5 e 3 f 6 a 1 b 4 c 2 (a) (a, c) [ ] (a, c) (a, c, b) [ ] (a, c, b) (a, c) [b] (a, c) (a, c, d) [b] (a, c, d) (a, c) [b, d] (a, c) (a) [b, d, c] (a) () [b, d, c, a] (e) (e, f)[b, d, c, a] (e, f) (e)[b, d, c, a, f] (e) ()[b, d, c, a, f, e] f e 23:07:05
Háló mélységi bejárása (a) (c) [ ] (a, c) (a, c, e) [ ] (a, c, e)(a, c, e, d) [ ] (a, c, e, d)(a, c, e, d, b) [ ] (a, c, e, d, b) (a, c, e, d) [b] (a, c, e, d) (a, c, e) [b, d] (a, c, e) (a, c, e, f) [b, d] (a, c, e, f) (a, c, e) [b, d, f] (a, c, e) (a, c) [b, d, f, e] (a, c) (a) [b, d, f, e, c] (a) () [b, d, f, e, c, a] a d c b f e a 1 b 4 c 2 d 5 e 3 f 6 23:07:05
Háló mélységi bejárása d c b f e e a d f b c f b c a e d a 1 b 4 c 2 d 5 e 3 f 6 23:07:05
Mélységi bejárás (egy) algoritmusa procedure MB (G,s) for i 1 to méret(G) do [i]0 SZÍN[i]fehér endfor idő0 MK_BEJÁR_1(G,s) if SZÍN[i]=fehér then MK_BEJÁR_1(G,i) end if end procedure procedure MB_BEJÁR_1(G,u) SZÍN[u]szürke D[u] időidő+1 for i1 to méret(G[u].KÖV) do vG[u].KÖV[i] if SZÍN[v] = fehér then [v]u MK_BEJÁR_1(G,v) end if end for SZÍN[u]fekete F[u]időidő+1 end procedure -- D[u], F[u], [u]: ?? 23:07:05
Néhány gráfelméleti fogalom Fogalmak: Út: egy hálóban azon elemek összességét, amelyek listát alkotnak a gráfon belül, útnak nevezzük. Körút: olyan út, amelynek az utolsó eleme után az első következik. Speciális gráfműveletek: Útkeresés két csomópont között, annak eldöntése, hogy van-e körút a hálóban Meghatározni, hogy egy adott csomópontból elérhető-e egy másik, Illetve, mely csomópontok érhetők el belőle 23:07:05
Rekord adatszerkezet A rekord statikus adatszerkezet, heterogén (ez az egyetlen). Mezőkből áll, ezek sorrendje kötött, mindegyiknek saját neve van. Tárolása: folytonos, de szétszórt is lehet. Létrehozás: mezők neve alapján, nem minden mező kap szükségszerűen értéket. Bővítés: nincs. Több mező nem lehet, de értéket kaphat olyan mező, aminek eddig még nem volt értéke. 23:07:05
Rekord adatszerkezet Csere: név alapján az értéket cseréljük Törlés: csak logikai (cserével valósul meg) Elérés: (a rekordon belül) közvetlen, mező név alapján Rendezés, keresés, bejárás nincs Feldolgozás: mezőnevek alapján Az érték lehet Atomi Rekord 23:07:05
Rekord adatszerkezet Megengedhető, hogy az adatelem maga is egy adatszerkezet legyen. Ez az ortogonalitás elve. (Bármely adatszerkezet adateleme lehet bármely adatszerkezetnek.) Ezzel a memóriában tárolható adatszerkezetek végére értünk. Igazából a B-fákat már a háttértárolón szokás tárolni. 23:07:05