270 likes | 432 Views
Struktúra nélküli adatszerkezetek. Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása Struktúra nélküli (Nincs kapcsolat az adatelemek között.) Halmaz Multihalmaz Asszociatív …. A halmaz adatszerkezet. Dinamikus és homogén adatszerkezet.
E N D
Struktúra nélküli adatszerkezetek • Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása • Struktúra nélküli (Nincs kapcsolat az adatelemek között.) • Halmaz • Multihalmaz • Asszociatív • …
A halmaz adatszerkezet • Dinamikus és homogén adatszerkezet. • Az adatelemek között nincs kapcsolat, így • nem beszélhetünk az elemek sorrendjéről sem. • A halmaz, mint absztrakt adatszerkezet megfelel a matematikai halmaz fogalomnak. Így pl. • nincs benne ismétlődő elem. • Van üres halmaz. • Szemben a matematikai halmaz fogalommal, a halmaz adatszerkezetben nem engedünk meg végtelen számosságú halmazt.
Halmazokra értelmezett műveletek • ELEME (∈, in ): megmondja, hogy egy adott adatelem benne van-e a halmazban, vagy sem • UNIÓ KÉPZÉS ( U, + ): eredménye egy olyan új halmaz, amelynek elemei a kiinduló halamazok valamelyikében szerepeltek (elemei voltak). • METSZET KÉPZÉS (∩, * ): eredménye egy olyan új halmaz, melynek elemei a kiinduló halmazokmindegyikében szerepeltek. • KÜLÖNBSÉGKÉPZÉS ( \, - ): eredménye egy olyan új halmaz, amelynek elemei a műveleti jel bal oldalán álló halmazban szerepeltek, a jobb oldalán halmazban pedig nem szerepeltek. • KOMPLEMENTER KÉPZÉS: (alaphalmaz)
Halmazokra értelmezett műveletek • Összehasonlítás: • Egyenlőség • Valódi és • „nem valódi” részhalmaz
A halmaz adatszerkezet műveletei • LÉTREHOZÁS: • Felsorolás segítségével megadjuk a halmaz elemeit(szék, asztal, tábla, pad, …) • Megadunk egy olyan „predikátumot”, amely alapján minden elemről eldönthető, eleme-e a halmaznak(A … teremben is megtalálható bútorfajták.) • BŐVÍTÉS: • Minden esetben az unióképzés, mint halmazművelet segítségével történik. • CSERE: • Nem értelmezett, NINCS. (Tágabb értelemben esetleg: Törlés + bővítés.) • LOGIKAI TÖRLÉS: • Nem értelmezett, NINCS.
A halmaz adatszerkezet műveletei • FIZIKAI TÖRLÉS: • A különbség képzés halmazművelettel valósítható meg. • RENDEZÉS: • Nem értelmezett. (Struktúra nélküliség miatt.) • ELÉRÉS: • Nem értelmezett. (Struktúra nélküliség miatt.) • KERESÉS: • Nem értelmezett. (Struktúra nélküliség miatt.) • FELDOLGOZÁS: • Az alap halmazműveletekkel történik.
Halmazok ábrázolása • A halmaz ábrázolása karakterisztikus függvénnyel történik, amelyet általában folytonos módon ábrázolunk a következő módon: • Adunk egy felső korlátot a lehetséges elemek számára. (Megadjuk az „alaphalmaz” számosságát.) (Itt használjuk ki, hogy nem engedtük meg a végtelen számosságú halmazok létét.) • Lefoglalunk annyi bitet, ahány eleme lehet a halmaznak. • A lehetséges elemeket „sorba állítjuk”. • Az elemekhez a sorrend alapján kölcsönösen egyértelműen hozzárendelünk egy-egy bitet a lefoglaltak közül. • A továbbiakban ezen bit 1-es értéke jelzi ha az adott elem eleme a halmaznak, és a bit 0-s értéke jelzi, ha nem eleme a halmaznak.
Halmazok ábrázolása A_halmaz={2,C,3,7,A,F,9} A_halmaz reprezentációja== > Mekkora tárhelyre van szükség annak a halmaznak a kezeléséhez, amely legfeljebb 256 elemből áll?
A halmazműveletek megvalósítása • Két, karakterisztikus függvénnyel ábrázolt halmaz közötti összes elemi halmazművelet az előbb megadott bitvektorok közötti logikai műveletekre vezethető vissza. (A számítógépek nagyon „erősek” a logikai műveletek körében.) • Az eleme művelet: • létrehozunk egy olyan bitmintát, ahol az „ellenőrizni kívánt” elemhez tartozó bitet 1-re, a többit 0-ra állítjuk, majd • e között és a karakterisztikus függvény bitvektora között végrehajtunk egy „bitenkénti logikai ÉS” műveletet. • Ha eredményül nem a csupa 0 bitet tartalmazó bitvektort kapjuk, akkor a kérdéses elem eleme a halmaznak. • Egyébként nem.
A halmazműveletek megvalósítása • Az unió képzés művelete: • Visszavezethető a logikai VAGY műveletre. • Tekintsük a két halmazt leíró karakterisztikus függvények bitvektorát. • Hajtsuk végre a két bitvektor közötti (bitenkénti) logikai VAGY műveletet. • Eredményként a két kiinduló halmaz uniójának karakterisztikus függvényéhez tartozó bitvektort kapjuk.
A halmazműveletek megvalósítása • A metszet képzés művelete: • Visszavezethető a logikai ÉS műveletre. • Tekintsük a két halmazt leíró karakterisztikus függvények bitvektorát. • Hajtsuk végre a két bitvektor közötti (bitenkénti) logikai ÉS műveletet. • Eredményként a két kiinduló halmaz metszetének karakterisztikus függvényéhez tartozó bitvektort kapjuk.
A halmazműveletek megvalósítása • A komplementer képzés művelete: • Visszavezethető a logikai NEGÁLÁS műveletére. • A különbség képzés művelete: • Visszavezethető logikai műveletekre.
A multihalmaz adatszerkezet • Dinamikus és homogén adatszerkezet. • Az adatelemek között nincs kapcsolat, így • nem beszélhetünk az elemek sorrendjéről sem. • Van üres halmaz. • Szemben a matematikai halmaz fogalommal, a halmaz adatszerkezetben nem engedünk meg végtelen számosságú halmazt. • A multihalmaz abban különbözik a halmaztól, hogy megenged azonos elemeket is, azaz egy adott elem nem csak 0-szor vagy 1-szer fordulhat elő, hanem többször is.
Multialmazok műveletei (hasonlóak, mint a halmazé) • ELEME ( ): nincs eltérés; (lehet picit másként is.) • UNIÓ KÉPZÉS ( ): egy adott értékű elem annyiszor fog szerepelni az unióban, ahányszor a kiinduló multihalmazokban együttesen szerepel. (összeg, de elképzelhető maximum is) • METSZET KÉPZÉS ( ): egy adott értékű elem annyiszor fog szerepelni az unióban, ahányszor a kiinduló multihalmazok mindegyikében szerepel. (minimum) • KÜLÖNBSÉGKÉPZÉS ( ): adott elem a kiinduló multihalmazokban való előfordulásainak különbségeszer fog előfordulni, ha a baloldali multihalmazban fordul elő többször. Egyébként 0-szor. (kivonás) • KOMPLEMENTER KÉPZÉS: nehezebb dió…
Multihalmazok ábrázolása • Általában itt is karakterisztikus függvényt használunk, • Amit általában szintén folytonosan tároljuk, de • Mivel adott elem többször is előfordulhat a multihalmazban, így egyetlen bit helyett, az elemek várható maximumától függő nagyságú egész számok ábrázolásához szükséges tárhelynek foglalunk helyet. • Most is kölcsönösen egyértelmű kapcsolatot hozunk létre a multihalmaz elemei és a tárhelyek között. • A lefoglalt tárhelyekre az adott elem multihalmazbeli előfordulási számát írjuk.
Struktúra nélküli adatszerkezetek • A halaz és a multihalmaz olyan problémák kezelésénél játszanak szerepet, ahol olyan adatokat kell kezelni, ahol az adatelemek nincsenek megkülönböztetve és nincs közötük kapcsolat. • Műveleteik implementációjának úgy kell létrejönnie, hogy az absztrakt viselkedésmódot valósítsák meg. • Ez azt jelenti, hogy az implementációnak el kell rejtenie a reprezentációs szerkezeteket, és az algoritmust megvalósító részleteket is.
Asszociatív adatszerkezetek • Homogén adatszerkezetek (minden adatelem azonos típusú) osztályozása • Struktúra nélküli • Asszociatív • Tömb • Vektor • Mátrix • Háromszögmátrix • Ritka mátrix • Dinamikus tömb • Táblázat • ……. • …
Asszociatív adatszerkezetek • Az asszociatív adatszerkezet olyan halmaz, vagy multihalmaz, amelyből bizonyos adott feltételeknek eleget tevő részhalmazokat választhatunk ki. == > A legfontosabb művelet a részhalmaz kiválasztás művelete.
A tömb adatszerkezet • Statikus és homogén, asszociatív adatszerkezet. • Az egyik leggyakrabban használt adatszerkezet, amelyet • A felépítése definiál, és amelyben • Az adatelemek egymáshoz viszonyított helyzete a lényeges. • A tömb bármely eleme egész számok egy sorozatán keresztül érhető el. • Minden adatelemhez különböző egész szám sorozat tartozik: az asszociativitást biztosító részhalmazok diszjuktak és egy eleműek. • A szám sorozat elemeit a tömb indexeinek nevezzük. • Az indexek számát dimenziónak hívjuk.
A tömb adatszerkezet • Egydimenziós tömb (Vektor): • Rögzítjük az első elem helyét, • A többi elem helyét ehhez viszonyítjuk • Ha mást nem mondunk, az indexek értéke 1-től indul. • Vektor (jelzők nélkül) == > számunkra 1 dimenziós statikus tömb • Kétdimenziós tömb (Mátrix) • Itt is az első elemhez viszonyítjuk a többit • Beszélünk sorokról és oszlopokról • A dimenziók száma tetszőleges, de mindig véges
A tömb adatszerkezet műveletei • LÉTREHOZÁS: • Rögzítjük a dimenziók számát, • Az egyes dimenziókhoz tartozó indexek tartományát, és ezáltal • Az elemek számát • A szerkezet kialakításával párhuzamosan esetleg elemeket is elhelyezhetünk a szerkezetben. • BŐVÍTÉS: • NINCS. (Statikus adatszerkezet.) • CSERE: • Elem elhelyezése oda, ahová nem tettünk a létrehozásakor • Hagyományosan: létező elem értékét felülírjuk
A tömb adatszerkezet műveletei • FIZIKAI TÖRLÉS: • NINCS. (Statikus adatszerkezet.) • LOGIKAI TÖRLÉS: • Speciális CSERE műveletként értelmezhető • ELÉRÉS: • Az adatszerkezet elemeinek elérése közvetlen. • RENDEZÉS: • Általában nem értelmezett. • Vektoroknál (1 dimenziós tömb) viszont igen.
A tömb adatszerkezet műveletei • KERESÉS: • A közvetlen elérés miatt általában nem beszélünk keresésről. • Teljes keresés. (Amikor nem általában…..) • Rendezett vektor esetében viszont van értelme. Ilyenkor bármelyik kereső algoritmus alkalmazható. • FELDOLGOZÁS: • Alapja a közvetlen elérés • BEJÁRÁS: • Értelmezhető művelet, de • Reprezentáció függő
A tömbök ábrázolása • A folytonos ábrázolást szoktuk alkalmazni. • Ez vektoroknál teljesen természetes is. • Többdimenziós tömböknél beszélünk • Sor folytonos és • Oszlop folytonos ábrázolásról. • A reprezentáció fontos eleme a CÍMFÜGGVÉNY. • Ez a függvény meghatározza adott elem tárhelyének címét a hozzá tartozó index értékek és az első elem tárhelyének címe alapján.
Címfüggvény • Vektor • Neve (pl.) A • Index tartománya: s-től, t-ig • Egy tömb elem tárolásához szükséges tárhely mérete: l • Az első elem tárhelyének címe: K == > • Címe(Ai)=K+l*(i-s) • Az összes tömb elem tárolásához szükséges tárhely mérete: l*(t-s+1)
Mátrix: sor és oszlop folytonos ábrázolás • Sor folytonos ábrázolás • Oszlop folytonos ábrázolás
Címfüggvény • Mátrix • Neve (pl.) A • Index tartománya: s-től, n-ig és t-től m-ig • Egy tömb elem tárolásához szükséges tárhely mérete: l • Az első elem tárhelyének címe: K == > • Címe_sf(Ai,j)=K+l*{(i-s)*(m-t+1)+(j-t)} • Címe_of(Ai,j)=K+l*{(n-s+1)*(j-t)+(i-s)} • Az összes tömb elem tárolásához szükséges tárhely mérete: l*(n-s+1)*(m-t+1)