Szvegfeldolgozs 3 Programozsmdszertan Copyright 1999 Szlvi Pter Tartalomjegyzk

  • Slides: 29
Download presentation
Szövegfeldolgozás 3. Programozásmódszertan Copyright, 1999 © Szlávi Péter

Szövegfeldolgozás 3. Programozásmódszertan Copyright, 1999 © Szlávi Péter

 Tartalomjegyzék 4. Szövegtípus speciális feladatai (folytatás) 4. 1. Szövegminta keresés 4. 1. 1.

Tartalomjegyzék 4. Szövegtípus speciális feladatai (folytatás) 4. 1. Szövegminta keresés 4. 1. 1. Eltolás a minta jelei alapján 4. 1. 2. Eltolás a szöveg jelei alapján 4. 1. 3. Keresés leképező függvénnyel 4. 2. Szövegtitkosítás módszerei 4. 2. 1. Caesar-féle kódolás 4. 2. 2. Vignère-féle kódolás 4. 2. 3. Helyettesítő táblás kódolás 4. 2. 4. Blokk-permutáló kódolás 4. 2. 5. Nyilvános kulcsos (RSA) kódolás 4. 3. Hiperszöveg-kezelés Programozásmódszertan 2 2021. 02. 25.

 4. 1. Szövegminta keresés A feladat: Hol kezdődik az s szövegben az sminta

4. 1. Szövegminta keresés A feladat: Hol kezdődik az s szövegben az sminta szöveg? Alapmegoldás: A keresés tétel és az eldöntés tételéből: siker: =Hamis; i: =1 [ahol tartunk az s-ben] Ciklus amíg i Hossz(s)-Hossz(sminta)+1 és nem siker j: =1 [ahol tartunk az sminta-ban] Ciklus amíg j Hossz(sminta) és Jele(sminta, j)=Jele(s, i+j-1) j: +1 Ciklus vége siker: =(j>Hossz(sminta)) Ha nem siker akkor i: +1 Ciklus vége Programozásmódszertan, 1999 3 2021. 02. 25.

 4. 1. Szövegminta keresés 4. 1. 1. Eltolás a minta jelei alapján Probléma:

4. 1. Szövegminta keresés 4. 1. 1. Eltolás a minta jelei alapján Probléma: nem veszi figyelembe a feladat specialitásait… ui. : Jelmagyarázat: karakterhasonlítás egyezéssel; illetve ütközéssel. … a „tudhatná”-kat … „Meggondolatlan” lépések: 1 2, 3 4 ui. előrelátható a kudarc Programozásmódszertan 4 2021. 02. 25.

 4. 1. Szövegminta keresés 4. 1. 1. Eltolás a minta jelei alapján Egy

4. 1. Szövegminta keresés 4. 1. 1. Eltolás a minta jelei alapján Egy „gondolkodó” algoritmus lépései: Jelmagyarázat: karakterhasonlítás egyezéssel; illetve ütközéssel. Így a korábbi 12 hasonlítás helyett 10 -et tenne. Megoldás: eltolás vektor, amely megadja, hogy az smintabeli i. karakter nem egyezésekor mennyivel léptethető a keresett minta. Programozásmódszertan 5 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) A módosított algoritmus: siker:

4. 1. 1. Eltolás a minta jelei alapján (folytatás) A módosított algoritmus: siker: =Hamis; i: =1 [i: ahol tartunk az s-ben] Ciklus amíg i Hossz(s)-Hossz(sminta)+1 és nem siker j: =1 [j: ahol tartunk az sminta-ban] Ciklus amíg j Hossz(sminta) és Jele(sminta, j)=Jele(s, i+j-1) j: +1 Ciklus vége siker: =(j>Hossz(sminta)) Ha nem siker akkor i: +Eltolás(j) Ciklus vége Pl. a korábbi ‘aba’ mintához a (1, 1, 2) Eltolás vektor jónak tűnik… vagy az ‘aaaaaa’-hez kitűnő lenne az (1, 2, 3, 4, 5, 6). . . Programozásmódszertan 6 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) A továbbiak legfontosabb felfedezése:

