3. előadás, algoritmusok, a halmaz és a multihalmaz, tömbök. Adatszerkezetek és algoritmusok előadás 2020. február 25. Szétszórt (láncolt) építőelemei,, és Debreceni Egyetem Informatikai Kar
Általános tudnivalók Ajánlott irodalom: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Új algoritmusok, Scolar Informatika, 2003. Donald E. Knuth: A számítógépprogramozás művészete 1. (Alapvető algoritmusok), Műszaki Könyvkiadó, 1994. Donald E. Knuth: A számítógépprogramozás művészete 3. (Keresés és rendezés), Műszaki Könyvkiadó, 1994. Seymour Lipschutz: Adatszerkezetek, Panem-McGraw-Hill, Budapest, 1993. Rónyai Lajos, Ivanyos Gábor, Szabó Réka:, Typotex, Budapest, 2008. Félév teljesítésének feltételei: Gyakorlati aláírás 2 ZH Írásbeli vizsga, aminek az értékelésébe... További részletek: http://hallg.inf.unideb.hu/~halasz Szétszórt (láncolt) építőelemei
Beszúró rendezés procedure BESZÚRÓ-RENDEZÉS(A) 1 for j 2 to méret(a) do 2 kulcs A[j] 3 i j 1 4 while i 1 és A[i] > kulcs do 5 A[i + 1] A[i] 6 i i 1 7 end while 8 A[i + 1] kulcs 9 end for end procedure Vegyük észre: a while ciklus lineáris keresést használ kulcs helyének meghatározására az A elejében. Lehetne ezt bináris keresésre cserélni? Szétszórt (láncolt) építőelemei
Rendszer Elemek: egyedek Tulajdonságok (statikus rész) Viselkedés (dinamikus rész) Kölcsönhatás Komplex rendszer Nyílt rendszer Dinamikus rendszer Szétszórt (láncolt) építőelemei
Absztrakció, modellezés Modellalkotás, absztrakció Adatmodell, eljárásmodell Adat, információ Az adatelemek lehetnek egyszerűek (atomiak) és összetettek. Minden adatelem rendelkezik valamilyen értékkel. Az adatelemek között jól meghatározott kapcsolatrendszer van. Az adatelemek és a közöttük lévő kapcsolatok definiálják a logikai (absztrakt) adatszerkezetet. Független hardvertől, szoftvertől. Fizikai adatszerkezet (társzerkezet): adatszerkezet az operatív tárban vagy periférián (háttértáron). Szétszórt (láncolt) építőelemei
osztályozása Lehetséges csoportosítási szempontok: 1 Változhat-e az adatszerkezet elemeinek száma? statikus dinamikus 2 Milyen az adatszerkezet elemeinek a típusa? homogén heterogén 3 Milyen kapcsolatban állnak egymással az adatelemek az adatszerkezetben? Egy homogén adatszerkezet lehet struktúra nélküli asszociatív szekvenciális hierarchikus hálós A heterogén et nem csoportosítjuk ilyen szempont alapján. Szétszórt (láncolt) építőelemei
kel végezhető műveletek (Alapvető algoritmusok) 1 Létrehozás 2 Módosítás bővítés törlés (fizikai, logikai) csere 3 Rendezés 4 Keresés 5 Elérés 6 Bejárás 7 Feldolgozás Szétszórt (láncolt) építőelemei
Ábrázolási (i) módok Ábrázolás alatt az adatszerkezet memóriában való megjelenési formáját értjük. Ez minden adatszerkezet esetén lehet folytonos (vektorszerű) szétszórt (láncolt) Az adatelemek számára tárhelyeket foglalunk a memóriában. Egy tárhely mindig egy bájtcsoportot jelent, amely egy adatelem értékét tárolja, illetve szerkezetleíró információkat is hordozhat. Szétszórt (láncolt) építőelemei
Egy tárhelyen egy adatelem értékét tároljuk. A tárhelyek a memóriában folytonos, összefüggő tárterületet alkotnak, a tárhelyek mérete azonos. Előnye: közvetlen elérés, a kezdőcím és az egy adatelemhez tartozó tárhely méretének ismeretében a csere művelete könnyen megvalósítható hatékony rendező algoritmusok (pl. gyorsrendezés) hatékony kereső algoritmusok (pl. bináris keresés) Hátránya: nem segíti a bővítés és a fizikai törlés műveletének végrehajtását Szétszórt (láncolt) építőelemei
Szétszórt (láncolt) Egy tárhelyen egy adatelem értékét (adatrész) és legalább egy mutató értékét (mutatórész) tároljuk. A mutatók értékei memóriacímek lehetnek, amelyek megmondják az adatelem rákövetkezőinek tárbeli helyét. A tárhelyek mérete nem szükségképpen azonos, elhelyezkedésük a memóriában tetszőleges. tárhely {}}{ } {{ } adatrész } {{ } mutatórész A szétszórt ábrázolási mód alapvető fajtái: egyirányban láncolt lista cirkuláris lista kétirányban láncolt lista multilista Szétszórt (láncolt) építőelemei
Egyirányban láncolt lista A tárhely (listaelem) az adatelem értékén kívül egy mutatót tartalmaz, amely a következő listaelem címét tartalmazza. fej tárhely { (listaelem) }} { }{{}}{{} adatrész mutatórész nil A láncolt lista első elemének tárbeli címét egy mutató, a fejmutató tárolja. A láncolt lista végét egy speciális érték, a NIL érték jelzi. Amennyiben a fejmutató tartalmazza ezt az értéket, akkor az egyirányban láncolt lista üres Szétszórt (láncolt) építőelemei
Cirkuláris lista Hasonló az egyirányban láncolt listához, ám itt egyik listaelem mutatórésze sem tartalmazhatja a NIL értéket: az utolsó listaelem mutatórészébe az első listaelem címe kerül. fej tárhely { (listaelem) }} { }{{}}{{} adatrész mutatórész A cirkuláris lista első elemének tárbeli címét most is egy mutató, a fejmutató tárolja. Amennyiben a fejmutató a NIL értéket tartalmazza, akkor a cirkuláris lista üres. Szétszórt (láncolt) építőelemei
Kétirányban láncolt lista Hasonló az egyirányban láncolt listához, ám itt minden listaelem mutatórésze két részből áll: az egyik mutató az adott listaelemet megelőző, a másik az adott listaelemet követő listaelemre mutat. egyik fej adatrész mutatórész {}}{{}}{ nil } {{ } tárhely (listaelem) másik fej nil Két lánc alakul ki, két fejmutatóval. A fejmutatók a kétirányban láncolt lista első és utolsó elemére mutatnak. Ha mindkét fejmutató értéke NIL, akkor a kétirányban láncolt listának nincs egyetlen eleme sem, azaz üres. (És mi a helyzet, ha csak az egyikfej mutató értéke NIL?) Szétszórt (láncolt) építőelemei
Kétirányban láncolt lista Hasonló az egyirányban láncolt listához, ám itt minden listaelem mutatórésze két részből áll: az egyik mutató az adott listaelemet megelőző, a másik az adott listaelemet követő listaelemre mutat. egyik fej adatrész mutatórész {}}{{}}{ nil } {{ } tárhely (listaelem) másik fej nil Két lánc alakul ki, két fejmutatóval. A fejmutatók a kétirányban láncolt lista első és utolsó elemére mutatnak. Ha mindkét fejmutató értéke NIL, akkor a kétirányban láncolt listának nincs egyetlen eleme sem, azaz üres. (És mi a helyzet, ha csak az egyikfej mutató értéke NIL?) Szétszórt (láncolt) építőelemei
Multilista (1) Ebben a változatban a listaelemek adatrésze összetett. Az adatrész minden komponensére fölépíthető egy egyirányban láncolt lista. betű A 54 R 79 } {{ } adatrész szám G tárhely { (listaelem) }} { nil 18 nil } {{ } mutatórész Annyi lánc alakítható ki, ahány komponensből áll az adatrész. Minden lista külön fejmutatóval rendelkezik, és minden listaelem mindegyik láncban előfordul egyszer. Szétszórt (láncolt) építőelemei
Multilista (2) Ebben a változatban a listaelemek adatrésze általában összetett. Az adatrész valamely komponensének értékeit figyelembe véve építjük föl az egyirányban láncolt listákat. Adamkó 1978 Espák 1978 nil 1975 1977 Jeszenszky 1975 Kollár 1977 nil 1978 Szétszórt (láncolt) Kósa 1975 Pánovics 1975 nil Annyi lánc alakul ki, ahány különböző értéket az adatrész adott komponense felvesz. Minden lista külön fejmutatóval rendelkezik, és minden listaelem csak egy láncban szerepel, pontosan egyszer. építőelemei
Multilista (3) Ebben a változatban a listaelemek tartalmaznak egy-egy fejmutatót is, melyek újabb láncolt listák első elemeire mutatnak. A B D nil nil Béla nil Szétszórt (láncolt) fej Aladár Anna nil építőelemei Az allisták szerkezete eltérhet a főlista szerkezetétől.
grafikus (képi) megjelenítésénél használt jelölések: : adatelem : kapcsolat két adatelem között Amikor egy absztrakt adatszerkezethez megadjuk a i módját és a leképezését, akkor megadjuk az absztrakt adatszerkezet reprezentációját. Szétszórt (láncolt) absztrakt adatszerkezet leképezés ábrázolás Ha a reprezentáció mellé megadjuk a műveletek megvalósítását (algoritmusok) is, akkor megadjuk az absztrakt adatszerkezet ját. építőelemei
Algoritmus fogalma Olyan eljárás (elemi lépések sorozata), melynek során a következők teljesülnek: jól meghatározott objektumokon jól meghatározott műveleteket végzünk minden lépés elvégzése után egyértelműen definiált helyzet áll elő véges sok lépés után végetér nem csak egy feladatra, hanem egy feladatosztály tagjaira érvényes Szétszórt (láncolt) építőelemei
at a következő módokon lehet megadni: természetes (beszélt) emberi nyelven pontokba szedett természetes nyelvi utasításokkal folyamatábrával pszeudonyelvvel (lásd gyakorlaton) valamilyen programozási nyelven Szétszórt (láncolt) építőelemei
Példa folyamatábrával START be: N összeg 0 i 1 Szétszórt (láncolt) összeg összeg + i i i + 1 igen i N nem ki: összeg STOP építőelemei
építőelemei Vezérlési szerkezetek 1 szekvencia (utasítások végrehajtása a felírás sorrendjében) 2 szelekció (elágazások) 3 iteráció (ciklusok) 4 alprogramok hívása ( kész algoritmusok bevonása a részfeladatok megoldásába) Szétszórt (láncolt) építőelemei
Szabad helyek kezelése Adatszerkezetek szétszórt ábrázolása esetén Az ához memória kell, ami véges. A szabad helyekkel gazdálkodni kell! Lehetséges módszerek (a szabad tárhelyek nyilvántartására) folytonos ábrázolás esetén: szabad tárhelyek összegyűjtése a lefoglalt tárterület végén (időigényes) szemétgyűjtögetés (garbage collection) elemmozgatással minden tárhelyhez hozzárendelünk egy bitet, ami a foglaltságot jelzi (nincs elemmozgatás) szétszórt ábrázolás esetén: szabad helyek láncolt listája (probléma: különböző méretű tárhelyek) szemétgyűjtögetés (garbage collection) a szabad helyek láncolásával a szabad helyek nyilvántartása bitvektor segítségével Szétszórt (láncolt) építőelemei
Halmaz és multihalmaz és a multihalmaz struktúra nélküli, homogén és dinamikus. Szétszórt (láncolt) minden eleme különböző. ban előfordulhatnak azonos elemek is. Mindkét adatszerkezetre igaz, hogy az adatszerkezetben lévő elemek között nincs kapcsolat (ezért struktúra nélküli ). építőelemei
adatszerkezet adatszerkezet a matematikai halmaz fogalom megjelenése az szintjén. Mindig véges ennyiben nem felel meg teljesen a matematikai halmaz fogalmának. alapműveletei eleme, : megmondja, hogy egy adatelem benne van-e a halmazban vagy sem unió, : két halmaz unióját adja metszet, : két halmaz metszetét adja különbség, \: két halmaz különbségét adja Szétszórt (láncolt) építőelemei
adatszerkezet Az kel végezhető hagyományos műveletek megvalósítása halmazok esetén: Létrehozás kétféleképpen: explicit módon, a halmaz elemeinek felsorolásával (esetleg üresen) egy predikátum segítségével Bővítés unióképzéssel Törlés csak fizikai, különbségképzéssel Csere nincs Rendezés, keresés, elérés, bejárás nem értelmezettek Feldolgozás a halmaz alapműveleteinek a segítségével Szétszórt (láncolt) építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. K Z A R T D E S Szétszórt (láncolt) A Z építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. K Z A R T D E S Szétszórt (láncolt) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z építőelemei lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy egy bit méretű tárterületet.
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. K Z A R T D E S Szétszórt (láncolt) 1 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z építőelemei lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy egy bit méretű tárterületet. Az adott értékű adatelemhez tartozó bit fogja jelezni, hogy az adatelem benne van-e a halmazban (1) vagy sem (0).
adatszerkezet ja Folytonos reprezentáció esetén a halmaz alapműveleteinek megvalósítása visszavezethető egyszerű bitműveletekre: Unióképzés x A B x A x B Metszetképzés Szétszórt (láncolt) Különbségképzés x A B x A x B x A \ B x A x / B építőelemei
adatszerkezet abban különbözik a halmaztól, hogy megengedi az adatelemek ismétlődését, benne több azonos értékű elem is előfordulhat. alapműveletei eleme, : megmondja, hogy egy adatelem benne van-e a multihalmazban vagy sem unió, : két multihalmaz unióját adja metszet, : két multihalmaz metszetét adja különbség, \: két multihalmaz különbségét adja Multihalmazoknál az kel végezhető hagyományos műveletek megvalósítása hasonló a halmazokéhoz (lásd ott). feldolgozása a multihalmaz alapműveleteinek a segítségével történik. Szétszórt (láncolt) építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) építőelemei lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk.
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 0 0 0 0 0 2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 0 0 0 0 0 2 0 0 0 0 0 0 1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 0 0 0 0 0 2 0 0 0 0 0 0 1 1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 0 0 0 0 0 2 0 0 0 0 0 0 1 1 2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet reprezentációja Klasszikus reprezentációja folytonosan, karakterisztikus függvény segítségével történik. R E K Z A D A T S Z E E T E K Szétszórt (láncolt) 2 0 0 1 4 0 0 0 0 0 2 0 0 0 0 0 0 1 1 2 0 0 0 0 0 2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z lehetséges elemeit sorba rendezzük, s mindegyikhez hozzárendelünk egy tárterületet. általában 1 bájtot A tárhelyeken az adott értékű elemek előfordulásainak számát tároljuk. építőelemei
adatszerkezet ja Folytonos reprezentáció esetén a multihalmaz alapműveleteinek megvalósítása visszavezethető egyszerű aritmetikai (számtani) műveletekre: Unióképzés x A B-ben = x A-ban + x B-ben Metszetképzés x A B-ben = min{x A-ban, x B-ben} Szétszórt (láncolt) építőelemei Különbségképzés x A \ B-ben = max{0, x A-ban x B-ben}
Az asszociatív olyan, amelyekből bizonyos adott feltételeknek eleget tevő részhalmazokat választhatunk ki. A legfontosabb művelet tehát a részhalmaz kiválasztásának, a részhalmazképzésnek a művelete. Szétszórt (láncolt) építőelemei A részhalmazok ahogy az ábrán is látható átfedhetik egymást. Egyes esetekben a részhalmazok egyeleműek, máskor akárhány eleműek lehetnek.
adatszerkezet Statikus, homogén és asszociatív adatszerkezet. A felépítése definiálja: benne az adatelemek egymáshoz viszonyított helyzete a lényeges. bármelyik eleme egész számok sorozatán keresztül érhető el. Minden adatelemhez különböző egészszám-sorozat tartozik, így az asszociativitást biztosító részhalmazok egyeleműek és diszjunktak. A számsorozat számait indexeknek nevezzük, segítségükkel tudjuk az adatelemet kiválasztani. Az indexek darabszámát a tömb dimenziójának hívjuk. Ha mást nem mondunk, a tömb elemeinek az indexelése mindegyik dimenzióban 1-től indul. Szétszórt (láncolt) építőelemei
adatszerkezet A legegyszerűbb eset: egydimenziós tömb (vektor 1 ). 1. 2. 3. 4. 5. 6. 7. 8. Kétdimenziós tömb (mátrix). sor Szétszórt (láncolt) oszlop Léteznek magasabb dimenziójú tömbök is. A dimenziók száma tetszőlegesen nagy lehet, de mindig véges. 1 A vektor szó minden egyéb jelző nélküli használatakor statikus, egydimenziós tömbre gondolunk. építőelemei
Tömbökkel végezhető műveletek Létrehozás: rögzítjük a dimenziók számát és az indextartományokat. Ezzel egyben meghatározzuk a tömb elemszámát is. A szerkezet kialakításával párhuzamosan elemeket is elhelyezhetünk a tömbben. Bővítés: nincs, ugyanis a tömb statikus. Csere: bármely (létező) elem értékét felülírhatjuk egy új értékkel elhelyezhetünk elemet oda, ahová a létrehozáskor nem tettünk Törlés: csak logikai. Elérés: az adatelemek elérése közvetlen, az indexek segítségével. Rendezés: egydimenziós tömbök esetén értelmezhető, ott bármelyik rendezési algoritmus alkalmazható. Keresés: reprezentációfüggő művelet, egydimenziós tömbök esetén nagy a jelentősége, ott bármelyik keresési algoritmus alkalmazható. Bejárás: többdimenziós tömbök esetén reprezentációfüggő művelet (lásd később). A feldolgozás alapja a közvetlen elérés. Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..t] egydimenziós tömb leképezése: a s a s+1 a t K A hoz szükséges tárterület mérete: l (t s + 1) bájt, ahol l az egy adatelem ához szükséges tárhely mérete. Ha ismerjük a tárterület kezdőcímét (K ), akkor a következő címfüggvény segítségével bármely elem tárbeli címe meghatározható: az i indexű elem címe = K + l (i s) Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..t] egydimenziós tömb leképezése: a s a s+1 a t K }{{} l A hoz szükséges tárterület mérete: l (t s + 1) bájt, ahol l az egy adatelem ához szükséges tárhely mérete. Ha ismerjük a tárterület kezdőcímét (K ), akkor a következő címfüggvény segítségével bármely elem tárbeli címe meghatározható: az i indexű elem címe = K + l (i s) Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..t] egydimenziós tömb leképezése: a s a s+1 a t K }{{} l A hoz szükséges tárterület mérete: l (t s + 1) bájt, ahol l az egy adatelem ához szükséges tárhely mérete. Ha ismerjük a tárterület kezdőcímét (K ), akkor a következő címfüggvény segítségével bármely elem tárbeli címe meghatározható: az i indexű elem címe = K + l (i s) Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..n, t..m] kétdimenziós tömb leképezése történhet sorfolytonosan (lásd az ábrán) vagy oszlopfolytonosan. a s,t a s,t+1 a s,m K a n,t a n,t+1 a n,m Szétszórt (láncolt) }{{} l építőelemei
Tömbök folytonos reprezentációja Az A[s..n, t..m] kétdimenziós tömb leképezése történhet sorfolytonosan (lásd az ábrán) vagy oszlopfolytonosan. a s,t a s,t+1 a s,m K a s,t a s,t+1 a s,m }{{} l a n,t a n,t+1 a n,m Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..n, t..m] kétdimenziós tömb leképezése történhet sorfolytonosan (lásd az ábrán) vagy oszlopfolytonosan. a s,t a s,t+1 a s,m K a s,t a s,t+1 a s,m a s+1,t }{{} l a n,t a n,t+1 a n,m Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..n, t..m] kétdimenziós tömb leképezése történhet sorfolytonosan (lásd az ábrán) vagy oszlopfolytonosan. a s,t a s,t+1 a s,m K a n,t a n,t+1 a n,m a s,t a s,t+1 a s,m a s+1,t a n,t a n,t+1 a n,m }{{} l Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s..n, t..m] kétdimenziós tömb leképezése történhet sorfolytonosan (lásd az ábrán) vagy oszlopfolytonosan. a s,t a s,t+1 a s,m K a n,t a n,t+1 a n,m Szétszórt (láncolt) a s,t a s,t+1 a s,m a s+1,t a n,t a n,t+1 a n,m }{{} l Sorfolytonos esetén ha ismerjük a tárterület kezdőcímét (K ), akkor a következő címfüggvény segítségével bármely elem tárbeli címe meghatározható: az (i, j) indexű elem címe = K + l (i s) (m t + 1) + l (j t) építőelemei
Tömbök folytonos reprezentációja Az A[s 1..n 1, s 2..n 2,..., s d..n d ] d dimenziós tömb sorfolytonos leképezése esetén a címfüggvény a következő (K továbbra is a tárterület kezdőcímét, l pedig az egy adatelem ához szükséges tárhely méretét jelöli): az (x 1, x 2,..., x d ) indexű elem címe = d d = K + l (x i s i ) (n j s j + 1) i=1 j=i+1 d j=d+1 (n j s j + 1) 1 Szétszórt (láncolt) építőelemei
Tömbök folytonos reprezentációja Az A[s 1..n 1, s 2..n 2,..., s d..n d ] d dimenziós tömb oszlopfolytonos leképezése esetén a címfüggvény a következő (K továbbra is a tárterület kezdőcímét, l pedig az egy adatelem ához szükséges tárhely méretét jelöli): az (x 1, x 2,..., x d ) indexű elem címe = d i 1 = K + l (x i s i ) (n j s j + 1) i=1 j=1 0 (n j s j + 1) 1 j=1 Szétszórt (láncolt) építőelemei
A háromszögmátrixok négyzetes (kvadratikus) mátrixok. a 1,1 a 1,2 a 1,3... a 1,n a 2,1 a 2,2 a 2,3... a 2,n a 3,1 a 3,2 a 3,3... a 3,n...... a n,1 a n,2 a n,3... a n,n Kétfajta háromszögmátrixot szoktunk megkülönböztetni: a felsőháromszög-mátrixot és az alsóháromszög-mátrixot.. Szétszórt (láncolt) építőelemei
A háromszögmátrixok négyzetes (kvadratikus) mátrixok. a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... Szétszórt (láncolt) 0 0 0... a n,n építőelemei Az olyan négyzetes mátrixot, amelynek főátlója alatt csupa 0 elem található, felsőháromszög-mátrixnak nevezzük.
A háromszögmátrixok négyzetes (kvadratikus) mátrixok. a 1,1 0 0... 0 a 2,1 a 2,2 0... 0 a 3,1 a 3,2 a 3,3... 0....... Szétszórt (láncolt) a n,1 a n,2 a n,3... a n,n építőelemei Ha a négyzetes mátrix főátlója fölött lévő elemek mindegyikének értéke 0, akkor alsóháromszög-mátrixról beszélünk.
folytonos reprezentációja Az általános négyzetes mátrixokkal szemben, ahol az értékes elemek száma n 2, a háromszögmátrixoknál az értékes elemek száma csupán n (n + 1). 2 Az értékes elemeket emiatt sor- vagy oszlopfolytonosan egy n (n+1) 2 elemű V vektorra szoktuk leképezni. Szétszórt (láncolt) építőelemei
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) építőelemei (n 1) n 2 + n V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) a 1,1 (n 1) n 2 + n építőelemei V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) a 1,1 a 1,2 a 2,2 (n 1) n 2 + n építőelemei V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) a 1,1 a 1,2 a 2,2 a 1,3 a 2,3 a 3,3 (n 1) n 2 + n építőelemei V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) építőelemei a 1,1 a 1,2 a 2,2 a 1,3 a 2,3 a 3,3 a 1,n a 2,n a 3,n a n,n (n 1) n 2 + n V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) építőelemei a 1,1 a 1,2 a 2,2 a 1,3 a 2,3 a 3,3 a 1,n a 2,n a 3,n a n,n (n 1) n 2 + n V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) építőelemei a 1,1 a 1,2 a 2,2 a 1,3 a 2,3 a 3,3 a 1,n a 2,n a 3,n a n,n (n 1) n 2 + n V :
Felsőháromszög-mátrixok folytonos reprezentációja A felsőháromszög-mátrix értékes elemeit (a főátló elemeit és a fölötte elhelyezkedő elemeket) oszlopfolytonosan célszerű leképezni egy n (n+1) 2 elemű V vektorra: a 1,1 a 1,2 a 1,3... a 1,n 0 a 2,2 a 2,3... a 2,n 0 0 a 3,3... a 3,n....... 0 0 0... a n,n Szétszórt (láncolt) építőelemei 1. 2. 3. 4. 5. 6. (n 1) n 2 + 1 (n 1) n 2 + n V : a 1,1 a 1,2 a 2,2 a 1,3 a 2,3 a 3,3 a 1,n a 2,n a 3,n a n,n
Háromszög-mátrixok folytonos reprezentációja Felsőháromszög mátrixok esetén ennek megfelelően A V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti felsőháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i > j a i,j = V t, egyébként, ahol t = j (j 1) 2 + i Alsóháromszög-mátrixok esetén viszont sorfolytonos leképezést célszerű használni. Ennek megfelelően, a V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti alsóháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i < j a i,j = V t, egyébként, ahol t = i (i 1) 2 + j Szétszórt (láncolt) építőelemei
Háromszög-mátrixok folytonos reprezentációja Felsőháromszög mátrixok esetén ennek megfelelően A V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti felsőháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i > j a i,j = V t, egyébként, ahol t = j (j 1) 2 + i Alsóháromszög-mátrixok esetén viszont sorfolytonos leképezést célszerű használni. Ennek megfelelően, a V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti alsóháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i < j a i,j = V t, egyébként, ahol t = i (i 1) 2 + j Szétszórt (láncolt) építőelemei
Háromszög-mátrixok folytonos reprezentációja Felsőháromszög mátrixok esetén ennek megfelelően A V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti felsőháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i > j a i,j = V t, egyébként, ahol t = j (j 1) 2 + i Alsóháromszög-mátrixok esetén viszont sorfolytonos leképezést célszerű használni. Ennek megfelelően, a V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti alsóháromszög-mátrix (i, j) indexű elemének az értékét: { 0, ha i < j a i,j = V t, egyébként, ahol t = i (i 1) 2 + j Szétszórt (láncolt) építőelemei
Szimmetrikus mátrixok A szimmetrikus mátrixok négyzetes (kvadratikus) mátrixok. a 1,1 a 1,2 a 1,3... a 1,n a 2,1 a 2,2 a 2,3... a 2,n a 3,1 a 3,2 a 3,3... a 3,n....... a n,1 a n,2 a n,3... a n,n Szétszórt (láncolt) építőelemei Melyekre teljesül az a i,j = a j,i egyenlőség bármely i-re és j-re (1 i, j n).
Szimmetrikus mátrixok folytonos reprezentációja Szimmetrikus mátrixok esetén vagy a felső háromszöget képezzük le oszlopfolytonosan, vagy pedig az alsóháromszöget sorfolytonosan A V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti szimmetrikus mátrix (i, j) indexű elemének az értékét: a i,j = V t, ahol t = { j (j 1) 2 + i, ha i j i (i 1) 2 + j egyébként, a 1,1 a 1,2 a 1,3... a 1,n a 2,1 a 2,2 a 2,3... a 2,n Szétszórt (láncolt) építőelemei a 3,1 a 3,2 a 3,3... a 3,n....... a n,1 a n,2 a n,3... a n,n
Szimmetrikus mátrixok folytonos reprezentációja Szimmetrikus mátrixok esetén vagy a felső háromszöget képezzük le oszlopfolytonosan, vagy pedig az alsóháromszöget sorfolytonosan A V vektorból a következő képlet segítségével kaphatjuk vissza az eredeti szimmetrikus mátrix (i, j) indexű elemének az értékét: a i,j = V t, ahol t = u (u 1) + v; u = MAX(i, j) és v = MIN(i, j) 2 a 1,1 a 1,2 a 1,3... a 1,n a 2,1 a 2,2 a 2,3... a 2,n Szétszórt (láncolt) építőelemei a 3,1 a 3,2 a 3,3... a 3,n....... a n,1 a n,2 a n,3... a n,n
Általában egydimenziós tömböt értünk alatta, ekkor más szavakkal (dinamikus) vektornak is nevezzük. A dinamikus tömb mérete szűkebb értelemben a feldolgozás során tetszőlegesen (dinamikusan) változik. Ebben az esetben gyakorlatilag egy szekvenciális lista adatszerkezetet kapunk (lásd később). Tágabb értelemben fizikailag továbbra is statikus tömbről beszélünk, a logikai adatszerkezet létrehozáskor megadott elemszámát viszont később bizonyos határok között a lefoglalt tárterület méretétől függően módosíthatjuk. Ilyenkor a tömb végén lehetnek adatelemek által nem használt, de a létrehozáskor lefoglalt tárhelyek. Bővítés a dinamikus tömb tetszőleges helyén végrehajtható. Fizikai törlés bármely elem esetén értelmezhető. A dinamikus tömb egyéb műveletei megegyeznek a (statikus) tömb műveleteivel. Szétszórt (láncolt) építőelemei
A ritka mátrixok olyan (általában nagyméretű) mátrixok, amelyekben a legtöbb elem értéke ugyanaz (általában 0). Az ettől eltérő értékkel rendelkező elemeket ritka elemeknek nevezzük. 1 2 0 0 0 6 0 4 0 0 0 0 Szétszórt (láncolt) 0 0 0 0 0 0 építőelemei 0 0 0 0 0 0 0 0 0 0 0 2
folytonos reprezentációja Helytakarékossági okból a ritka mátrixnak csak az értékes elemeit (a ritka elemeket), valamint azok sor- és oszlopindexeit célszerű tárolni három vektorban, mégpedig a sorindexek, azon belül pedig az oszlopindexek szerint növekvő sorrendben. Ezt a módszert 3 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 Szétszórt (láncolt) építőelemei SOR = OSZLOP = ÉRTÉK = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2)
folytonos reprezentációja A 3 soros reprezentáció létrehozása Az algoritmus bemenete az A m n-es mátrix, kimenete: k, SOR, OSZLOP, ÉRTÉK. 1: procedure LÉTREHOZÁS(A) 2: k 0 3: for i 1 to m do 4: for j 1 to n do 5: if A[i, j] 0 then 6: k k + 1 7: SOR[k] i 8: OSZLOP[k] j 9: ÉRTÉK[k] A[i, j] 10: end if 11: end for 12: end for 13: end procedure Szétszórt (láncolt) építőelemei
folytonos reprezentációja Elérés a 3 soros reprezentációban Az algoritmus bemenete: SOR, OSZLOP, ÉRTÉK, i, j, kimenete a mátrix (i, j) indexű elemének az értéke. 1: function ELÉRÉS(SOR, OSZLOP, ÉRTÉK, i, j) 2: for l 1 to méret(sor) do 3: if SOR[l] = i then 4: if OSZLOP[l] = j then 5: return ÉRTÉK[l] 6: end if 7: if OSZLOP[l] > j then 8: return 0 9: end if 10: end if 11: if SOR[l] > i then 12: return 0 13: end if 14: end for 15: return 0 16: end function Szétszórt (láncolt) építőelemei
folytonos reprezentációja A 3 soros reprezentáció nem segíti a ritka mátrix oszlopfolytonos feldolgozását, ezért bevezethetünk egy negyedik vektort, amelynek az elemei az aktuális ritka elem oszlopában található következő ritka elem reprezentációbeli indexét adják meg. Ezt a módszert 4 soros reprezentációnak nevezzük: 1 2 3 4 5 6 1 2 3 4 5 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja A 3 soros reprezentáció nem segíti a ritka mátrix oszlopfolytonos feldolgozását, ezért bevezethetünk egy negyedik vektort, amelynek az elemei az aktuális ritka elem oszlopában található következő ritka elem reprezentációbeli indexét adják meg. Ezt a módszert 4 soros reprezentációnak nevezzük: 1 2 3 4 5 6 1 2 3 4 5 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja A 3 soros reprezentáció nem segíti a ritka mátrix oszlopfolytonos feldolgozását, ezért bevezethetünk egy negyedik vektort, amelynek az elemei az aktuális ritka elem oszlopában található következő ritka elem reprezentációbeli indexét adják meg. Ezt a módszert 4 soros reprezentációnak nevezzük: 1 2 3 4 5 6 1 2 3 4 5 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja A 3 soros reprezentáció nem segíti a ritka mátrix oszlopfolytonos feldolgozását, ezért bevezethetünk egy negyedik vektort, amelynek az elemei az aktuális ritka elem oszlopában található következő ritka elem reprezentációbeli indexét adják meg. Ezt a módszert 4 soros reprezentációnak nevezzük: 1 2 3 4 5 6 1 2 3 4 5 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja A 3 soros reprezentáció nem segíti a ritka mátrix oszlopfolytonos feldolgozását, ezért bevezethetünk egy negyedik vektort, amelynek az elemei az aktuális ritka elem oszlopában található következő ritka elem reprezentációbeli indexét adják meg. Ezt a módszert 4 soros reprezentációnak nevezzük: 1 2 3 4 5 6 1 2 3 4 5 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0, 5) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = O = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0, 5) (1 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = O = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0, 5) (1, 2 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = O = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0, 5) (1, 2, 0, 0, 0 ) Szétszórt (láncolt) építőelemei
folytonos reprezentációja Ahhoz, hogy ne kelljen keresnünk az egyes sorok és oszlopok első ritka elemét, a 4 soros reprezentációt kiegészíthetjük még két vektorral, amelyeknek az elemei a megfelelő sor, illetve oszlop első ritka elemének a reprezentációbeli indexét adják meg. Ezt a módszert 4+2 soros reprezentációnak nevezzük: 1 2 3 4 5 1 2 3 4 5 6 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 SOR = OSZLOP = ÉRTÉK = KÖVINDEX = S = O = 1 2 3 4 5 (1, 1, 1, 2, 5) (1, 2, 6, 2, 6) (1, 2, 6, 4, 2) (0, 4, 5, 0, 0) (1, 4, 0, 0, 5) (1, 2, 0, 0, 0, 3) Szétszórt (láncolt) építőelemei
szétszórt reprezentációja A folytonos reprezentáció hátránya, hogy nem tudjuk előre, hány ritka elem van a mátrixban, így azt sem tudjuk, mekkora vektorokra lesz szükségünk. Megoldás: tároljuk a ritka elemeket és azok indexeit egy egyirányban láncolt listában sorindex, azon belül oszlopindex szerinti növekvő sorrendben! 1 1 1 1 2 3 4 5 6 1 2 2 Szétszórt (láncolt) 1 2 3 4 5 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 1 6 6 2 2 4 5 6 2 nil építőelemei
szétszórt reprezentációja A sor- és oszlopfolytonos feldolgozást egyaránt elősegíti, ha a ritka elemeket multilistában helyezzük el: 1 2 3 4 5 1 2 3 4 5 6 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 1 1 1 1 2 2 1 6 6 2 2 4 5 6 2 Szétszórt (láncolt) építőelemei
szétszórt reprezentációja A sor- és oszlopfolytonos feldolgozást egyaránt elősegíti, ha a ritka elemeket multilistában helyezzük el: 1 2 3 4 5 1 2 3 4 5 6 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 Szétszórt (láncolt) építőelemei 1 1 1 1 2 2 1 6 6 2 2 4 nil 5 6 2 nil nil
szétszórt reprezentációja A sor- és oszlopfolytonos feldolgozást egyaránt elősegíti, ha a ritka elemeket multilistában helyezzük el: 1 2 3 4 5 1 2 3 4 5 6 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 Szétszórt (láncolt) építőelemei 1 1 1 nil 1 2 2 1 6 6 2 2 4 nil nil nil 5 6 2 nil nil
szétszórt reprezentációja A sor- és oszlopfolytonos feldolgozást egyaránt elősegíti, ha a ritka elemeket multilistában helyezzük el: 1 2 3 4 5 1 2 3 4 5 6 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 Szétszórt (láncolt) oszlop nil nil nil építőelemei sor nil nil 1 1 1 nil 1 2 2 1 6 6 nil 2 2 4 nil nil 5 6 2 nil nil