11. Merkkijonot. 11.1. Merkkijonojen abstrakti tietotyyppi

Samankaltaiset tiedostot
12. Merkkijonot Merkkijonojen abstrakti tietotyyppi

11. Merkkijonot. 11. luku 560

Kuvausta f sanotaan tällöin isomorfismiksi.

3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko

ICS-C2000 Tietojenkäsittelyteoria Kevät 2015

Riemannin integraalista

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 5 Demonstraatiotehtävien ratkaisut. ja kaikki a Σ ovat säännöllisiä lausekkeita.

2.6 SÄÄNNÖLLISET LAUSEKKEET Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:

Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:

HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos PL 26 (Teollisuuskatu 23) HELSINGIN YLIOPISTO

Kieli, merkitys ja logiikka, kevät 2011 HY, Kognitiotiede. Vastaukset 2.

Ristitulo ja skalaarikolmitulo

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Q = {q 1, q 2, q 3, q 4 } Σ = {a, b} F = {q 4 },

Pythagoraan lause. Pythagoras Samoslainen. Pythagoraan lause

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2016

Matematiikan tukikurssi

Algoritmit 2. Luento 13 Ti Timo Männikkö

Esimerkki 8.1 Määritellään operaattori A = x + d/dx. Laske Af, kun f = asin(bx). Tässä a ja b ovat vakioita.

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali

11. MÄÄRÄTTY INTEGRAALI JA TILAVUUS

Riemannin integraali

Säännöllisten operaattoreiden täydentäviä muistiinpanoja

Laskennan mallit (syksy 2007) Harjoitus 5, ratkaisuja

Kognitiivinen mallintaminen I, kevät Harjoitus 1. Joukko-oppia. MMIL, luvut 1-3 Ratkaisuehdotuksia, MP

MS-A010{2,3,4,5} (SCI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali

Kertymäfunktio. Kertymäfunktio. Kertymäfunktio: Mitä opimme? 2/2. Kertymäfunktio: Mitä opimme? 1/2. Kertymäfunktio: Esitiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

II.1. Suppeneminen., kun x > 0. Tavallinen lasku

Laskennan mallit (syksy 2010) 1. kurssikoe, ratkaisuja

OSA 1: POLYNOMILASKENNAN KERTAUSTA, BINOMIN LASKUSÄÄNTÖJÄ JA YHTÄLÖNRATKAISUA

T Kevät 2009 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (Predikaattilogiikka )

Olkoon. M = (Q, Σ, δ, q 0, F)

Algoritmit 2. Luento 6 Ke Timo Männikkö

θ 1 θ 2 γ γ = β ( n 2 α + n 2 β = l R α l s γ l s 22 LINSSIT JA LINSSIJÄRJESTELMÄT 22.1 Linssien kuvausyhtälö

Näytä tai jätä tarkistettavaksi tämän jakson tehtävät viimeistään tiistaina ylimääräisessä tapaamisessa.

Painopiste. josta edelleen. x i m i. (1) m L A TEX 1 ( ) x 1... x k µ x k+1... x n. m 1 g... m n g. Kuva 1. i=1. i=k+1. i=1

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Käydään läpi: ääriarvo tarkastelua, L Hospital, integraalia ja sarjoja.

Olkoon. äärellinen automaatti. Laajennetaan M:n siirtymäfunktio yksittäisistä syötemerkeistä merkkijonoihin: jos q Q, x Σ, merkitään

LINSSI- JA PEILITYÖ TEORIAA. I Geometrisen optiikan perusaksioomat

Sinilause ja kosinilause

Algoritmit 2. Luento 6 To Timo Männikkö

Runkovesijohtoputket

x k 1 Riemannin summien käyttö integraalin approksimointiin ei ole erityisen tehokasta; jatkuvasti derivoituvalle funktiolle f virhe b

PERINTEISET VALAISIMET OSRAM ECOPACK -FH DALI. TOUCH DIM WCU -seinälähetin. ] l q q ö IP20

10. MÄÄRÄTYN INTEGRAALIN KÄYTTÖ ERÄIDEN PINTA-ALOJEN LASKEMISESSA

Asennusopas. Daikin Altherma Matalan lämpötilan Monoblocin varalämmitin EKMBUHCA3V3 EKMBUHCA9W1. Asennusopas. Suomi

Syksyn 2015 Pitkän matematiikan YO-kokeen TI-Nspire CAS -ratkaisut

Vastaa tehtäviin 1-4 ja valitse toinen tehtävistä 5 ja 6. Vastaat siis enintään viiteen tehtävään.

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

2.4 Pienimmän neliösumman menetelmä

Suorakaidekanavat. lindab suorakaidekanavat

Kirjallinen teoriakoe

Graafinen ohjeisto. Julkis- ja yksityisalojen toimihenkilöliitto Jyty

Algoritmit 2. Luento 12 To Timo Männikkö

Sarjaratkaisun etsiminen Maplella

Matematiikan johdantokurssi, syksy 2017 Harjoitus 6, ratkaisuista. 1. Onko jokin demojen 5 tehtävän 3 relaatioista

Neliömatriisin A determinantti on luku, jota merkitään det(a) tai A. Se lasketaan seuraavasti: determinantti on

Asennusohje EPP-0790-FI-4/02. Kutistemuovijatkos Yksivaiheiset muovieristeiset. Cu-lanka kosketussuojalla 12 kv & 24 kv.

Rekursioyhtälön ratkaisutapa #1: iteratiivinen korvaus

Matematiikan tukikurssi

Integraalilaskentaa. 1. Mihin integraalilaskentaa tarvitaan? MÄNTÄN LUKIO

Asennusopas. Daikin Altherma - Matalan lämpötilan Monoblocin varalämmitin EKMBUHCA3V3 EKMBUHCA9W1. Asennusopas. Suomi

Laskennan mallit Erilliskoe , ratkaisuja (Jyrki Kivinen)

Numeeriset menetelmät TIEA381. Luento 9. Kirsi Valjus. Jyväskylän yliopisto. Luento 9 () Numeeriset menetelmät / 29

Automaatin tunnistama kieli on sen hyväksymien merkkijonojen joukko. Täsmällinen muotoilu: δ,q 0,{q 2,q 3,q 6 }), missä