4. 1. 1. Eltolás a minta jelei alapján (folytatás) A továbbiak legfontosabb felfedezése: a hasonlítás visszafelé történő megszervezése! Knuth-Morris-Pratt algoritmusa: siker: =Hamis; i: =1 [i: ahol tartunk az s-ben] Ciklus amíg i Hossz(s)-Hossz(sminta)+1 és nem siker j: =Hossz(sminta) [j: ahol tartunk az sminta-ban] Ciklus amíg 1 j és Jele(sminta, j)=Jele(s, i+j-1) j: -1 Ciklus vége siker: =(j=0) Ha nem siker akkor i: +Eltolás(j) Ciklus vége Programozásmódszertan 7 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) Az Eltolás vektor generálása:

4. 1. 1. Eltolás a minta jelei alapján (folytatás) Az Eltolás vektor generálása: • Alapeset: ha a keresett minta minden eleme különböző, a léptetés értéke a hátulról számított pozícióval egyezik meg. Programozásmódszertan 8 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) • Közel ismétlődő jelek

4. 1. 1. Eltolás a minta jelei alapján (folytatás) • Közel ismétlődő jelek esete: ha van közeli ismétlődés a mintában, akkor ez nem jelent különbséget az alapesettől. • Az eltolási vektor elemei hátulról monoton növekedőek. (És nem csak az eddig megszerzett tapasztalatok súgják!) Programozásmódszertan 9 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) • Távol ismétlődő jelek

