12. Merkkijonot Merkkijonojen abstrakti tietotyyppi

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

11. Merkkijonot Merkkijonojen abstrakti tietotyyppi

11. Merkkijonot. 11. luku 560

ICS-C2000 Tietojenkäsittelyteoria Kevät 2015

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

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

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

Kuvausta f sanotaan tällöin isomorfismiksi.

Laskennan mallit (syksy 2010) 1. kurssikoe, ratkaisuja

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

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

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

2.2 Automaattien minimointi

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

Riemannin integraalista

Laskennan mallit (syksy 2007) Harjoitus 5, ratkaisuja

Matematiikan tukikurssi

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

Laskennan mallit Erilliskoe , ratkaisuja (Jyrki Kivinen)

TAMPEREEN YLIOPISTO Valinnaisten opintojen syventäviin opintoihin kuuluva tutkielma. Lauri Kumpulainen. Büchin automaateista

Riemannin integraali

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

5 Epäoleellinen integraali

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

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

Aiheet. ICS-C2000 Tietojenkäsittelyteoria M := Äärelliset automaatit vs. säännölliset lausekkeet. Äärelliset automaatit

2.5 Säännöllisten kielten rajoituksista

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

Ristitulo ja skalaarikolmitulo

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

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

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

S Laskennallinen systeemibiologia

Pythagoraan lause. Pythagoras Samoslainen. Pythagoraan lause

6.2 Algoritmin määritelmä

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

7 Funktiosarjoista. 7.1 Funktiosarjojen suppeneminen

Q on automaatin tilojen äärellinen joukko; Σ on automaatin syöteaakkosto; δ : Q Σ Q on automaatin siirtymäfunktio; q 0 Q on automaatin alkutila;

Laskennan perusmallit 2013: Kertausta

Matematiikan tukikurssi

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

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

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

Runkovesijohtoputket

TIEA241 Automaatit ja kieliopit

Laskennan perusmallit (LAP)

Reaalinen lukualue. Millainen on luku, jossa on päättymätön ja jaksoton desimaalikehitelmä?

3 Mallipohjainen testaus ja samoilutestaus

Täydentäviä muistiinpanoja epädeterministisistä äärellisistä automaateista

1.3 Toispuoleiset ja epäoleelliset raja-arvot

Algoritmit 2. Luento 13 Ti Timo Männikkö

AUTOMAATTIEN SYNKRONISAATIOSTA

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

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

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

Sarjaratkaisun etsiminen Maplella

Säännöllisestä lausekkeesta deterministiseksi tilakoneeksi: esimerkki

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

11. MÄÄRÄTTY INTEGRAALI JA TILAVUUS

