Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT itt PUT-nak nevezzük FIFO adatszerkezetnek is nevezik (First In First Out) Ennek megfelelően a sorba az elemek az érkezésnek megfelelő sorrendben kerülnek, az újak mindig a sor végére kerülnek (PUT művelettel). Feldolgozni a sor első elemét szokás (ACCESS HEAD vagy GET), ami legtöbbször egyben fizikai törlést is jelent (GET) 23:06:49
Speciális Listák: Sor Sorba történő írás művelete, PUT művelet, az olvasás (fizikai törlés) művelete a GET művelet. Logikai törlés nincs Rendezés nincs értelmezve Keresés nincs értelmezve Elérés: Csak az első elemet tudjuk elérni 23:06:49
Sorok ábrázolása Szétszórt ábrázolás : egyirányban láncolt listával, két segédmutatóval (fej és vége mutató) Feldolgozás a fejmutató által hivatkozott elemet Bővítés: az utolsó mutató után a mutatók átállításával adat2 adatn NIL Fej adat1 adat4 Vége adat3 23:06:49
Sorok ábrázolása Folytonos ábrázolás: Fix kezdetű sor Vándorló sor Folytonos reprezentációk mindegyike egy vektorban tárolja a sor elemeit Fontos a sor elejének és végének jelzése Fix kezdetű sor Vándorló sor Ciklikus sor 23:06:49
Sorok ábrázolása Fix kezdetű sor A sor első eleme a vektor első tárhelyén helyezkedik el, az utolsó elem mutatója v. Üres a sor: v=0 Tele van a sor: v=n Új elem beírása: v+1-edik helyre kerül, majd v eggyel megnő. Elem törlése: Nehézkes, sok adatmozgatással jár. A sor első elemét dolgozzuk fel, a sor eleje pedig mindig ugyanott kell, hogy legyen, ezért törlés után a többi elemet rámozgatjuk az előző pozícióra. v értéke pedig eggyel csökken. 23:06:49
Sorok ábrázolása Vándorló sor A sokszori adatmozgatást küszöböli ki Elvetjük azt a megszorítást, hogy az első elem az első helyen álljon. Megengedjük, hogy az első elem helye vándoroljon. Ehhez segédmutatók, e és a szokásos v szükséges Üres a sor: e=v=0 Tele a sor: e=1, v=n Új elem bekerülése: A v mutatót követő pozícióra kerül be, ha a sor nincsen tele. Bővítéskor (PUT-nál) előfordulhat, hogy a v az utolsón áll, de az e vándorlása miatt a sor nincs tele: ilyenkor (csak ilyenkor), adatmozgatást hajtunk végre: A legelső pozícióig toljuk a sort előre. 23:06:49
Sorok ábrázolása Ciklikus sor: Az adatmozgatást eddig még nem küszöböltük ki teljesen. A ciklikus sorban az elejét és végét jelző mutató vándorlását a határokon keresztül is megengedjük. Üres a sor: e=v=0 Tele a sor: e=1 és v=n, vagy e = v+1. Új elem: szabályokat figyelembe véve, ha a sor nincs tele, akkor a v+1-edik helyre kerül, (esetleg v visszaugrik az elejére). Törlés: e mutató által mutatott elem, majd e=e+1. POP PUT (2x) 1 2 3 e v n 1 2 3 e v 23:06:49
Műveletek sorokkal Létrehozás: Bővítés: Törlés: Az üres sort hozzuk létre Bővítés: Mindig a végén, a PUT művelettel Törlés: A sor első elemére vonatkozik (GET), az első elem elérése és törlése (ACCESS HEAD + POP) Csere, Rendezés, Elérés, Keresés, Bejárás Nincs, ill. nem értelmezett Feldolgozás Definíciója szerint 23:06:49
A sor adatszerkezet használata Sorok felhasználása az informatikában Pufferek megvalósítására (termelő – feldolgozó) A hierarchikus adatszerkezeteket a bejáráskor sorokba képezzük le 23:06:49
Speciális sorok Ezek sorokból képzettek. Megőrzik a sor tulajdonságait és továbbiakkal egészülnek ki Két végű sor Olyan sor, amelynél mind a hat speciális lista művelet megengedett Ez logikailag hasonlít két db aljánál összeragasztott veremre RPUT RGET GET PUT 23:06:49
Két végű sor A két végű sornak további származtatott szerkezetei léteznek Input korlátozott kétvégű sor: A hagyományos GET és PUT művelet mellett az RGET megengedett, de az RPUT nem. Output korlátozott kétvégű sor Az előző párja Olyan kétvégű sor, amelyben a GET és a PUT műveletek mellett az RPUT megengedett az RGET nem Ezen speciális sorok reprezentációja folytonos és szétszórt is lehet, de két irányban láncolt listával a legjobb megvalósítani őket 23:06:49
Prioritásos sor Prioritásos sor Olyan sor, amelyben az adatelemek egy részéhez prioritás értéket rendelünk (1…n), majd a sorban az adatelemek prioritás értékük szerinti növekvő sorrendben helyezkednek el. Feldolgozás: Először a legmagasabb prioritású (legkisebb prioritás érték) elemeket dolgozzuk fel, ezután jöhet a következő legmagasabb szint. A prioritás értékkel nem rendelkező elemek közül csak akkor dolgozhatunk fel, ha már nincs prioritással rendelkező elem a sorban. 23:06:49
Prioritásos sor Ugyanezt az eredményt adja, ha olyan sorok együttesére gondolunk, ahol minden sorhoz tartozik egy prioritás érték. Ugyanakkor minden adatelemhez is tartozik egy-egy prioritás érték. Az adatelemek mindig a nekik megfelelő prioritási sorban tartózkodnak. A jelöletlen sor: A prioritással nem rendelkező elemek sora. 1 2 : n 23:06:49
Sztring Ez egy szekvenciális adatszerkezet. Olyan lista, amelynek elemeit egy ABC szimbólumai alkotják. Olyan sztringekkel fogunk foglalkozni, melyek elemei karakterek lesznek. A sztringeken értelmezhetők a lista alapműveletei Bármely karakter elérése Részsztring képzés Konkatenáció (összefűzés) Sztringek lényeges jellemzője a hosszuk Feldolgozásuk során fontos az üres sztring fogalma 23:06:49
Sztring adatszerkezet műveletei Létrehozás Megadjuk (felsoroljuk) a sztring összes karakterét Bővítés Elején, végén, bármely két karakter között részsztring beillesztésével, majd konkatenálásával Törlés Részsztringet lehet törölni Csere Részsztringet részsztringgel Keresés Részsztring keresése (mintaillesztéssel) 23:06:49
Sztring reprezentációja Szétszórt és folytonos is lehet Szétszórt A listafejben található, a sztringre vonatkozó hossz információ és az alábbi technikák lehetségesek Egy-egy karakter egy listaelem (rossz helykihasználás, a mutató nagyobb tárhelyet használ, mint a karakter). Változó hosszúságú listaelemekkel. Egy-egy listaelem ilyenkor több karaktert tartalmaz (részsztringek). Ekkor a listafejben a részsztringek hosszáról is szükséges információ. Nehéz nagy részsztringeket kezelni, ezért inkább folytonosan szokták ábrázolni. 23:06:49
Sztring reprezentációja Folytonos Minden sztringet azonos hosszú tárterületen tárolunk. Ha szükséges, a ki nem használt tárterületeket speciális karakterrel töltve fel. Változó hosszon, minden sztring előtt megadva annak hosszát. A lefoglalt tárhelyek közül egy szám információ lesz az első. a l m k ö r t e f 4 a l m 5 k ö r t e 2 f 23:06:49
Sztring reprezentációja Folytonos Folyamatos tárolásnál a sztringek végén speciális karaktert (végjel) alkalmazunk. Folyamatosan, hosszúságinformáció és végjelek nélkül. Kiegészítésként használunk egy nyilvántartást a sztringek kezdőcímével és hosszával. a l m k ö r t e f 4 5 2 1 10 a l m k ö r t e f 23:06:49
Mintaillesztés Sztringek felhasználása: Formális nyelvek, formális rendszerek, szövegszerkesztő programok, hypertextek. Mindegyik területen fontos a részsztring keresés, vagyis a mintaillesztés. Alapsztring: A=a1a2a3…an Minta: P=p1…pm (általában n>>m, jobb lenne: n~m) Kérdés: a rövid minta a hosszú alapsztringben megtalálható-e, ha igen hol, hányszor, és azok hol. Több tucat, (több száz) mintaillesztési algoritmus létezik. 23:06:49
Brute Force mintaillesztés Mezítlábas, hétköznapi algoritmusok. Nem nagyon hatékonyak. Összehasonlítja az alapsztring első karakterét a minta első karakterével Ha egyezést talál, mindkét sztringben tovább lép és azokat hasonlítja össze (második karaktert a második karakterrel). addig, amíg el nem érte és össze nem hasonlította a P utolsó karakterét is, vagy pedig valahol eltérést nem talál. Ha P-t végig összehasonlította és egyezést tallt, akkor P benne volt az alapsztringben. 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés Az esetek többségében azonban valahol eltérést talál. Mit tegyünk ilyenkor? Visszaugrunk a minta első karakterére Az alapsztring legutóbbi összehasonlításának kezdő karakterét követő karakterrel újrakezdjük a folyamatot. A keresés véget érhet úgy is, hogy Addig-addig kezdjük újra a keresést, amíg el nem jutunk az alapsztring végére, és ott is eltérés van. Ekkor jeleznünk kell, hogy a minta nincs benne az alapsztringben. 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés ↕ P 23:06:49
Brute Force mintaillesztés Function MEZÍTLÁBAS (A,P) nhossz(A) mhossz(P) ij0 While i<n és j<m do If A [i+1]=P[j+1] then ii+1 jj+1 Else ii-j+1 j0 End if End while If j=m then Return i-m+1 Else Return 0 End function 23:06:49
Brute Force mintaillesztés Mezítlábas algoritmus a léptetés után elfelejt minden információt az előzőleg összehasolított karakterekről Így előfordulhat, hogy újra és újra összehasonlítja az első karakterét a minta sztring minden karakterével Ha megfelelően felhasználnánk a korábbi összehasonlításokból nyert információkat, soha nem kellene újra vizsgálni az alapsztring azon karaktereit, melyek már illeszkedtek a p minta egyik karakterére 23:06:49