320 likes | 449 Views
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)
E N D
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)
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
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 Fej Vége
Sorok ábrázolása Folytonos ábrázolás: • 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
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.
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.
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)
Műveletek sorokkal • Létrehozá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
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
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
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
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.
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.
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
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)
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.
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ő.
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.
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.
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.
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.
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 Endif End function Brute Force mintaillesztés
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