Suorat, käyrät ja kaarevuus

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 [

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

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

LINSSI- JA PEILITYÖ TEORIAA. I Geometrisen optiikan perusaksioomat

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

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

3 Integraali ja derivaatta

Automaatit. Muodolliset kielet

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

uv n, v 1, ja uv i w A kaikilla

Laskennan perusmallit (LAP)

Polynomien laskutoimitukset

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

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

Yhteydettömän kieliopin jäsennysongelma

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.

Diskreetin matematiikan perusteet Laskuharjoitus 6 / vko 13

Chomskyn hierarkia ja yhteysherkät kieliopit

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Algoritmit 2. Luento 12 To Timo Männikkö

2. Laadi regexp, jonka avulla egrep-ohjelma löytää tekstitiedostosta kaikki

Riemannin integraalista

Säännöllisten kielten sulkeumaominaisuudet

Ohjelmistotekniikan matemaattiset menetelmät tentin kysymykset, vastaukset ja arvosteluperiaatteita

SARJAT JA DIFFERENTIAALIYHTÄLÖT Funktiojonot 1

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

Transkriptio:

12.1. Merkkijonojen strkti tietotyyppi 12. Merkkijonot Dokumenttien käsittely tietokoneiss on ksvnut vltvsti viimeisen prinkymmenen vuoden ikn. Tietokoneit käytetään dokumenttien kirjoittmiseen, muuttmiseen, etsimiseen j siirtämiseen tietoverkoiss. Monenlinen tietojenkäsittely tietoverkoiss on lisääntynyt suorstn räjähdysmäisesti vuosikymmenessä. Kikess tässä ovt tietojenkäsittelyn knnlt merkkijonot vinsemss; merkkijonoiksi voidn tietysti mieltää kikki tietojenkäsittelyn tieto mentäessä in ittijonoihin sti, mutt tässä yhteydessä trkstelln merkkijonoj nimenomn jonkinlist tekstiä, merkkejä ti symolej, sisältävänä tieton eikä mennä lisymoliseen ittiesitykseeen. 12. kpple 572 Astrktisti jtellen merkkijono (string) on pelkästään jono merkkejä jostkin kkostost (lphet), jok on merkkien (chrcter) joukko Σ. Merkkijonot toteutetn lähes tulkoon in tulukkoin, joten yksittäinen merkki sdn niistä vkiojss indeksinsä mukn tulukost. Jokisess tietokoneess on sisäänrkennettu merkkijärjestelmä, jok on tyypillisesti nykyään esim. ASCII- ti Unicode-koodi. Akkosto voi toki oll mikä thns sovelluksess määritelty; siksi trkstelln sitä yleisesti j merkitään symolill Σ. Olkoon P = P[0]P[1]P[2] P[m-1] m merkin merkkijono. P voisi oll esim. luonnollist kieltä, kuten kissn viikset, jonk pituus on 14 merkkiä. Se voisi oll myös CGTAATAGTTAATCCG, jok on 16 merkkiä pitkä j olisi DNA-sekvenssi. Edellisessä tpuksess koodi olisi esim. Unicode j jälkimmäisessä {A, C, G, T}. 12. kpple 573 Monet tyyppilliset merkkijonokäsittelyt pitävät sisällään merkkijonojen pilkkomist osiin. Näistä käytetään nimitystä osjono (sustring), jolloin P:n tpuksess osjono on muoto P[i]P[i+1]P[i+2] P[j], kun on 0 i j m-1. Merkkijono voi oll näin ollen itsensä osjono, kun i = 0 j j = m-1. Jos tämä ääritilnne jätetään pois, kysymys on idost (proper) osjonost, jolloin 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 edellä), jonk pituus on 0. Etuliite (prefix) on osjono P[0..i], kun 0 i m-1. Loppuliite (suffix) on muoto P[i..m-1], kun 0 i m-1. Vstkohtn merkkijonon pilkomiselle on yhdistäminen, ktentio (conctention), jolloin 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 eli P[0]P[1]P[2] P[m-1]Q[0]Q[1]Q[2] Q[m-1] (toisinn käytetään muitkin symoleit kuin + ti vin kirjoitetn ne peräkkäin ktention osoittmiseksi). 12. kpple 574 Merkkijono-opertiot jotelln khteen tyyppiin, muuttviin (mutle) j muuttmttomiin (immutle), sen mukn, voidnko opertioll muutt merkkijono. Esim. Jvss tämä määritellään täsmällisesti luokill String jälkimmäiselle j StringBuffer edelliselle. Muuttmttomi opertioit ovt mm. merkkijonon pituuden määrittäminen, ktentio j osjonon määrääminen. Muuttvi opertioit ovt eriliset päivitystoiminnt, kuten merkin lisääminen merkkijonon johonkin kohtn, merkin vihtminen toiseen ti merkkijonon kääntäminen. Opertiost riippuen näiden suoritusjt vihtelevt jst O(1) ikn O(n), O(m) ti O(n+m), missä n j m ovt opertioiss esiintyvien merkkijonojen pituudet. 12. kpple 575