5 Epäoleellinen integraali

3 Mallipohjainen testaus ja samoilutestaus

1. Derivaatan Testi. Jos funktio f on jatkuva avoimella välillä ]a, b[ ja x 0 ]a, b[ on kriit. tai singul. piste niin. { f (x) > 0, x ]a, x 0 [

Teoriaa tähän jaksoon on talvikurssin luentomonisteessa luvussa 10. Siihen on linkki sivulta

Valmennuksen ja arvioinnin tukijärjestemä (VAT)

SARJAT JA DIFFERENTIAALIYHTÄLÖT Funktiojonot 1

Sähkömagneettinen induktio

1.3 Toispuoleiset ja epäoleelliset raja-arvot

a = x 0 < x 1 < x 2 < < x n = b f(x) dx = I. lim f(x k ) x k=1

Asennus- ja käyttöohje ROBA -liukunavoille Koot 0 12 (B.1.0.FIN)

2.2 Automaattien minimointi

9 A I N. Alkuperäinen piiri. Nortonin ekvivalentti R T = R N + - U T = I N R N. Théveninin ekvivalentti DEE SÄHKÖTEKNIIKAN PERUSTEET

763333A KIINTEÄN AINEEN FYSIIKKA Ratkaisut 1 Kevät 2014

Digitaalinen videonkäsittely Harjoitus 5, vastaukset tehtäviin 25-30

Preliminäärikoe Pitkä Matematiikka

S Laskennallinen systeemibiologia

7 Funktiosarjoista. 7.1 Funktiosarjojen suppeneminen

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause

Suorat, käyrät ja kaarevuus

TEHTÄVÄ 1. Olkoon (f n ) jono jatkuvia funktioita f n : [a, b] R, joka suppenee välillä [a, b] tasaisesti kohti funktiota f : [a, b] R.

Polynomien laskutoimitukset

Tehtävä 1. Jatka loogisesti oheisia jonoja kahdella seuraavaksi tulevalla termillä. Perustele vastauksesi

Diskreetin matematiikan perusteet Laskuharjoitus 6 / vko 13

Mutta esimerkiksi 0-kertaisesti pumpattaessa: Siten L ei voi olla säännöllinen.

Määritelmä Olkoon C R m yksinkertainen kaari ja γ : [a, b] R m sen yksinkertainen parametriesitys, joka on paloittain C 1 -polku.

MS-A010{2,3,4,5} (SCI,ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause

AUTOMAATTIEN SYNKRONISAATIOSTA

6.2 Algoritmin määritelmä

3.5 Kosinilause. h a c. D m C b A

2.1 Vaillinaiset yhtälöt

Datatähti 2019 loppu

5.4 Ellipsi ja hyperbeli (ei kuulu kurssivaatimuksiin, lisätietoa)

Transkriptio:

11.1. Merkkijonojen strkti tietotyyppi 11. Merkkijonot Dokumenttien käsittey tietokoneiss on ksvnut vtvsti viimeisen prinkymmenen vuoden ikn. Tietokoneit käytetään dokumenttien kirjoittmiseen, muuttmiseen, etsimiseen j siirtämiseen tietoverkoiss. Moneninen tietojenkäsittey tietoverkoiss on isääntynyt suorstn räjähdysmäisesti vuosikymmenessä. Kikess tässä ovt tietojenkäsitteyn knnt merkkijonot vinsemss; merkkijonoiksi voidn tietysti mietää kikki tietojenkäsitteyn tieto mentäessä in ittijonoihin sti, mutt tässä yhteydessä trksten merkkijonoj nimenomn jonkinist tekstiä, merkkejä ti symoej, sisätävänä tieton eikä mennä isymoiseen ittiesitykseeen. 11. uku 560 Astrktisti jteen merkkijono (string) on pekästään jono merkkejä jostkin kkostost (phet), jok on merkkien (chrcter) joukko. Merkkijonot toteutetn ähes tukoon in tuukkoin, joten yksittäinen merkki sdn niistä vkiojss indeksinsä mukn tuukost. Jokisess tietokoneess on sisäänrkennettu merkkijärjestemä, jok on tyypiisesti nykyään esim. ASCII- ti Unicode-koodi. Akkosto voi toki o mikä thns soveuksess määritety; siksi trksten sitä yeisesti j merkitään symoi. Okoon P = P[0]P[1]P[2] P[m-1] m merkin merkkijono. P voisi o esim. uonnoist kietä, kuten kissn viikset, jonk pituus on 14 merkkiä. Se voisi o myös CGTAATAGTTAATCCG, jok on 16 merkkiä pitkä j oisi DNA-sekvenssi. Edeisessä tpuksess koodi oisi esim. Unicode j jäkimmäisessä {A, C, G, T}. 11. uku 561 Monet tyyppiiset merkkijonokäsitteyt pitävät sisäään merkkijonojen pikkomist osiin. Näistä käytetään nimitystä osjono (sustring), jooin P:n tpuksess osjono on muoto P[i]P[i+1]P[i+2] P[j], kunon0 i j m-1. Merkkijono voi o näin oen itsensä osjono, kun i = 0 j j = m-1. Jos tämä ääritinne jätetään pois, kysymys on idost (proper) osjonost, jooin i > 0 ti j < m-1. Lyhennysmerkintänä eo. merkkijonost voidn käyttää merkintää P[i..j]. Voidn käyttää myös tyhjää merkkijono (i > j edeä), jonk pituus on 0. Etuiite (prefix) on osjono P[0..i],kun0 i m-1. Loppuiite (suffix) on muoto P[i..m-1], kun 0 i m-1. Vstkohtn merkkijonon pikkomisee on yhdistäminen, ktentio (conctention), jooin merkkijonoist P = P[0]P[1]P[2] P[m-1] j Q = Q[0]Q[1]Q[2] Q[m-1] yhdistetään uudeksi merkkijonoksi P + Q ei P[0]P[1]P[2] P[m-1]Q[0]Q[1]Q[2] Q[m-1] (toisinn käytetään muitkin symoeit kuin + ti vin kirjoitetn ne peräkkäin ktention osoittmiseksi). 11. uku 562 Merkkijono-opertiot joten khteen tyyppiin, muuttviin (mute) j muuttmttomiin (immute), sen mukn, voidnko opertio muutt merkkijono. Esim. Jvss tämä määriteään täsmäisesti uoki String jäkimmäisee j StringBuffer edeisee. Muuttmttomi opertioit ovt mm. merkkijonon pituuden määrittäminen, ktentio j osjonon määrääminen. Muuttvi opertioit ovt eriiset päivitystoiminnt, kuten merkin isääminen merkkijonon johonkin kohtn, merkin vihtminen toiseen ti merkkijonon kääntäminen. Opertiost riippuen näiden suoritusjt vihteevt jst O(1) ikn O(n), O(m) ti O(n+m), missä n j m ovt opertioiss esiintyvien merkkijonojen pituudet. 11. uku 563

11.2. Hhmontäsmäämisgoritmej Merkkijonojen kssisess hhmontäsmäämisongemss (pttern mtching) on merkkijono T pituudetn n, j hutn sevittää, onko P merkkijonon T osjono. Tämä käsite trkoitt kysymystä, onko oemss T:n osjono jostkin indeksistä i ken, jok on merkki merkitä sm kuin P. Lskennn tuos on imoitus siitä, onko näin vi ei. Jos hhmo esiintyy merkkijonoss T, nnetn kukoht i. Okoot P j T kkoston merkeistä muodostettuj. Vikk kkosto ymmärretään yeisenä, oetetn sen koon oevn ääreinen j vkio. Trksten seurvss suppesti hhmontäsmäämisgoritmej. R n voimn hhmontäsmäämisgoritmi R n voimn hhmontäsmäämisgoritmi (rute-force pttern mtching) on todennäköisesti ensimmäinen, jok tuisi mieeen, jos ongem pitäisi ähteä rtkisemn uuten. Siinä tutkitn yksinkertisesti kikki mhdoiset P:n sijinnit T:ssä. Agoritmi (koodi 11.1.) on yksinkertinen j toimii jop rjoittmttome kkostoe. Esim. 11.1. Okoot merkkijonon T teksti cccc j hhmon P merkkijono c. Kuvss 11.1. esitetään goritmin suoritus esimerkin tpuksess. 11. uku 564 11. uku 565 Agorithm BruteForceMtch(T,P): Input: merkkijonot T j P j näissä n j m merkkiä Output: öydetyn osjonon ensimmäisen merkin indeksi T:ssä ti imoitus, ettei P:tä esiinny T:ssä for i 0 to n-m {jokisee mhdoisee indeksie T:ssä} do j 0 whie (j<m nd T[i+j] = P[j]) do j = j+1 if j=m then return i return osjono P ei esiinny T:ssä Koodi 11.1. R n voimn hhmontäsmäämisgoritmi. 11. uku 566 c c c 1 2 3 4 5 6 7 8 9 10 isää 12 vertiu 23 24 25 26 27 28 täsmäys indeksiä 10 Kuv 11.1. Esimerkkisuoritus r n voimn goritmist, missä joudutn tekemään 28 vertiu. 11. uku 567

R n voimn goritmi on yksinkertisin mhdoinen. Se käsittää kksi sisäkkäistä simukk, joi tehtävä sevästi rtke. Kyseessä on täydeinen hku merkkijonoss T. Agoritmin suorituskyky ei oe kuitenkn hyvä, kosk phimmin joudutn tekemään m vertiu sen totemiseksi, ettei hhmo täsmää käsitetävän osjonon knss. Agoritmin uomp simukk suoritetn enintään n - m + 1 kert j sisempää enintään m kert. Näistä tuee menetemän suoritusjksi O((n-m+1)m), jok on muunnettviss muotoon O(nm). Boyer-Moore-goritmi Ain ei oe trpeen käydä äpi kikki T:n merkkejä osjonon P öytämiseksi. Isohko os T:n merkkien j P:n väisistä vertiuist on mhdoist vättää käytettäessä Boyer-Moore-goritmi (BM), jost tässä esitetään yksinkertistettu versio. BM-goritmi hyödyntää tieto, että kkoston koko ei merkkien määrä on kiinnitetty. Tämä on myös menetemän rjoitus, kun ts r n voimn goritmi toimii rjoittmttom kkosto. BM-goritmi toimii prhiten suppe kkosto. Näin se on usein hyvä snojen etsimiseksi (uonnoisen kieen) tekstistä. R n voimn menetteyä tehostetn khde (mhdoisesti) ik säästävää heuristiik: Peii-heuristiikk: Vertitess mhdoist P:n täsmäämistä josskin koht T:ssä vertminen oitetn P:n opust tämän kuun päin edeten. 11. uku 568 11. uku 569 Merkki-hyppy-heuristiikk: Jos vertiuss esiintyy merkin T[i]=c epätäsmääminen vertitvn P[j] knss, tinne hoidetn seurvsti. Jos c ei esiinny oenkn P:ssä, P siirretään kokonn merkin T[i] ohi, siä sehän ei voi täsmätä minkään P:n merkin knss. Muuten P:tä siirretään eteenpäin, kunnes P:n merkki c täsmää jonkin merkin T[i] knss. Edeinen heuristiikk on hyödyinen, kun kohdtn P:n oppupäästä oevn merkin kohdss epätäsmääminen, jooin ei trvitse verrt enää P:n kupään merkkejä. Sen sijn hypätään näiden merkkien yi T:ssä jäkimmäisen heuristiikn mukisesti. Näin voidn säästää runssti vertiuj. Määriteään funktio st(c). Tämä käsittää kkoston merkin c j määrää, kuink kus hhmo P voidn siirtää, kun öydetään tekstistä merkki c, jok ei täsmää hhmon knss: Jos c on mukn hhmoss P, st(c) on yhtä kuin c:n viimeisen ei oikenpuoimmisen esiintymän indeksi. Muuten määriteään, että st(c)=-1. Kun käytetetään merkkejä vstvi indeksejä tetettuin tuukkoon, st-funktio on heposti toteutettviss hkutuun. Tämä voisi o hrjoitustehtävä. Hkutuu on skettviss suoritusjss O(m+ ) tunnettess P (monp:n pituus j kkoston merkkien määrä). 11. uku 570 11. uku 571

Agorithm BM(T,P): Input: Teksti ei merkkijono T (n merkkiä) j hhmo P (m merkkiä). Output: Akuindeksi ensimmäisestä osmerkkijonost, jok täsmää T:ssä P:n knss, ti imoitus, ettei täsmäystä esiinny. Lske funktio st. i m-1 j m-1 repet if P[j]=T[i] then if j=0 then return i {täsmäys!} ese i i-1 j j-1 Koodi 11.2. Boyer-Moore-hhmontäsmäysgoritmin kuos. 11. uku 572 ese i i+m-min(j,1+st(t[i])) {hyppy} j m-1 unti i>n-1 return T:ssä ei oe P:n knss täsmäävää osmerkkijono. Koodi 11.2. Boyer-Moore-hhmontäsmäysgoritmin oppuos. Hyppyvihett hvinnoistetn seurv kuv. 11. uku 573 () () i i j m-(1+) 1+ j m-j j Kuv 11.2. Hypyn esitys Koodin 11.2. mukn, kun =st(t[i]). Erotetn kksi tpust: () 1+ j, joss siirretään hhmo j- yksikköä, j () j<1+, joss siirretään hhmo yhdeä yksiköä kuvn tinteess. 11. uku 574 c d c c 1 4 3 2 c 5 c 6 13 12 11 10 9 8 c ch c d st(ch) 4 5 3-1 Kuv 11.3. Tämä vst Kuvn 11.1. tinnett yhden merkin ero, joss on merkki d yhden c:n esiintymän sijst. BM-goritmi suoritt 13 merkkivertiu. c 7 11. uku 575

p t t e r n m t c h i n g g o r i t h m BM-goritmin phimmn tpuksen suoritusik on O(nm+ ). Täöin O(m+ ) on st-funktion skent-ik j hhmon etsintä vie enimmiään O(nm), smn kuin r n voimn goritmi. Phin tpus esiintyy esim. seurvss tinteess: n T =. m-1 P = Täinen on kuitenkin sngen hrvininen tinne, erityisesti uonnoisen kieen tekstissä seurvn kuvn tpn. r i t h 1 m r i t h 2 r i t h m r i t h 3 m r i t h Kuv 11.4. Hettess hhmo uonnoisen kieen tekstistä keskimääräinen vertiujen määrä on yeensä meko pieni. Kokeeisten testien mukn engnninkieisestä se on keskimäärin 0.24 vertiu merkkiä kohti viisimerkkiseä hhmo. 4 5 m 11 10 9 8 7 m r i t h r i t h 6 m m 11. uku 576 11. uku 577 Knuth-Morris-Prtt-goritmi R n voimn goritmiss oi muun heikkous. Kun esimerkissä 11.1. hvittiin josskin koht, ettei osjono täsmää hhmon knss, hyättiin kikki sitä koht kerätty informtio (osittinen täsmäys tvn) j oitettiin vertminen uudestn yhden indeksin verrn eteenpäin iikkuen. Tätä menetteyä on mhdoist tehost, kun hyödynnetään vertiujen tuottm informtiot. 11. uku 578 Knuth-Morris-Prtt-goritmiss (KMP) esikäsiteään hhmo P niin, että voidn hyödyntää mhdoisimmn jsti iemmin suoritettuj vertiuj. Muodostetn epäonnistumisfunktio (fiure function) f, jok osoitt P:n sopivn siirron hyödyntäen iempi vertiuj. Epäonnistumisfunktio määriteään P:n pisimpänä etuiitteenä, jok on osjonon P[1..j] oppuiite (ei siis P[0..j]). Myöhemmin esitetään, miten f sketn. Epäonnistumisfunktio kood toistetut osjonot hhmon sisää. Tätä tieto käytetään trpeettomien vertiujen vättämiseksi. Hypätään niiden yi, kosk tiedetään täöin osjonon kupään täsmäävän, kun oi öydetty sie täsmäävää toisto (hhmon mitn sisätä) myöhemmin merkkijonost. Esim. 11.2. Trksten hhmo P = c esimerkistä 11.1. KMPgoritmin epäonnistumisfunktio f(j) on (toistoin khdesti j kerrn ): j 0 1 2 3 4 5 P[j] 11. uku 579 f(j) 0 0 1 0 1 2

KMP-goritmi (koodi 11.2.) käy peräkkäin merkkijono T äpi verrten sitä hhmon P knss. Löydettäessä täsmäävät merkit isätään moempien indeksien rvoj yhdeä. Jos vstinmerkit T:stä j P:stä eivät täsmää j edeisessä merkkien vertiuss oi täsmäys, ktsotn epäonnistumisfunktiost uusi indeksi P:ssä, mistä pitää jtk vertiu. Muuten (oi epätäsmäys j käsittey on hhmon uss) isätään yksinkertisesti T:n indeksiä (P:n indeksi pysyy muuttumttomn ei hhmon uss). Tätä toistetn, kunnes täsmäys tphtuu ti svutetn merkkijonon T oppu. Kuvss 11.2. on esitetty esimerkki KMP-goritmin toiminnst. Huomtn sen tekevän vähemmän vertiuj kuin r n voimn goritmi. Agorithm KMPMtch(T,P): Input: merkkijonot T j P, joiden pituudet ovt n j m Output: öydetyn osjonon kukohdn indeksi T:stä ti imoitus, ettei hhmo öydetty f KMPfiureFunction(P) {muodostetn epäonnistumisfunktio f} i 0 j 0 whie i < n do if P[j] = T[i] then if j = m - 1 then return i - m + 1 {täsmäys tphtui} i i + 1 j j + 1 Koodi 11.3. (ku) Knuth-Morris-Prtt-goritmi. 11. uku 580 11. uku 581 c c c ese if j > 0 {iittyy ens. if:iin; ei täsmäystä, mutt on edetty P:ssä} then j f(j -1) {muutetn indeksiä epäonnistumisfunktion mukn} ese i i + 1 return osjono P ei oe merkkijonoss T Koodi 11.3. (oppu) Knuth-Morris-Prtt-goritmi. KMP-goritmin pääos on whie-simukk, jok suoritt T:n j P:n merkkien vertiun. Tämän tuoksest riippuen goritmi joko siirtyy niiden seurviin merkkeihin, käyttää epäonnistumisfunktiot uutt merkkiehdokst vrten P:stä ti oitt uudestn seurvst merkistä T:ssä. Trpeettomt vertiut ohitetn käsitteyssä, siä epäonnistumisfunktio tk niiden oevn redundnttej. 11. uku 582 1 2 3 4 5 6 vertiu ei tässä oe trpeen 7 8 9 10 11 12 13 14 15 16 17 18 19 Kuv 11.5. Esimerkkisuoritus KMP-goritmist, missä sevitään 19 vertiu, kun pun on esimerkin 11.2. epäonnistumisfunktio f. 11. uku 583

Yksityiskohtiin kjomtt j epäonnistumisfunktion muodostmist huomioon ottmtt todetn KMP-goritmin suoritusjn muit osin oevn uokk O(n). Epäonnistumisfunktio muodostetn vyörytysmenetemää (oot-strpping), jok muistutt itse KMP-goritmi. Verrtn hhmo itseensä. Jok kert, kun on täsmäävät merkit (smn merkin kksi eri esiintymää hhmoss), setetn f(i) =j+ 1. Kosk on i > j koko goritmin suorituksen jn, f(j-1) on in määritety sitä trvittess. Epäonnistumisfunktion skent on suoritusjtn O(m) ei uonnoisesti hhmon pituudest riippuv. Täten KMP-goritmin suoritusik on kokonisuudessn O(n+m). 11. uku 584 Agorithm KMPFiureFunction(P): Input: merkkijono P (hhmo) m merkkeineen Output: merkkijonon P epäonnistumisfunktio f, jok kuv j:n P:n pisimmän etuiitteen pituudeksi, kun etuiite on P[1..j]:n oppuiite i 1 j 0 f(0) 0 whie i m - 1 do if P[j] = P[i] then {on täsmätty j + 1 merkkiä} f(i) j + 1 i i + 1 j j + 1 Koodi 11.4. (ku) KMP-goritmin epäonnistumisfunktion skeminen. Agoritmi hyödyntää funktion edetäviä rvoj uusi skiessn. 11. uku 585 ese if j > 0 then {j indeksoi P:n etuiitteen jäkeen, jot on täsmättävä} j f(j-1) ese {täsmäystä ei tässä oe} f(i) 0 i i + 1 Koodi 11.4. (oppu) KMP-goritmin epäonnistumisfunktion skeminen. Agoritmi hyödyntää funktion edetäviä rvoj uusi skiessn. Voisi kuvite, että merkkijonon T jokinen merkki on pkko käydä äpi vertiuiss. Näin ei kuitenkn in oe, vn siitä voidn usein hypätä yi osi. Täinen on Boyer-Moore-goritmi edetä. 11.3. Trie Nimi trie tuee snst retriev, siä rkenne on tärkeä tiedonhuss (informtion retriev). Kyseessä on puu, jonk somut sisätävät merkkitieto. Pääsiiset kyseyopertiot, joit triee soveetn, ovt hhmon täsmääminen j etuiitteen täsmääminen. Jäkimmäinen trkoitt merkkijonon X etsimistä joukon S merkkijonoist näiden kuosn. Trksten inostn stndrdi-trietä, jok on ähtökoht useimmiten käytännössä soveettvie monimutkisemmie, mutt tehokkmmin merkkejä tettvie trie-rkenteie. 11. uku 586 11. uku 587

Okoon S kkoston merkkijonojen joukko. Äköön isäksi mikään merkkijono näistä oe jonkin toisen etuiite (prefix). Stndrdi-trie on täöin puu T, jo on ominisuudet: Juurt ukuun ottmtt jokinen T:n somu merkitään kkoston merkiä. Sisäsomun psisomut järjestetään kkostoss määriteyä järjestykseä. Puun T jokiseen ehteen v iittyy S:n merkkijono. Poku juurest ehteen v määrittää tähän iittyvän merkkijonon. Kun edeytettiin, ettei mikään S:n merkkijono oe toisen etuiite, jokinen S:n merkkijono iittyy yksikäsitteisesti T:n ehteen. Trvittess tämä voidn vrmist iittämää erikoismerkki, jok ei kuuu joukkoon. Trien sisäsomu voi o mikä thns määrä psisomuj väitä 1 j d, kun d on kkoston koko. Ehton on, että somuss esiintyvä merkki on myös josskin S:n merkkijonoss niin monenten, kuin se on myös kyseiseä pou juurest ehteen. Täöin poku juurest sisäsomun v syvyydeä i vst S:n merkkijonon Xi-merkkistä etuiitettä X[0..i-1]. Jokist merkkiä c kohti, jok voi seurt etuiitettä X[0..i-1] josskin S:n merkkijonoss, on oemss c:ä merkitty v:n psi. Kuvn 13.6 mukisesti sisäsomu voi o vin yksi psi, mutt enimmiään d st. Täten trie on monitiehkupuu. Kuvn 13.6. puuss on useit yksipsisi somuj. Näitä perättäisiä yksisomuisi voitisiin yhdistää merkitsemää somuun useit merkkejä. Näin stisiin tiivistetty trie, jok on tehokkmpi kuin stndrdi-trie. Tiivistettyä muoto ei kuitenkn tässä esitetä. 11. uku 588 11. uku 589 e i u e s t Stndrdi-trieä, joss on d merkin kkostost kokoemn S s merkkijono kokonispituudetn n, on ominisuudet: d r y c o p T:n jokise sisäsomu on enintään d st. T:ä on s ehteä. T:n korkeus on yhtä kuin S:n pisimmän merkkijonon pituus T:n somujen ukumäärä on O(n). Kuv 11.6. Merkkijonojen {er, e, id, u, uy, se, stock, stop} stndrdi-trie. 11. uku 590 k Somujen suhteen phin tpus esiintyy, kun ei miään khde merkkijono oe yhteistä (ei-tyhjää) etuiitettä, ts. jokise sisäsomu on inostn yksi psi. 11. uku 591

Trietä voidn käyttää snkirjn toteutukseen vinten oess S:n merkkijonot. Hettess merkkijono X triestä T ähdetään juurest j edetään s merkkien viitoittm poku. Jos täinen poku on oemss triessä j päädytään oput ehteen, X on snkirjss. Jos täist kokonist poku ei oe koko merkkijonoe ei se oppuu kesken merkkijono tutess (ennenikisesti) ehteen ti poun päättyessä sisäsomuun, kyseinen merkkijono ei oe snkirjss. Esim. u päättyy ehteen, joten se on Kuvn 11.6. trien sn. Sen sijn e, ee, et, etween, ig ti uoy eivät oe tässä triessä. Merkkijonon hku triestä vtii ikkompeksisuuden O(dm), joss m on merkkijonon pituus, siä enintään d merkin vertmist trvitn kusskin somuss. Joiekin kkostoie vertmisten määrää voidn pudott rvoon O(og d) ti jop O(1) käyttämää merkkien tetukseen hjutustuu. Kun yeensä d voidn jte vkion, voidn pitäytyä jtukseen, että kusskin somuss trvitn ik O(d). 11. uku 592 Trie sopii erityisen hyvin snojen täsmäämiseen, joss sevitetään, vstko nnettu hhmo täsmäisesti jotkin tekstin sn. Tämä on rjoitetumpi tinne kuin tvinen hhmon täsmääminen, kosk hhmo ei voi o mieivtisesti yhdistetty merkkijono, vn jokin tekstin sn tekstin oess esim. uonnoist kietä. Yeisesti oi ikvtimus O(dm) hettess sn triestä. Kun sn on esim. uonnoist kietä ti DNAmerkkijono, joiden kkoston koko on kiinnitetty ei vkio, kysey vtii vin O(m). Kuvss 11.7. on esimerkki. Tehtäessä trie kukin S:n merkkijono isätään kerrn. Mikään niistä ei oe toisten etuiite. Lisättäessä X triehen jäjitetään sitä vstv poku. Jäjitys päättyy sisäsomuun v, jok on ennen merkkijonon X viimeistä merkkiä j jonk mikään psi ei täsmää uuden merkkijonon seurvn merkin knss. Luodn täöin uusi hr vstmn merkkijonon oppuj merkkejä. Yhden merkkijonon isäys vti jn O(dm) j S:n koko trien muodostminen jn O(dn), joss n on S:n merkkijonojen kokonispituus. 11. uku 593 s e e e r? s e s t o c k! 0 4 6 12 17 23 s e e u? u y s t o c k! 24 28 30 36 40 46 e i u h e e s t i d s t o c k! i d s t o c k! 47 51 58 62 68 h e r t h e e? s t o p! 69 74 78 84 88 () Kuv 11.7. Stndrdi-trien snn täsmääminen j etuiitteen täsmääminen: () käsitetävä teksti. 11. uku 594 d r 47, 58 84 6 78 30 69 12 () k 17, 40 51, 62 Kuv 11.7. (jtko) () Trie muodostettu (poistosnt, kuten rtikkeit j the on sujettu pois epäsemnttisin ), kun ehtiin on isätty snojen kukohtien indeksit. y 36 r e 0, 24 11. uku 595 c o p

11.4. Hhmontäsmäys säännöisten imuksien vu Edeä esitetyt hhmontäsmäysgoritmit oivt kikki trkoitetut rtkisemn ongemi, joiss etsitään tekstistä määrättyä osjono, hhmo. Monesti on trvett merkkijonojen etsimiseen, missä hutn yeistä muoto oevi hhmoj, ei inostn yhtä määrättyä. Säännöiset imukset (regur expressions) kuvvt täisi yeisiä hhmoj. 1. Tyhjä on säännöinen imus, jok viitt joukkon { }. Tämä sisätää inostn tyhjän merkkijonon, jonk pituus on no. 2. Jokise symoi joukost on säännöinen imus, jok on joukko {}. Seurvi kome säännöä yhdistetään edetävien perussääntöjen ntmi imuksi uusien säännöisten imusten uomiseksi: Säännöiset imukset Säännöiset imukset ovt yksinkertisi, mutt tehokkit käsitteitä kuvttess merkkijonojen mhdoisesti äärettömiä joukkoj, joit kutsutn myös formeiksi kieiksi (form nguge) yi nnetun kkoston. Säännöisiä perusimuksi määriteään khde säännöä: 11. uku 596 1. Jos j ovt säännöisiä imuksi kuvten joukot A j B, ( + ) on säännöinen imus määrittäen joukon A B. 2. Jos j ovt säännöisiä imuksi kuvten joukot A j B, ( ) on säännöinen imus määrittäen kikkien seisten merkkijonojen joukon, missä merkkijonot on muodostettu ottm merkkijono joukost A j ktenoim se merkkijonoon joukost B. 11. uku 597 3. Jos on säännöinen imus kuvten joukon A, niin ( *) on säännöinen imus, jok kuv kikkien seisten merkkijonojen joukon, joss merkkijonot on muodostettu ktenoim i merkkijono joukost A (toistot sim), kun i 0 (tpus i = 0 trkoitt tyhjää merkkijono ). Tämä opertio on joukon A Keenen sukeum (Keene cosure). Kun hutn käyttää tätä imn tyhjää merkkijono, merkitään ( + ), missä on siis i 1. Esim. 11. 3. Säännöiset imukset kykenevät esittämään yksinkertisesti merkkijonojen joukkoj oheisten esimerkkien tpn kkoston oess {, }. 1. + on joukon {, } säännöinen imus. 2.( + ) on joukon {, } säännöinen imus. Aritmeettisten usekkeiden tvoin säännöisie imuksie voidn määriteä presedenssi, jooin sukeet ovt poistettviss, jos ne noudttvt presedenssiä. Keenen sukeum on suurin presedenssi. Sitä seur ktentio, j opuksi opertio + on mtin. Täten imus (() +(*)) on sm kuin + * j imus ((() +)*) sm kuin( + )*. 11. uku 598 3. * on joukon {,,,,, } säännöinen imus. 4.(+)* on kkoston ={,} kikkien merkkijonojen joukko. 5. + + on kikkien seisten merkkijonojen joukon säännöinen imus, josss ktentio on yhdistetty merkkien j muodostmt merkkijonot. 11. uku 599

6. *(*)** on kikkien seisten merkkijonojen joukon säännöinen imus, joss merkkejä on priinen määrä ti ei yhtään. Säännöiset imukset j ääreiset utomtit Hutn määrätä, onko jokin merkkijono x säännöisen imuksen kuvmss merkkijonojen joukoss. Jott säännöinen imus voitisiin esittää tehokk tv, siitä muodostetn strkti kone, jo on heppo suoritt merkkijonojen käsitteyä j vstt uss esitettyyn tehtävään. Muodostetn ääreinen ti-utomtti ei yhyemmin ääreinen utomtti (finite stte utomton, FSA). Se on erääninen yksinkertinen skentmi säännöisten formien kieten merkkijonojen täsmäämiseksi. 11. uku 600 Säännöisen kieen (regur nguge) snt vstvt säännöisten imuksien merkkijonoj. Ääreinen utomtti sisätää viisi os: 1. Tiojen (sttes) ääreinen joukko S (tit numeroidn uvust 1 ukuun k). 2. Akkosto. Tämä määritteee merkit, joi merkkijonot muodostetn. 3. Akuti (strting, initi stte) q 1 S, jok määritteee ääreisen utomtin kukonfigurtion. 4. Lopputi (fin stte) q f S, jok on hyväksyvä konfigurtio, kun ääreinen utomtti on tunnistnut merkkijonon täsmäävän määriteyn hhmon knss. 11. uku 601 5. Trnsitiofunktio (trnsition function), jok määritteee ääreisen utomtin tit. Näihin tioihin siirrytään nykyisestä tist riippuen seurvst merkistä merkkijonoss. Seurv merkki voi o myös tyhjä. Trnsitiofunktio kuv prin (q,), joss q S on ti j { }, joukon S osjoukkoon. Tämä sisätää muut mhdoiset tit, joihin voidn siirtyä otess tiss q j uettess seurvn merkkinä merkkijonost (jos on =, voidn siirtyä johonkin mhdoiseen tin ukemtt yhtään merkkiä tekstistä). Ääreinen utomtti esitetään suunnttun grfin, jonk somut ovt tioj j joukon { } symoein ei merkein eimtut ei merkityt kret ovt trnsitioit. Jos on siis (q,) = r, niin grfiss on suunnttu kri tist q tin r (jokisee r S) j kri on merkitty merkiä. Ääreinen utomtti hyväksyy (ccepts) merkkijonon x, jos utomtti kutist ähdettyään päätyy opputin sm, kun merkkijono x on prosessoitu merkeittäin vsemmt oikee siirtyen kuoinkin merkin määräämään tin prosessin ikn. Tisiirtymät on täöin tehty trnsitiofunktion mukn j myös -trnsitio on sittu. Niinpä ääreinen utomtti hyväksyy merkkijonon x, jos utomtin grfist sdn suunnttu poku kusomust oppusomuun prosessoitess x ust oppuun. Täöin x sdn ktenoim poun krien merkit. Kuvttu ääreisen utomtin toimintp on epädeterministinen (nondeterministic), kosk on useit iisi pokuj, joit utomtti voi vit nnetue merkkijonoe x. Kun prosessi voi seurt vin määritetyjä trnsitioit, epädeterministinen hyväksymissääntö merkitsee myös, että jos jokin poku joht tin q, jost ei oe määritety trnsitiot merkkijonon x seurve merkie, niin poku päätetään kesken - se ei voi joht opputin. Jos ei oe iist poku opputin (niitä voi o useit), merkkijono x ei oe hyväksytty. Kuvss 11.8. on muutmi esimerkkejä ääreisistä utomteist. 11. uku 602 11. uku 603

0 1 () 0 1 2 3 1 2 3 4 5 (c) 6, () Kuv 11.8. Esimerkkejä ääreisistä utomteist: () hyväksyy merkkijonot, joiss on priinen määrä (ti ei yhtään) merkkejä j () hyväksyy merkkijonon. Lopputi on merkitty kksoisympyränä. Kuv 11.8. (oppu) Esimerkkejä ääreisistä utomteist: (c) hyväksyy merkkijonot, jotk sisätävät osnn merkkijonon ti. 11. uku 604 11. uku 605 Säännöisiä imuksi ääreisinä utomttein toteutettuin käytetään tunnistmn ei hyväksymään säännöisiä (formej) kieiä. Automtie, jok toteutt säännöisen imuksen ohe tätä vstv säännöistä (formist) kieioppi, syötetään merkkijono. Jos merkkijono on säännöisen imuksen mukinen ei sm säännöisen kieiopin generoimn kieen sn (ti use), utomtti hyväksyy merkkijonon. Trkemmitt perusteuitt minitn opuksi seurvt useet. Luse 11.1. Okoot säännöisen imuksen pituus m merkkiä j merkkijonon x pituus n merkkiä. Se, onko x säännöisen imuksen määrittämän säännöisen kieen mukinen, on skettviss jss O(nm). Luse 11.2. Okoot merkkijono (teksti) Tnmerkkiä pitkä j säännöinen imus m merkkiä pitkä. Säännöisen imuksen määrittämän kieen mukinen osjono öydetään ti todetn, ettei seist oe, jss O(nm). 11. uku 606