1
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)
2:27:25
2
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
2:27:25
3
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
adat1adatn NILadat2Fej
Végeadat3
adat4
2:27:25
4
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
1. Fix kezdetű sor
2. Vándorló sor
3. Ciklikus sor
2:27:25
5
Sorok ábrázolásaFix 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.
2:27:25
6
Sorok ábrázolásaVá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.
2:27:25
7
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 v2:27:25
8
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
2:27:25
9
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
2:27:25
10
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 PUT2:27:25
11
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
2:27:25
12
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.
2:27:25
13
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
:
:
n2:27:25
14
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
2:27:25
15
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)
2:27:25
16
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.
2:27:25
17
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ő.
4 a l m a 0 5 k ö r t e 2 f a
a l m a 0 0 0 0 0 0 0 0 0 0 k ö r t e 0 0 f a 0 0 0 0 0
2:27:25
18
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 a 0 0 k ö r t e 0 f a 0
a l m a k ö r t e f a
4 0 5 21 5 5 10
2:27:25
19
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.
2:27:25
20
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.
2:27:25
21
A b a c b a b a b a a b c b a b↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
22
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.
2:27:25
23
A b a c b a b a b a a b c b a b↕ ↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
24
A b a c b a b a b a a b c b a b↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
25
A b a c b a b a b a a b c b a b↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
26
A b a c b a b a b a a b c b a b↕ ↕ ↕ ↕ ↕ ↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
27
A b a c b a b a b a a b c b a b↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
28
A b a c b a b a b a a b c b a b↕ ↕ ↕ ↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
29
A b a c b a b a b a a b c b a b↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
30
A b a c b a b a b a a b c b a b↕ ↕
P a b a b a c a
Brute Force mintaillesztés
2:27:25
31
Brute Force mintaillesztés
Function MEZÍTLÁBAS (A,P)1. nhossz(A)2. mhossz(P)3. ij04. While i<n és j<m do5. If A [i+1]=P[j+1] then6. ii+17. jj+18. Else
9. ii-j+110. j011. End if12. End while13. If j=m then14. Return i-m+115. Else16. Return 017. End ifEnd function
2:27:25
32
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
2:27:25