12.2. Hhmontäsmäämislgoritmej Merkkijonojen klssisess hhmontäsmäämisongelmss (pttern mtching) on merkkijono T pituudeltn n, j hlutn selvittää, onko P merkkijonon T osjono. Tämä käsite trkoitt kysymystä, onko olemss T:n osjono jostkin indeksistä i lken, jok on merkki merkiltä sm kuin P. Lskennn tulos on ilmoitus siitä, onko näin vi ei. Olkoot P j T kkoston Σ merkeistä muodostettuj. Vikk kkosto ymmärretään yleisenä, oletetn sen koon Σ olevn äärellinen j vkio. Trkstelln seurvss suppesti hhmontäsmäämislgoritmej. R n voimn hhmontäsmäämislgoritmi R n voimn hhmontäsmäämislgoritmi (rute-force pttern mtching) on todennäköisesti ensimmäinen, jok tulisi mieleen, jos ongelm pitäisi lähteä rtkisemn uuten. Siinä tutkitn yksinkertisesti kikki mhdolliset P:n sijinnit T:ssä. Algoritmi (koodi 12.1.) on yksinkertinen j toimii jop rjoittmttomlle kkostolle. Esim. 12.1. Olkoot merkkijonon T teksti cccc j hhmon P merkkijono c. Kuvss 12.1. esitetään lgoritmin suoritus esimerkin tpuksess. 12. kpple 576 12. kpple 577 Algorithm BruteForceMtch(T,P): Input: merkkijonot T j P j näissä n j m merkkiä Output: löydetyn osjonon ensimmäisen merkin indeksi T:ssä ti ilmoitus, ettei P:tä esiinny T:ssä for i 0 to n-m {jokiselle mhdolliselle indeksille T:ssä} do for j 0 to m-1 {jokiselle mhdolliselle indeksille P:ssä} do if T[i+j] = P[j] then if j = m-1 then return i else rek ulos sisemmästä silmukst return osjono P ei esiinny T:ssä Koodi 12.1. R n voimn hhmontäsmäämislgoritmi. 12. kpple 578 c c c 1 2 3 4 5 6 7 8 9 10 lisää 12 vertilu 23 24 25 26 27 28 täsmäys indeksillä 10 Kuv 12.1. Esimerkkisuoritus r n voimn lgoritmist, missä joudutn tekemään 28 vertilu. 12. kpple 579

R n voimn lgoritmi on yksinkertisin mhdollinen. Se käsittää kksi sisäkkäistä silmukk, joill tehtävä selvästi rtke. Kyseessä on täydellinen hku merkkijonoss T. Algoritmin suorituskyky ei ole kuitenkn hyvä, kosk phimmilln joudutn tekemään m vertilu sen totemiseksi, ettei hhmo täsmää käsiteltävän osjonon knss. Algoritmin ulomp silmukk suoritetn enintään n - m + 1 kert j siempää enintään m kert. Näistä tulee menetelmän suoritusjksi O((n-m+1)m), jok on muunnettviss muotoon O(nm). Knuth-Morris-Prtt-lgoritmi R n voimn lgoritmiss oli muun heikkous. Kun esimerkissä 12.1. hvittiin josskin koht, ettei osjono täsmää hhmon knss, hylättiin kikki siltä koht kerätty informtio (osittinen täsmäys tvlln) j loitettiin vertminen uudestn yhden indeksin verrn eteenpäin liikkuen. Tätä menettelyä on mhdollist tehost, kun hyödynnetään vertilujen tuottm informtiot. 12. kpple 580 Knuth-Morris-Prtt-goritmiss (KMP) esikäsitellään hhmo P niin, että voidn hyödyntää mhdollisimmn ljsti iemmin suoritettuj vertiluj. Muodostetn epäonnistumisfunktio (filure function) f, jok osoitt P:n sopivn siirron hyödyntäen iempi vertiluj. Epäonnistumisfunktio määritellään P:n pisimpänä etuliitteenä, jok on osjonon P[1..j] loppuliite (ei siis P[0..j]). Myöhemmin esitetään, miten f lsketn. Epäonnistumisfunktio kood toistetut osjonot hhmon sisällä. Tätä tieto käytetään trpeettomien vertilujen välttämiseksi. Hypätään niiden yli, kosk tiedetään tällöin osjonon lkupään täsmäävän, kun oli löydetty sille täsmäävää toisto (hhmon mitn sisältä) myöhemmin merkkijonost. Esim. 12.2. Trkstelln hhmo P = c esimerkistä 12.1. KMPlgoritmin epäonnistumisfunktio f(j) on (toistoin khdesti j ): j 0 1 2 3 4 5 P[j] f(j) 0 0 12. kpple 1 0 1 2 581 KMP-lgoritmi (koodi 12.2.) käy peräkkäin merkkijono T läpi verrten sitä hhmon P knss. Löydettäessä täsmäävät merkit lisätään molempien indeksien rvoj yhdellä. Jos vstinmerkit T:stä j P:stä eivät täsmää j edellisessä merkkien vertiluss oli täsmäys, ktsotn epäonnistumisfunktiost uusi indeksi P:ssä, mistä pitää jtk vertilu. Muuten (oli epätäsmäys j käsittely on hhmon luss) lisätään yksinkertisesti T:n indeksiä (P:n indeksi pysyy muuttumttomn eli hhmon luss). Tätä toistetn, kunnes täsmäys tphtuu ti svutetn merkkijonon T loppu. Kuvss 12.2. on esitetty esimerkki KMP-lgoritmin toiminnst. Huomtn sen tekevän vähemmän vertiluj kuin r n voimn lgoritmi. Algorithm KMPMtch(T,P): Input: merkkijonot T j P, joiden pituudet ovt n j m Output: löydetyn osjonon lkukohdn indeksi T:stä ti ilmoitus, ettei hhmo löydetty f KMPfilureFunction(P) {muodostetn epäonnistumisfunktio f} i 0 j 0 while i < n do if P[j] = T[i] then if j = m - 1 then return i - m + 1 {täsmäys tphtui} j j+ 1 Koodi 12.2. (lku) Knuth-Morris-Prtt-lgoritmi. 12. kpple 582 12. kpple 583