4. 1. 1. Eltolás a minta jelei alapján (folytatás) • Távol ismétlődő jelek esete: másrészt (? =5) ha az ismétlődő jel távolsága nagyobb, mint az első azonos jel pozíciószáma, akkor vagy az ismétlődő jel pozíciószáma lesz a léptetési érték, vagy a kettejük pozíciószámának különbsége. Programozásmódszertan 10 2021. 02. 25.

 4. 1. 1. Eltolás a minta jelei alapján (folytatás) Az algoritmusa: Típus EVektor=Tömb(1.

4. 1. 1. Eltolás a minta jelei alapján (folytatás) Az algoritmusa: Típus EVektor=Tömb(1. . Max. Hossz: Egész) Eljárás Eltolás. Vektor(Konstans minta: Szöveg, Változó ev: EVektor): Változó n, i: Poz. Egész n: =Hossz(minta); ev(n): =1 Ciklus i=n-1 -től 1 -ig -1 -esével [ismétlődéskeresés: ] ev(i): =ev(i+1) [monoton kezdés a túl közeli ismétlődés nem érdekes] Ciklus amíg i+ev(i) n és Jele(minta, i) Jele(minta, i+ev(i)) ev(i): +1 Ciklus vége Eljárás vége. Programozásmódszertan 11 2021. 02. 25.

 4. 1. Szövegminta keresés 4. 1. 2. Eltolás a szöveg jelei alapján Boyer-Moore

4. 1. Szövegminta keresés 4. 1. 2. Eltolás a szöveg jelei alapján Boyer-Moore ötlete: Ha a minta helyett a szöveg jeleihez rendelünk eltolási értékeket, akkor –elvben– az addig elvégzett hasonlítás számnál nagyobb ugrásra is mód lehet. Ui. legyen Típus EVektor=Tömb(1. . Max. Hossz: Egész) EVektor=Tömb(Karakter: Egész) Változó Eltolás: EVektor { Eltolás(c): = N-i, ha Jele(minta, i)=c és c Vége(minta, i+1) N, ha c minta ahol N: =Hossz(minta) Programozásmódszertan 12 2021. 02. 25.

 4. 1. 2. Eltolás a szöveg jelei alapján (folytatás) 1. példa: • s

4. 1. 2. Eltolás a szöveg jelei alapján (folytatás) 1. példa: • s : ’abcadabcab’; sminta : ’abcab’ • Eltolásvektor: ’a’ 1; ’b’ 0; ’c’ 2; más jel 5 2. példa: • s : ’abcccabcab’; sminta : ’abcab’ • Eltolásvektor: ’a’ 1; ’b’ 0; ’c’ 2; más jel 5 Programozásmódszertan 13 2021. 02. 25.

 4. 1. 2. Eltolás a szöveg jelei alapján (folytatás) Az algoritmusa: siker: =Hamis;

4. 1. 2. Eltolás a szöveg jelei alapján (folytatás) Az algoritmusa: siker: =Hamis; m: =Hossz(sminta); i: =m Szinkronizálás(i) Ciklus amíg [i Hossz(s) és] i+Eltolás(Jele(s, i)) Hossz(s) és nem siker j: =m; siker: =(Jele(sminta, j)=Jele(s, i)) Ciklus amíg j>1 és siker j: -1; i: -1; siker: =(Jele(sminta, j)=Jele(s, i)) Ciklus vége Ha nem siker akkor Ha Eltolás(Jele(s, i))>m-j+1 akkor i: +Eltolás(Jele(s, i)) különben i: +m-j+1 Szinkronizálás(i) Eljárás Szinkronizálás(Változó i: Egész): Elágazás vége Ciklus amíg i Hossz(s) és Eltolás(Jele(s, i)) 0 Ciklus vége i: +Eltolás(Jele(s, i)) [siker minta=s(i. . i+m-1)] Ciklus vége Eljárás vége. Programozásmódszertan 14 2021. 02. 25.

 4. 1. Szövegminta keresés 4. 1. 3. Keresés leképező függvénnyel Rabin-Karp ötlete: a

4. 1. Szövegminta keresés 4. 1. 3. Keresés leképező függvénnyel Rabin-Karp ötlete: a mintát tekintsük d-alapú számrendszerbeli számként, ahol d a szövegben előforduló jelféleségek száma. Legyen. . d) 0 [ a minta i. jeléhez rendelt szám – sm(i): =Kód(Jele(minta, i)) akkor a mintához rendelt szám – x: =sm(1)*dm-1+sm(2)*dm-2+ …+sm(m-1)*d+sm(m) A szövegben is képezve ugyanennyi jelből egy számot: y: =sm(i)*dm-1+sm(i+1)*dm-2+…+sm(i+m-2)*d+sm(i+m-1), s e két számot kell összehasonlítani. Ha különböznek, akkor az eggyel odébb léptetés utáni új szám könnyen adódik: y’: =(y-sm(i)*dm-1)*d+s(i+m) Programozásmódszertan 15 2021. 02. 25.

 4. 1. 3. Keresés leképező függvénnyel (folytatás) Javítása: Hogy ne kelljen nagypontosságú aritmetikával

4. 1. 3. Keresés leképező függvénnyel (folytatás) Javítása: Hogy ne kelljen nagypontosságú aritmetikával küzdeni, a szám -hozzárendelést Mod q végezzük; ahol q egy kellően nagy, de még „kezelhető” nagyságú prím szám. Következmény: a szám-azonosság is csak „modulo” értendő, azaz még a karakteres azonosság ellenőrizendő. Algoritmus: sminta s 1: =0 Konstans q: Poz. Egész(33554393) d: Poz. Egész(26) Változó m, s 1, s 2, dh: Poz. Egész m: =Hossz(sminta); dh: =1 dm-1 Ciklus i=1 -től m-1 -ig dh: =(d*dh) Mod q Ciklus vége Programozásmódszertan Ciklus i=1 -től m-ig s 1: =(s 1*d+Kód(Jele(sminta, i))) Mod q Ciklus vége s 2: =0 s Ciklus i=1 -től m-ig s 2: =(s 2*d+Kód(Jele(s, i))) Mod q Ciklus vége 16 2021. 02. 25.

 4. 1. 3. Keresés leképező függvénnyel (folytatás) i: =1 Ciklus amíg i Hossz(s)-m

4. 1. 3. Keresés leképező függvénnyel (folytatás) i: =1 Ciklus amíg i Hossz(s)-m és s 1 s 2: =(s 2+d*q-Kód(Jele(s, i))*dh) Mod q [s 2 pozitív maradjon] s 2: =(s 2*d+Kód(Jele(s, i+m))) Mod q i: +1 Ciklus vége siker: =(s 1=s 2) Eddig tehát a siker megadja, hogy • lehet, hogy itt megvan (siker=Igaz), vagy • biztosan nincs (siker=Hamis). Ha lehet, hogy megvan, akkor még a karakteres ellenőrzés hátravan, és nem azonosság esetén folytatódik ettől a ponttól a keresés az előbbiek szerint. Programozásmódszertan 17 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 1. Caesar-féle kódolás Caesar ötlete: a jelek eltolása

4. 2. Szövegtitkosítás 4. 2. 1. Caesar-féle kódolás Caesar ötlete: a jelek eltolása az abc-ben rögzített k lépéssel. Pl. : ha abc: ={‘A’, ’B’, … , ‘Z’}; k: =3 akkor tabc={‘D’, ‘E’, …, ‘C’} és s: =‘MARCIUSIDUSA’ ts=‘PDUFLXVLGXVD’ PDUFLXVLGXVD A B C D E F … X Y Z Programozásmódszertan A B C D E F … X Y Z 18 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 2. Vignère-féle kódolás Vignère ötlete: a jelek eltolása

4. 2. Szövegtitkosítás 4. 2. 2. Vignère-féle kódolás Vignère ötlete: a jelek eltolása az abc-ben rögzített K kulcs-szó alapján számolt lépéssel. Az eltolás szabálya: JEL LÉPÉS ‘A ’ 0 Pl. : ‘B ’ 1 ha abc: ={‘A’, ‘B’, … ‘Z’} … K: =‘CAESAR’ ‘Z’ 25 akkor s: =‘MARCIUSIDUSA’ ++++++ ‘M’+‘C’= = Shift(‘M’, 2)=CAESAR ts=‘OAVUIMUIHNSR’ =‘O’ OAVUIMUIHNSR Programozásmódszertan 19 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 3. Helyettesítő táblás kódolás Ötlet: a jelek helyettesítése

4. 2. Szövegtitkosítás 4. 2. 3. Helyettesítő táblás kódolás Ötlet: a jelek helyettesítése egy rögzített („szabálytalanul” JEL’ feltöltött) táblázat alapján. ‘A ’ ‘Q ’ Pl. : ‘B ’ ‘W ’ ha abc: ={‘A’, ‘B’, ‘C’, … ‘Z’} … HT: Tömb(abc: abc)(‘Q’, ‘W’, ‘E’, …‘M’) akkor tabc={‘Q’, ‘W’, … ‘M’} és s: =‘MARCIUSIDUSA’ ‘M’ HT(‘M’)=‘D ’ ts=‘DQKEOXLORXLQ’ DQKEOXLORXLQ Programozásmódszertan 20 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 4. Blokk-permutáló kódolás Ötlet: rögzített számú jelből álló

4. 2. Szövegtitkosítás 4. 2. 4. Blokk-permutáló kódolás Ötlet: rögzített számú jelből álló blokkok kódolása úgy, hogy előre meghatározott séma szerint cserélgetjük meg a blokk jeleit. Pl. : 1 2 3 ha abc: ={‘A’, ‘B’, … ‘Z’}; k: =3 perm: Tömb(1. . k: 1. . k)(2, 3, 1) 2 3 1 akkor s: =‘MARCIUSIDUSA’ ts=‘ARMIUCIDSSAU’ ARMIUCIDSSAU ‘MAR’ Jele(‘MAR’, perm(1))+…+Jele(‘MAR’, perm(k)) Programozásmódszertan 21 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás RSA eredete: Rivest-Shamir-Adleman, 1978

4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás RSA eredete: Rivest-Shamir-Adleman, 1978 Ötlet: külön k kulcs a kódoláshoz, ill. d a dekódoláshoz; k – nyilvános kulcs, akiktől várom az üzeneteket d – titkos kulcs, csak én ismerem. Részletek: Kis Fermat-tétel: ha a, p N: p prím és (a, p)=1 ap-1 1 (mod p) más szóval: … p | ap-1 -1 Programozásmódszertan 22 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás Következmény: ha p, q

4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás Következmény: ha p, q N: p, q prím ( (p, q)=1) p | (a(q-1))(p-1)-1 és q | (a(p-1))(q-1)-1 ((a(q-1))(p-1)=(a(p-1))(q-1)=a(p-1)(q-1)) pq | a(p-1)(q-1)-1 (a-val szorozva) a(p-1)(q-1)+1 a (mod pq) Legyen a továbbiakban: n=p*q és ae*f a (mod n) e*f=(p-1)*(q-1)+1 } Programozásmódszertan 23 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás Ötlet: Ha k=(e, n)

4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás Ötlet: Ha k=(e, n) a nyilvános kulcs, és d=(f, n) titkos kulcs, akkor az s (<n) „szöveg” kódolása: t=se Mod n; A tétel miatt: a t dekódolása: s=tf Mod n. e s t=s Mod n t (se Mod n)f Mod n= =se*f Mod n=s Pl. : ha p: =59, q: =47 n: =2773; e: =17, f: =157 abc: ={‘A’, ‘B’, … ‘Z’}; abc. Kód: Tömb(abc: 0. . 25)(0, 1, …, 25) akkor Az n=2773 miatt: s: =‘MARCIUSIDUSA’ 4 -jegyű számmal dolgozunk, 120017020820200803222000 Programozásmódszertan 24 azaz 2 betűs blokkokkal 2021. 02. 25.

 4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás 120017020820200803222000 120017 Mod 2773=1444

4. 2. Szövegtitkosítás 4. 2. 5. Nyilvános kulcsos kódolás 120017020820200803222000 120017 Mod 2773=1444 … 14440052… ‘O? A? …’ t=…egy nem „karakteresíthető” kódsorozat… … és a dekódolás: 1444157 Mod 2773=1200 … 14440052… 12001702… Hogyan választandó ki az n, e és f? L. : p, q nagy (véletlen) prím n=p*q L. : f nagy (véletlen) prím: f<n ( (f, p-1)=1, (f, q-1)=1) e: e*f = (p-1)*(q-1)+1 Programozásmódszertan 25 2021. 02. 25.

 4. 3. Hiperszöveg-kezelés A „hiper”-ség tulajdonság Általában: pl. hipermátrix, hiperautomata… valami rekurzívan strukturált

4. 3. Hiperszöveg-kezelés A „hiper”-ség tulajdonság Általában: pl. hipermátrix, hiperautomata… valami rekurzívan strukturált szerkezet A hipertext (hiperszöveg) = hiperdokumentum, amelyben egyes rész-szövegek bizonyos tartalmi és kezelési „önállósággal” bírnak Tartalom és forma Forma (a felhasználó szempontjából): Megjelenés – hogyan válik el a „normál” szövegtől a „hiperül” kezelendő rész? Kezelés – hogyan választható ki egy hiperszöveg? Programozásmódszertan 26 2021. 02. 25.

 4. 3. Hiperszöveg-kezelés Tartalom (a fejlesztő szempontjából): Ábrázolás + Műveletek Ábrázolás Absztrakt szinten

4. 3. Hiperszöveg-kezelés Tartalom (a fejlesztő szempontjából): Ábrázolás + Műveletek Ábrázolás Absztrakt szinten Hivatkozó szöveg (link, „ugrópont”) - (kísérő)szöveg + hivatkozás Hivatkozott szöveg - egy pont = pontdefiníció - egy tartomány = „tartománykezdet+tartományvég”-definíció valamely dokumentumban Programozásmódszertan 27 2021. 02. 25.

 4. 3. Hiperszöveg-kezelés Konkrét szinten Kulcs-szavas (=tag-es) - olvasható, mnemonikus (pl. HTML); könnyen

4. 3. Hiperszöveg-kezelés Konkrét szinten Kulcs-szavas (=tag-es) - olvasható, mnemonikus (pl. HTML); könnyen kiterjeszthető <a href="#info" target="jobb">napi információk</a> Bináris - fix hosszan, binárisan kódolt; speciális kód(okat) igényel Kód: 0 Byte: … i. cc i+1. cc i+2. db i+3. " i" "n" "f" "o" i+4. i+5. i+6. i+7. cccc=ugráscím, db=kísérő szöveg hossza Programozásmódszertan 28 2021. 02. 25.

 4. 3. Hiperszöveg-kezelés Műveletek Inputfigyelés = eseményfigyelés ( GUI) = billentyűfigyelés („DOS-os rendszerben”)

4. 3. Hiperszöveg-kezelés Műveletek Inputfigyelés = eseményfigyelés ( GUI) = billentyűfigyelés („DOS-os rendszerben”) Szövegfókuszálás Ugrópont-keresés (pl. tag-eseknél) = szövegkeresés Direktpozícionálás (pl. binárisoknál) = ugrópontra ugrás (feltéve, hogy a fájl típusa ezt megengedi) Programozásmódszertan 29 2021. 02. 25.