else if j > 0 {ei täsmäystä, mutt on edetty P:ssä} then j f(j -1) {muutetn indeksiä epäonnistumisfunktion mukn} else return osjono P ei ole merkkijonoss T Koodi 12.2. (loppu) Knuth-Morris-Prtt-lgoritmi. KMP-lgoritmin pääos on while-silmukk, jok suoritt T:n j P:n merkkien vertilun. Tämän tuloksest riippuen lgoritmi joko siirtyy niiden seurviin merkkeihin, käyttää epäonnistumisfunktiot uutt merkkiehdokst vrten P:stä ti loitt uudestn seurvst merkistä T:ssä. Trpeettomt vertilut ohitetn käsittelyssä, sillä epäonnistumisfunktio tk niiden olevn redundnttej. 12. kpple 584 c c c 1 2 3 4 5 6 vertilu ei tässä ole trpeen 7 8 9 10 11 12 13 14 15 16 17 18 19 Kuv 12.2. Esimerkkisuoritus KMP-lgoritmist, missä selvitään 19 vertilull, kun pun on esimerkin 12.2. epäonnistumisfunktio f. 12. kpple 585 Yksityiskohtiin kjomtt j epäonnistumisfunktion muodostmist huomioon ottmtt todetn KMP-lgoritmin suoritusjn muilt osin olevn luokk O(n). Epäonnistumisfunktio muodostetn vyörytysmenetelmällä (oot-strpping), jok muistutt itse KMP-lgoritmi. 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 lgoritmin suorituksen jn, f(j-1) on in määritelty sitä trvittess. Epäonnistumisfunktion lskent on suoritusjltn O(m) eli luonnollisesti hhmon pituudest riippuv. Täten KMP-lgoritmin suoritusik on kokonisuudessn O(n+m). 12. kpple 586 Algorithm KMPFilureFunction(P): Input: merkkijono P (hhmo) m merkkeineen Output: merkkijonon P epäonnistumisfunktio f, jok kuv j:n P:n pisimmän etuliitteen pituudeksi, kun etuliite on P[1..j]:n loppuliite i 1 j 0 f(0) 0 while i m-1 do if P[j] = P[i] then {on täsmätty j + 1 merkkiä} f(i) j + 1 j j+ 1 Koodi 12.3. (lku) KMP-lgoritmin epäonnistumisfunktion lskeminen. Algoritmi hyödyntää funktion edeltäviä rvoj uusi lskiessn. 12. kpple 587

else if j > 0 then {j indeksoi P:n etuliitteen jälkeen, jot on täsmättävä} j f(j-1) else {täsmäystä ei tässä ole} f(i) 0 Koodi 12.3. (loppu) KMP-lgoritmin epäonnistumisfunktion lskeminen. Algoritmi hyödyntää funktion edeltäviä rvoj uusi lskiessn. 12.3. Hhmontäsmäys säännöllisten ilmuksien vull Edellä esitetyt hhmontäsmäyslgoritmit olivt kikki trkoitetut rtkisemn ongelmi, joiss etsitään tekstistä määrättyä osjono, hhmo. Monesti on trvett merkkijonojen etsimiseen, missä hlutn yleistä muoto olevi hhmoj, ei inostn yhtä määrättyä. Säännölliset ilmukset (regulr expressions) kuvvt tällisi yleisiä hhmoj. Säännölliset ilmukset Voisi kuvitell, että merkkijonon T jokinen merkki on pkko käydä läpi vertiluiss. Näin ei kuitenkn in ole, vn siitä voidn usein hypätä yli osi. Kysymyksessä on Knuth-Morris-Prtt-lgoritmi muistuttv Boyer-Moore-lgoritmi, jot ei kuitenkn tässä trkstell. 12. kpple 588 Säännölliset ilmukset ovt yksinkertisi, mutt tehokkit käsitteitä kuvttess merkkijonojen mhdollisesti äärettömiä joukkoj, joit kutsutn myös formleiksi kieliksi (forml lnguge) yli nnetun kkoston Σ. Säännöllisiä perusilmuksi määritellään khdell säännöllä: 12. kpple 589 1. Tyhjä on säännöllinen ilmus, jok viitt joukkon {}. Tämä sisältää inostn tyhjän merkkijonon, jonk pituus on noll. 2. Jokisell symolill joukost Σ on säännöllinen ilmus, jok on joukko {}. Seurvill kolmell säännöllä yhdistetään edeltävien perussääntöjen ntmi ilmuksi uusien säännöllisten ilmusten luomiseksi: 1. Jos α j β ovt säännöllisiä ilmuksi kuvten joukot A j B, (α + β) on säännöllinen ilmus määrittäen joukon A B. 2. Jos α j β ovt säännöllisiä ilmuksi kuvten joukot A j B, (αβ) on säännöllinen ilmus määrittäen kikkien sellisten merkkijonojen joukon, missä merkkijonot on muodostettu ottmll merkkijono joukost A j ktenoimll se merkkijonoon joukost B. 12. kpple 590 3. Jos α on säännöllinen ilmus kuvten joukon A, niin (α*) on säännöllinen ilmus, jok kuv kikkien sellisten merkkijonojen joukon, joss merkkijonot on muodostettu ktenoimll i merkkijono joukost A (toistot sllimll), kun i 0 (tpus i = 0 trkoitt tyhjää merkkijono ). Tämä opertio on joukon A Kleenen sulkeum (Kleene closure). Kun hlutn käyttää tätä ilmn tyhjää merkkijono, merkitään (α + ), missä on siis i 1. Aritmeettisten lusekkeiden tvoin säännöllisille ilmuksille voidn määritellä presedenssi, jolloin sulkeet ovt poistettviss, jos ne noudttvt presedenssiä. Kleenen sulkeumll on suurin presedenssi. Sitä seur ktentio, j lopuksi opertioll + on mtlin. Täten ilmus (() + (*)) on sm kuin + * j ilmus ((() + )*) sm kuin ( + )*. 12. kpple 591

Esim. 11. 3. Säännölliset ilmukset kykenevät esittämään yksinkertisesti merkkijonojen joukkoj oheisten esimerkkien tpn kkoston Σ olless {, }. 1. + on joukon {, } säännöllinen ilmus. 2. ( + ) on joukon {, } säännöllinen ilmus. 3. * on joukon {,,,,, } säännöllinen ilmus. 4. ( + )* on kkoston Σ = {, } kikkien merkkijonojen joukko. 5. + + on kikkien sellisten merkkijonojen joukon säännöllinen ilmus, josss ktentioll on yhdistetty merkkien j muodostmt merkkijonot. 12. kpple 592 6. *(*)** on kikkien sellisten merkkijonojen joukon säännöllinen ilmus, joss merkkejä on prillinen määrä. Säännölliset ilmukset j äärelliset utomtit Hlutn määrätä, onko jokin merkkijono x säännöllisen ilmuksen α kuvmss merkkijonojen joukoss. Jott säännöllinen ilmus voitisiin esittää tehokkll tvll, siitä muodostetn strkti kone, joll on helppo suoritt merkkijonojen käsittelyä j vstt luss esitettyyn tehtävään. Muodostetn äärellinen til-utomtti eli lyhyemmin äärellinen utomtti (finite stte utomton, FSA). Se on eräänlinen yksinkertinen lskentmlli säännöllisten formlien kielten merkkijonojen täsmäämiseksi. 12. kpple 593 Säännöllisen kielen (regulr lnguge) snt vstvt säännöllisten ilmuksien merkkijonoj. Äärellinen utomtti sisältää viisi os: 1. Tilojen (sttes) äärellinen joukko S (tilt numeroidn luvust 1 lukuun k). 2. Akkosto Σ. Tämä määrittelee merkit, joill merkkijonot muodostetn. 3. Alkutil (strting, initil stte) q 1 S, jok määrittelee äärellisen utomtin lkukonfigurtion. 4. Lopputil (finl stte) q f S, jok on hyväksyvä konfigurtio, kun äärellinen utomtti on tunnistnut merkkijonon täsmäävän määritellyn hhmon knss. 5. Trnsitiofunktio (trnsition function) δ, jok määrittelee äärellisen utomtin tilt. Näihin tiloihin siirrytään nykyisestä tilst riippuen seurvst merkistä merkkijonoss. Seurv merkki voi oll myös tyhjä. Trnsitiofunktio δ kuv prin (q,), joss q S on til j Σ {}, joukon S osjoukkoon. Tämä sisältää muut mhdolliset tilt, joihin voidn siirtyä oltess tilss q j luettess seurvn merkkinä merkkijonost (jos on =, voidn siirtyä johonkin mhdolliseen tiln lukemtt yhtään merkkiä tekstistä). Äärellinen utomtti esitetään suunnttun grfin, jonk solmut ovt tiloj j joukon Σ {} symolein eli merkein leimtut eli merkityt kret ovt trnsitioit. Jos on siis δ(q,) = r, niin grfiss on suunnttu kri tilst q tiln r (jokiselle r S) j kri on merkitty merkillä. Äärellinen utomtti hyväksyy (ccepts) merkkijonon x, jos utomtti lkutilst lähdettyään päätyy lopputiln smll, kun merkkijono x on prosessoitu merkeittäin vsemmlt oikelle siirtyen kulloinkin merkin määräämään tiln prosessin ikn. 12. kpple 594 12. kpple 595

Tilsiirtymät on tällöin tehty trnsitiofunktion mukn j myös -trnsitio on sllittu. Niinpä äärellinen utomtti hyväksyy merkkijonon x, jos utomtin grfist sdn suunnttu polku lkusolmust loppusolmuun prosessoitess x lust loppuun. Tällöin x sdn ktenoimll polun krien merkit. 0 () 1 Kuvttu äärellisen utomtin toimintp on epädeterministinen (nondeterministic), kosk on useit lillisi polkuj, joit utomtti voi vlit nnetulle merkkijonolle x. Kun prosessi voi seurt vin määriteltyjä trnsitioit, epädeterministinen hyväksymissääntö merkitsee myös, että jos jokin polku joht tiln q, jost ei ole määritelty trnsitiot merkkijonon x seurvlle merkille, niin polku päätetään kesken - se ei voi joht lopputiln. Jos ei ole lillist polku lopputiln (niitä voi oll useit), merkkijono x ei ole hyväksytty. Kuvss 12.3. on muutmi esimerkkejä äärellisistä utomteist. 0 1 2 3 () Kuv 11.3. Esimerkkejä äärellisistä utomteist: () hyväksyy merkkijonot, joiss on prillinen määrä merkkejä j () hyväksyy merkkijonon. Lopputil on merkitty kksoisympyränä. 12. kpple 596 12. kpple 597 1 2 3 4 5 6, Säännöllisiä ilmuksi äärellisinä utomttein toteutettuin käytetään tunnistmn eli hyväksymään säännöllisiä (formlej) kieliä. Automtille, jok toteutt säännöllisen ilmuksen ohell tätä vstv säännöllistä (formlist) kielioppi, syötetään merkkijono. Jos merkkijono on säännöllisen ilmuksen mukinen eli smll säännöllisen kieliopin generoimn kielen sn (ti luse), utomtti hyväksyy merkkijonon. Trkemmitt perusteluitt minitn lopuksi seurvt luseet. (c) Kuv 11.3. (loppu) Esimerkkejä äärellisistä utomteist: (c) hyväksyy merkkijonot, jotk sisältävät osnn merkkijonon ti. 12. kpple 598 Luse 12.1. Olkoot säännöllisen ilmuksen α pituus m merkkiä j merkkijonon x pituus n merkkiä. Se, onko x säännöllisen ilmuksen α määrittämän säännöllisen kielen mukinen, on lskettviss jss O(nm). Luse 12.2. Olkoot merkkijono (teksti) T n merkkiä pitkä j säännöllinen ilmus α m merkkiä pitkä. Säännöllisen ilmuksen α määrittämän kielen mukinen osjono löydetään ti todetn, ettei sellist ole, jss O(nm). 12. kpple 599