11. Merkkijonot. 11. luku 560

Koko: px
Aloita esitys sivulta:

Download "11. Merkkijonot. 11. luku 560"

Transkriptio

1 11. Merkkijonot Dokumenttien käsittely tietokoneissa on kasvanut valtavasti viimeisen parinkymmenen vuoden aikana. Tietokoneita käytetään dokumenttien kirjoittamiseen, muuttamiseen, etsimiseen ja siirtämiseen tietoverkoissa. Monenlainen tietojenkäsittely tietoverkoissa on lisääntynyt suorastaan räjähdysmäisesti vuosikymmenessä. Kaikessa tässä ovat tietojenkäsittelyn kannalta merkkijonot avainasemassa; merkkijonoiksi voidaan tietysti mieltää kaikki tietojenkäsittelyn tieto mentäessä aina bittijonoihin asti, mutta tässä yhteydessä tarkastellaan merkkijonoja nimenomaan jonkinlaista tekstiä, merkkejä tai symboleja, sisältävänä tietona eikä mennä alisymboliseen bittiesitykseeen. 11. luku 560

2 11.1. Merkkijonojen abstrakti tietotyyppi Abstraktisti ajatellen merkkijono (string) on pelkästään jono merkkejä jostakin aakkostosta (alphabet), joka on merkkien (character) joukko. Merkkijonot toteutetaan lähes tulkoon aina taulukkoina, joten yksittäinen merkki saadaan niistä vakioajassa indeksinsä mukaan taulukosta. Jokaisessa tietokoneessa on sisäänrakennettu merkkijärjestelmä, joka on tyypillisesti nykyään esim. ASCII- tai Unicode-koodi. Aakkosto voi toki olla mikä tahansa sovelluksessa määritelty; siksi tarkastellaan sitä yleisesti ja merkitään symbolilla. Olkoon P = P[0]P[1]P[2] P[m-1] m merkin merkkijono. P voisi olla esim. luonnollista kieltä, kuten kissan viikset, jonka pituus on 14 merkkiä. Se voisi olla myös CGTAATAGTTAATCCG, joka on 16 merkkiä pitkä ja olisi DNA-sekvenssi. Edellisessä tapauksessa koodi olisi esim. Unicode ja jälkimmäisessä {A, C, G, T}. 11. luku 561

3 Monet tyyppilliset merkkijonokäsittelyt pitävät sisällään merkkijonojen pilkkomista osiin. Näistä käytetään nimitystä osajono (substring), jolloin P:n tapauksessa osajono on muotoa P[i]P[i+1]P[i+2] P[j], kunon0 i j m-1. Merkkijono voi olla näin ollen itsensä osajono, kun i = 0 ja j = m-1. Jos tämä ääritilanne jätetään pois, kysymys on aidosta (proper) osajonosta, jolloin i > 0 tai j < m-1. Lyhennysmerkintänä eo. merkkijonosta voidaan käyttää merkintää P[i..j]. Voidaan käyttää myös tyhjää merkkijonoa (i > j edellä), jonka pituus on 0. Etuliite (prefix) on osajono P[0..i],kun0 i m-1. Loppuliite (suffix) on muotoa P[i..m-1], kun 0 i m-1. Vastakohtana merkkijonon pilkkomiselle on yhdistäminen, katenaatio (concatenation), jolloin merkkijonoista P = P[0]P[1]P[2] P[m-1] ja 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] (toisinaan käytetään muitakin symboleita kuin + tai vain kirjoitetaan ne peräkkäin katenaation osoittamiseksi). 11. luku 562

4 Merkkijono-operaatiot jaotellaan kahteen tyyppiin, muuttaviin (mutable) ja muuttamattomiin (immutable), sen mukaan, voidaanko operaatiolla muuttaa merkkijonoa. Esim. Javassa tämä määritellään täsmällisesti luokilla String jälkimmäiselle ja StringBuffer edelliselle. Muuttamattomia operaatioita ovat mm. merkkijonon pituuden määrittäminen, katenaatio ja osajonon määrääminen. Muuttavia operaatioita ovat erilaiset päivitystoiminnat, kuten merkin lisääminen merkkijonon johonkin kohtaan, merkin vaihtaminen toiseen tai merkkijonon kääntäminen. Operaatiosta riippuen näiden suoritusajat vaihtelevat ajasta O(1) aikaan O(n), O(m) tai O(n+m), missä n ja m ovat operaatioissa esiintyvien merkkijonojen pituudet. 11. luku 563

5 11.2. Hahmontäsmäämisalgoritmeja Merkkijonojen klassisessa hahmontäsmäämisongelmassa (pattern matching) on merkkijono T pituudeltaan n, ja halutaan selvittää, onko P merkkijonon T osajono. Tämä käsite tarkoittaa kysymystä, onko olemassa T:n osajonoa jostakin indeksistä i alkaen, joka on merkki merkiltä sama kuin P. Laskennan tulos on ilmoitus siitä, onko näin vai ei. Jos hahmo esiintyy merkkijonossa T, annetaan alkukohta i. Olkoot P ja T aakkoston merkeistä muodostettuja. Vaikka aakkosto ymmärretään yleisenä, oletetaan sen koon olevan äärellinen ja vakio. Tarkastellaan seuraavassa suppeasti hahmontäsmäämisalgoritmeja. 11. luku 564

6 Raa an voiman hahmontäsmäämisalgoritmi Raa an voiman hahmontäsmäämisalgoritmi (brute-force pattern matching) on todennäköisesti ensimmäinen, joka tulisi mieleen, jos ongelmaa pitäisi lähteä ratkaisemaan uutena. Siinä tutkitaan yksinkertaisesti kaikki mahdolliset P:n sijainnit T:ssä. Algoritmi (koodi 11.1.) on yksinkertainen ja toimii jopa rajoittamattomalle aakkostolle. Esim Olkoot merkkijonona T teksti abacaabaccabacabaabb ja hahmona P merkkijono abacab. Kuvassa esitetään algoritmin suoritus esimerkin tapauksessa. 11. luku 565

7 Algorithm BruteForceMatch(T,P): Input: merkkijonot T ja P ja näissä n ja m merkkiä Output: löydetyn osajonon ensimmäisen merkin indeksi T:ssä tai ilmoitus, ettei P:tä esiinny T:ssä for i 0 to n-m {jokaiselle mahdolliselle indeksille T:ssä} do j 0 while (j<m and T[i+j] = P[j]) do j = j+1 if j=m then return i return osajonoa P ei esiinny T:ssä Koodi Raa an voiman hahmontäsmäämisalgoritmi. 11. luku 566

8 a b a c a a b a c c a b a c a b a a b b a b a c a b 7 a b a c a b 8 9 a b a c a b 10 a b a c a b lisää 12 vertailua täsmäys indeksillä 10 a b a c a b Kuva Esimerkkisuoritus raa an voiman algoritmista, missä joudutaan tekemään 28 vertailua. 11. luku 567

9 Raa an voiman algoritmi on yksinkertaisin mahdollinen. Se käsittää kaksi sisäkkäistä silmukkaa, joilla tehtävä selvästi ratkeaa. Kyseessä on täydellinen haku merkkijonossa T. Algoritmin suorituskyky ei ole kuitenkaan hyvä, koska pahimmillaan joudutaan tekemään m vertailua sen toteamiseksi, ettei hahmo täsmää käsiteltävän osajonon kanssa. Algoritmin ulompaa silmukkaa suoritetaan enintään n - m + 1 kertaa ja sisempää enintään m kertaa. Näistä tulee menetelmän suoritusajaksi O((n-m+1)m), joka on muunnettavissa muotoon O(nm). Boyer-Moore-algoritmi Aina ei ole tarpeen käydä läpi kaikkia T:n merkkejä osajonon P löytämiseksi. Isohko osa T:n merkkien ja P:n välisistä vertailuista on mahdollista välttää käytettäessä Boyer-Moore-algoritmia (BM), josta tässä esitetään yksinkertaistettu versio. 11. luku 568

10 BM-algoritmi hyödyntää tietoa, että aakkoston koko eli merkkien määrä on kiinnitetty. Tämä on myös menetelmän rajoitus, kun taas raa an voiman algoritmi toimii rajoittamattomalla aakkostolla. BM-algoritmi toimii parhaiten suppealla aakkostolla. Näin se on usein hyvä sanojen etsimiseksi (luonnollisen kielen) tekstistä. Raa an voiman menettelyä tehostetaan kahdella (mahdollisesti) aikaa säästävällä heuristiikalla: Peili-heuristiikka: Vertailtaessa mahdollista P:n täsmäämistä jossakin kohtaa T:ssä vertaaminen aloitetaan P:n lopusta tämän alkuun päin edeten. 11. luku 569

11 Merkki-hyppy-heuristiikka: Jos vertailussa esiintyy merkin T[i]=c epätäsmääminen vertailtavan P[j] kanssa, tilanne hoidetaan seuraavasti. Jos c ei esiinny ollenkaan P:ssä, P siirretään kokonaan merkin T[i] ohi, sillä sehän ei voi täsmätä minkään P:n merkin kanssa. Muuten P:tä siirretään eteenpäin, kunnes P:n merkki c täsmää jonkin merkin T[i] kanssa. Edellinen heuristiikka on hyödyllinen, kun kohdataan P:n loppupäästä olevan merkin kohdassa epätäsmääminen, jolloin ei tarvitse verrata enää P:n alkupään merkkejä. Sen sijaan hypätään näiden merkkien yli T:ssä jälkimmäisen heuristiikan mukaisesti. Näin voidaan säästää runsaasti vertailuja. 11. luku 570

12 Määritellään funktio last(c). Tämä käsittää aakkoston merkin c ja määrää, kuinka kauas hahmoa P voidaan siirtää, kun löydetään tekstistä merkki c, joka ei täsmää hahmon kanssa: Jos c on mukana hahmossa P, last(c) on yhtä kuin c:n viimeisen eli oikeanpuolimmaisen esiintymän indeksi. Muuten määritellään, että last(c)=-1. Kun käytetetään merkkejä vastaavia indeksejä talletettuina taulukkoon, last-funktio on helposti toteutettavissa hakutauluna. Tämä voisi olla harjoitustehtävä. Hakutaulu on laskettavissa suoritusajassa O(m+ ) tunnettaessa P (monp:n pituus ja aakkoston merkkien määrä). 11. luku 571

13 Algorithm BM(T,P): Input: Teksti eli merkkijono T (n merkkiä) ja hahmo P (m merkkiä). Output: Alkuindeksi ensimmäisestä osamerkkijonosta, joka täsmää T:ssä P:n kanssa, tai ilmoitus, ettei täsmäystä esiinny. Laske funktio last. i m-1 j m-1 repeat if P[j]=T[i] then if j=0 then return i {täsmäys!} else i i-1 j j-1 Koodi Boyer-Moore-hahmontäsmäysalgoritmin alkuosa. 11. luku 572

14 else i i+m-min(j,1+last(t[i])) {hyppy} j m-1 until i>n-1 return T:ssä ei ole P:n kanssa täsmäävää osamerkkijonoa. Koodi Boyer-Moore-hahmontäsmäysalgoritmin loppuosa. Hyppyvaihetta havainnollistetaan seuraavalla kuvalla. 11. luku 573

15 (a) a i a b l j m-(1+l) a b 1+l (b) a i b a j l m-j b a j Kuva Hypyn esitys Koodin mukaan, kun l=last(t[i]). Erotetaan kaksi tapausta: (a) 1+l j, jossa siirretään hahmoa j-l yksikköä, ja (b) j<1+l, jossa siirretään hahmoa yhdellä yksiköllä kuvan tilanteessa. 11. luku 574

16 a b a c a a b a d c a b a c a b a a b b a b a c a 1 b a b a c a b 5 a b a c a b a b a c a 6 b a b a c a b 7 a b a c a b ch a b c d last(ch) Kuva Tämä vastaa Kuvan tilannetta yhden merkin erolla, jossa on merkki d yhden c:n esiintymän sijasta. BM-algoritmi suorittaa 13 merkkivertailua. 11. luku 575

17 BM-algoritmin pahimman tapauksen suoritusaika on O(nm+ ). Tällöin O(m+ ) on last-funktion laskenta-aika ja hahmon etsintä vie enimmillään O(nm), saman kuin raa an voiman algoritmi. Pahin tapaus esiintyy esim. seuraavassa tilanteessa: n T = aaaaaa.a m-1 P = baa a Tällainen on kuitenkin sangen harvinainen tilanne, erityisesti luonnollisen kielen tekstissä seuraavan kuvan tapaan. 11. luku 576

18 a p a t t e r n m a t c h i n g a l g o r i t h m r i t h m r i t h m r i t h m r i t h m r i t h m r i t h m r i t h m Kuva Haettaessa hahmoa luonnollisen kielen tekstistä keskimääräinen vertailujen määrä on yleensä melko pieni. Kokeellisten testien mukaan englanninkielisestä se on keskimäärin 0.24 vertailua merkkiä kohti viisimerkkisellä hahmolla. 11. luku 577

19 Knuth-Morris-Pratt-algoritmi Raa an voiman algoritmissa oli muuan heikkous. Kun esimerkissä havaittiin jossakin kohtaa, ettei osajono täsmää hahmon kanssa, hylättiin kaikki siltä kohtaa kerätty informaatio (osittainen täsmäys tavallaan) ja aloitettiin vertaaminen uudestaan yhden indeksin verran eteenpäin liikkuen. Tätä menettelyä on mahdollista tehostaa, kun hyödynnetään vertailujen tuottamaa informaatiota. 11. luku 578

20 Knuth-Morris-Pratt-agoritmissa (KMP) esikäsitellään hahmoa P niin, että voidaan hyödyntää mahdollisimman laajasti aiemmin suoritettuja vertailuja. Muodostetaan epäonnistumisfunktio (failure function) f, joka osoittaa P:n sopivan siirron hyödyntäen aiempia vertailuja. Epäonnistumisfunktio määritellään P:n pisimpänä etuliitteenä, joka on osajonon P[1..j] loppuliite (ei siis P[0..j]). Myöhemmin esitetään, miten f lasketaan. Epäonnistumisfunktio koodaa toistetut osajonot hahmon sisällä. Tätä tietoa käytetään tarpeettomien vertailujen välttämiseksi. Hypätään niiden yli, koska tiedetään tällöin osajonon alkupään täsmäävän, kun oli löydetty sille täsmäävää toistoa (hahmon mitan sisältä) myöhemmin merkkijonosta. Esim Tarkastellaan hahmoa P = abacab esimerkistä KMPalgoritmin epäonnistumisfunktio f(j) on (toistoina kahdesti a ja kerran ab): j P[j] a b a c a b 11. luku 579 f(j)

21 KMP-algoritmi (koodi 11.2.) käy peräkkäin merkkijonoa T läpi verraten sitä hahmon P kanssa. Löydettäessä täsmäävät merkit lisätään molempien indeksien arvoja yhdellä. Jos vastinmerkit T:stä ja P:stä eivät täsmää ja edellisessä merkkien vertailussa oli täsmäys, katsotaan epäonnistumisfunktiosta uusi indeksi P:ssä, mistä pitää jatkaa vertailua. Muuten (oli epätäsmäys ja käsittely on hahmon alussa) lisätään yksinkertaisesti T:n indeksiä (P:n indeksi pysyy muuttumattomana eli hahmon alussa). Tätä toistetaan, kunnes täsmäys tapahtuu tai saavutetaan merkkijonon T loppu. Kuvassa on esitetty esimerkki KMP-algoritmin toiminnasta. Huomataan sen tekevän vähemmän vertailuja kuin raa an voiman algoritmi. 11. luku 580

22 Algorithm KMPMatch(T,P): Input: merkkijonot T ja P, joiden pituudet ovat n ja m Output: löydetyn osajonon alkukohdan indeksi T:stä tai ilmoitus, ettei hahmoa löydetty f KMPfailureFunction(P) {muodostetaan 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 tapahtui} i i + 1 j j + 1 Koodi (alku) Knuth-Morris-Pratt-algoritmi. 11. luku 581

23 else if j > 0 {liittyy ens. if:iin; ei täsmäystä, mutta on edetty P:ssä} then j f(j -1) {muutetaan indeksiä epäonnistumisfunktion mukaan} else i i + 1 return osajonoa P ei ole merkkijonossa T Koodi (loppu) Knuth-Morris-Pratt-algoritmi. KMP-algoritmin pääosa on while-silmukka, joka suorittaa T:n ja P:n merkkien vertailun. Tämän tuloksesta riippuen algoritmi joko siirtyy niiden seuraaviin merkkeihin, käyttää epäonnistumisfunktiota uutta merkkiehdokasta varten P:stä tai aloittaa uudestaan seuraavasta merkistä T:ssä. Tarpeettomat vertailut ohitetaan käsittelyssä, sillä epäonnistumisfunktio takaa niiden olevan redundantteja. 11. luku 582

24 a b a c a a b a c c a b a c a b a a b b a b a c a b 7 a b a c a b a b a c a b vertailu ei tässä ole tarpeen 13 a b a c a b a b a c a b Kuva Esimerkkisuoritus KMP-algoritmista, missä selvitään 19 vertailulla, kun apuna on esimerkin epäonnistumisfunktio f. 11. luku 583

25 Yksityiskohtiin kajoamatta ja epäonnistumisfunktion muodostamista huomioon ottamatta todetaan KMP-algoritmin suoritusajan muilta osin olevan luokkaa O(n). Epäonnistumisfunktio muodostetaan vyörytysmenetelmällä (boot-strapping), joka muistuttaa itse KMP-algoritmia. Verrataan hahmoa itseensä. Joka kerta, kun on täsmäävät merkit (saman merkin kaksi eri esiintymää hahmossa), asetetaan f(i) =j+ 1. Koska on i > j koko algoritmin suorituksen ajan, f(j-1) on aina määritelty sitä tarvittaessa. Epäonnistumisfunktion laskenta on suoritusajaltaan O(m) eli luonnollisesti hahmon pituudesta riippuva. Täten KMP-algoritmin suoritusaika on kokonaisuudessaan O(n+m). 11. luku 584

26 Algorithm KMPFailureFunction(P): Input: merkkijono P (hahmo) m merkkeineen Output: merkkijonon P epäonnistumisfunktio f, joka kuvaa 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 i i + 1 j j + 1 Koodi (alku) KMP-algoritmin epäonnistumisfunktion laskeminen. Algoritmi hyödyntää funktion edeltäviä arvoja uusia laskiessaan. 11. luku 585

27 else if j > 0 then {j indeksoi P:n etuliitteen jälkeen, jota on täsmättävä} j f(j-1) else {täsmäystä ei tässä ole} f(i) 0 i i + 1 Koodi (loppu) KMP-algoritmin epäonnistumisfunktion laskeminen. Algoritmi hyödyntää funktion edeltäviä arvoja uusia laskiessaan. Voisi kuvitella, että merkkijonon T jokainen merkki on pakko käydä läpi vertailuissa. Näin ei kuitenkaan aina ole, vaan siitä voidaan usein hypätä yli osia. Tällainen on Boyer-Moore-algoritmi edeltä. 11. luku 586

28 11.3. Trie Nimi trie tulee sanasta retrieval, sillä rakenne on tärkeä tiedonhaussa (information retrieval). Kyseessä on puu, jonka solmut sisältävät merkkitietoa. Pääasialliset kyselyoperaatiot, joita trielle sovelletaan, ovat hahmon täsmääminen ja etuliitteen täsmääminen. Jälkimmäinen tarkoittaa merkkijonon X etsimistä joukon S merkkijonoista näiden alkuosana. Tarkastellaan ainoastaan standardi-trietä, joka on lähtökohta useimmiten käytännössä sovellettaville monimutkaisemmille, mutta tehokkaammin merkkejä tallettaville trie-rakenteille. 11. luku 587

29 Olkoon S aakkoston merkkijonojen joukko. Älköön lisäksi mikään merkkijono näistä ole jonkin toisen etuliite (prefix). Standardi-trie on tällöin puu T, jolla on ominaisuudet: Juurta lukuun ottamatta jokainen T:n solmu merkitään aakkoston merkillä. Sisäsolmun lapsisolmut järjestetään aakkostossa määritellyllä järjestyksellä. Puun T jokaiseen lehteen v liittyy S:n merkkijono. Polku juuresta lehteen v määrittää tähän liittyvän merkkijonon. Kun edellytettiin, ettei mikään S:n merkkijono ole toisen etuliite, jokainen S:n merkkijono liittyy yksikäsitteisesti T:n lehteen. Tarvittaessa tämä voidaan varmistaa liittämällä erikoismerkki, joka ei kuulu joukkoon. 11. luku 588

30 Trien sisäsolmulla voi olla mikä tahansa määrä lapsisolmuja väliltä 1 ja d, kun d on aakkoston koko. Ehtona on, että solmussa esiintyvä merkki on myös jossakin S:n merkkijonossa niin monentena, kuin se on myös kyseisellä polulla juuresta lehteen. Tällöin polku juuresta sisäsolmun v syvyydellä i vastaa S:n merkkijonon Xi-merkkistä etuliitettä X[0..i-1]. Jokaista merkkiä c kohti, joka voi seurata etuliitettä X[0..i-1] jossakin S:n merkkijonossa, on olemassa c:llä merkitty v:n lapsi. Kuvan 13.6 mukaisesti sisäsolmulla voi olla vain yksi lapsi, mutta enimmillään d lasta. Täten trie on monitiehakupuu. Kuvan puussa on useita yksilapsisia solmuja. Näitä perättäisiä yksisolmuisia voitaisiin yhdistää merkitsemällä solmuun useita merkkejä. Näin saataisiin tiivistetty trie, joka on tehokkaampi kuin standardi-trie. Tiivistettyä muotoa ei kuitenkaan tässä esitetä. 11. luku 589

31 b s e i u e t a l d l y l o r l l l c p Kuva Merkkijonojen {bear, bell, bid, bull, buy, sell, stock, stop} standardi-trie. k 11. luku 590

32 Standardi-triellä, jossa on d merkin aakkostosta kokoelman S s merkkijonoa kokonaispituudeltaan n, on ominaisuudet: T:n jokaisella sisäsolmulla on enintään d lasta. T:llä on s lehteä. T:n korkeus on yhtä kuin S:n pisimmän merkkijonon pituus T:n solmujen lukumäärä on O(n). Solmujen suhteen pahin tapaus esiintyy, kun ei millään kahdella merkkijonolla ole yhteistä (ei-tyhjää) etuliitettä, ts. jokaisella sisäsolmulla on ainoastaan yksi lapsi. 11. luku 591

33 Trietä voidaan käyttää sanakirjan toteutukseen avainten ollessa S:n merkkijonot. Haettaessa merkkijonoa X triestä T lähdetään juuresta ja edetään alas merkkien viitoittamaa polkua. Jos tällainen polku on olemassa triessä ja päädytään lopulta lehteen, X on sanakirjassa. Jos tällaista kokonaista polkua ei ole koko merkkijonolle eli se loppuu kesken merkkijonoa tultaessa (ennenaikaisesti) lehteen tai polun päättyessä sisäsolmuun, kyseinen merkkijono ei ole sanakirjassa. Esim. bull päättyy lehteen, joten se on Kuvan trien sana. Sen sijaan be, bee, bet, between, big tai buoy eivät ole tässä triessä. Merkkijonon haku triestä vaatii aikakompleksisuuden O(dm), jossa m on merkkijonon pituus, sillä enintään d merkin vertaamista tarvitaan kussakin solmussa. Joillekin aakkostoille vertaamisten määrää voidaan pudottaa arvoon O(log d) tai jopa O(1) käyttämällä merkkien talletukseen hajautustaulua. Kun yleensä d voidaan ajatella vakiona, voidaan pitäytyä ajatukseen, että kussakin solmussa tarvitaan aikaa O(d). 11. luku 592

34 Trie sopii erityisen hyvin sanojen täsmäämiseen, jossa selvitetään, vastaako annettu hahmo täsmällisesti jotakin tekstin sanaa. Tämä on rajoitetumpi tilanne kuin tavallinen hahmon täsmääminen, koska hahmo ei voi olla mielivaltaisesti yhdistetty merkkijono, vaan jokin tekstin sana tekstin ollessa esim. luonnollista kieltä. Yleisesti oli aikavaatimus O(dm) haettaessa sana triestä. Kun sana on esim. luonnollista kieltä tai DNAmerkkijono, joiden aakkoston koko on kiinnitetty eli vakio, kysely vaatii vain O(m). Kuvassa on esimerkki. Tehtäessä trie kukin S:n merkkijono lisätään kerrallaan. Mikään niistä ei ole toisten etuliite. Lisättäessä X triehen jäljitetään sitä vastaavaa polkua. Jäljitys päättyy sisäsolmuun v, joka on ennen merkkijonon X viimeistä merkkiä ja jonka mikään lapsi ei täsmää uuden merkkijonon seuraavan merkin kanssa. Luodaan tällöin uusi haara vastaamaan merkkijonon loppuja merkkejä. Yhden merkkijonon lisäys vaati ajan O(dm) ja S:n koko trien muodostaminen ajan O(dn), jossa n on S:n merkkijonojen kokonaispituus. 11. luku 593

35 s e e a b e a r? s e l l s t o c k! s e e a b u l l? b u y s t o c k! b i d s t o c k! b i d s t o c k! h e a r t h e b e l l? s t o p! (a) Kuva Standardi-trien sanan täsmääminen ja etuliitteen täsmääminen: (a) käsiteltävä teksti. 11. luku 594

36 b h s e i u e e t a l d l r l , 58 l 30 y 36 (b) 51, 62 Kuva (jatkoa) (b) Trie muodostettu (poistosanat, kuten artikkelit a ja the on suljettu pois epäsemanttisina ), kun lehtiin on lisätty sanojen alkukohtien indeksit. a r 69 e 0, luku 595 l l 12 c k o 17, 40 p 84

37 11.4. Hahmontäsmäys säännöllisten ilmauksien avulla Edellä esitetyt hahmontäsmäysalgoritmit olivat kaikki tarkoitetut ratkaisemaan ongelmia, joissa etsitään tekstistä määrättyä osajonoa, hahmoa. Monesti on tarvetta merkkijonojen etsimiseen, missä halutaan yleistä muotoa olevia hahmoja, ei ainoastaan yhtä määrättyä. Säännölliset ilmaukset (regular expressions) kuvaavat tällaisia yleisiä hahmoja. Säännölliset ilmaukset Säännölliset ilmaukset ovat yksinkertaisia, mutta tehokkaita käsitteitä kuvattaessa merkkijonojen mahdollisesti äärettömiä joukkoja, joita kutsutaan myös formaaleiksi kieliksi (formal language) yli annetun aakkoston. Säännöllisiä perusilmauksia määritellään kahdella säännöllä: 11. luku 596

38 1. Tyhjä on säännöllinen ilmaus, joka viittaa joukkon { }. Tämä sisältää ainoastaan tyhjän merkkijonon, jonka pituus on nolla. 2. Jokaisella symbolilla a joukosta on säännöllinen ilmaus, joka on joukko {a}. Seuraavilla kolmella säännöllä yhdistetään edeltävien perussääntöjen antamia ilmauksia uusien säännöllisten ilmausten luomiseksi: 1. Jos ja ovat säännöllisiä ilmauksia kuvaten joukot A ja B, ( + ) on säännöllinen ilmaus määrittäen joukon A B. 2. Jos ja ovat säännöllisiä ilmauksia kuvaten joukot A ja B, ( ) on säännöllinen ilmaus määrittäen kaikkien sellaisten merkkijonojen joukon, missä merkkijonot on muodostettu ottamalla merkkijono joukosta A ja katenoimalla se merkkijonoon joukosta B. 11. luku 597

39 3. Jos on säännöllinen ilmaus kuvaten joukon A, niin ( *) on säännöllinen ilmaus, joka kuvaa kaikkien sellaisten merkkijonojen joukon, jossa merkkijonot on muodostettu katenoimalla i merkkijonoa joukosta A (toistot sallimalla), kun i 0 (tapaus i = 0 tarkoittaa tyhjää merkkijonoa ). Tämä operaatio on joukon A Kleenen sulkeuma (Kleene closure). Kun halutaan käyttää tätä ilman tyhjää merkkijonoa, merkitään ( + ), missä on siis i 1. Aritmeettisten lausekkeiden tavoin säännöllisille ilmauksille voidaan määritellä presedenssi, jolloin sulkeet ovat poistettavissa, jos ne noudattavat presedenssiä. Kleenen sulkeumalla on suurin presedenssi. Sitä seuraa katenaatio, ja lopuksi operaatiolla + on matalin. Täten ilmaus ((ab) +(b*)) on sama kuin ab + b* ja ilmaus (((ab) +b)*) sama kuin(ab + b)*. 11. luku 598

40 Esim Säännölliset ilmaukset kykenevät esittämään yksinkertaisesti merkkijonojen joukkoja oheisten esimerkkien tapaan aakkoston ollessa {a, b}. 1. ab + b on joukon {ab, b} säännöllinen ilmaus. 2.(ab + ba)ba on joukon {abba, baba} säännöllinen ilmaus. 3. a* on joukon {, a, aa, aaa, aaaa, } säännöllinen ilmaus. 4.(a+b)* on aakkoston ={a,b} kaikkien merkkijonojen joukko. 5. a + b + on kaikkien sellaisten merkkijonojen joukon säännöllinen ilmaus, josssa katenaatiolla on yhdistetty merkkien a ja b muodostamat merkkijonot. 11. luku 599

41 6. b*(ab*a)*b* on kaikkien sellaisten merkkijonojen joukon säännöllinen ilmaus, jossa merkkejä a on parillinen määrä tai ei yhtään. Säännölliset ilmaukset ja äärelliset automaatit Halutaan määrätä, onko jokin merkkijono x säännöllisen ilmauksen kuvaamassa merkkijonojen joukossa. Jotta säännöllinen ilmaus voitaisiin esittää tehokkaalla tavalla, siitä muodostetaan abstrakti kone, jolla on helppo suorittaa merkkijonojen käsittelyä ja vastata alussa esitettyyn tehtävään. Muodostetaan äärellinen tila-automaatti eli lyhyemmin äärellinen automaatti (finite state automaton, FSA). Se on eräänlainen yksinkertainen laskentamalli säännöllisten formaalien kielten merkkijonojen täsmäämiseksi. 11. luku 600

42 Säännöllisen kielen (regular language) sanat vastaavat säännöllisten ilmauksien merkkijonoja. Äärellinen automaatti sisältää viisi osaa: 1. Tilojen (states) äärellinen joukko S (tilat numeroidaan luvusta 1 lukuun k). 2. Aakkosto. Tämä määrittelee merkit, joilla merkkijonot muodostetaan. 3. Alkutila (starting, initial state) q 1 S, joka määrittelee äärellisen automaatin alkukonfiguraation. 4. Lopputila (final state) q f S, joka on hyväksyvä konfiguraatio, kun äärellinen automaatti on tunnistanut merkkijonon täsmäävän määritellyn hahmon kanssa. 11. luku 601

43 5. Transitiofunktio (transition function), joka määrittelee äärellisen automaatin tilat. Näihin tiloihin siirrytään nykyisestä tilasta riippuen seuraavasta merkistä merkkijonossa. Seuraava merkki voi olla myös tyhjä. Transitiofunktio kuvaa parin (q,a), jossa q S on tila ja a { }, joukon S osajoukkoon. Tämä sisältää muut mahdolliset tilat, joihin voidaan siirtyä oltaessa tilassa q ja luettaessa a seuraavana merkkinä merkkijonosta (jos on a =, voidaan siirtyä johonkin mahdolliseen tilaan lukematta yhtään merkkiä tekstistä). Äärellinen automaatti esitetään suunnattuna graafina, jonka solmut ovat tiloja ja joukon { } symbolein eli merkein leimatut eli merkityt kaaret ovat transitioita. Jos on siis (q,a) = r, niin graafissa on suunnattu kaari tilasta q tilaan r (jokaiselle r S) ja kaari on merkitty merkillä a. Äärellinen automaatti hyväksyy (accepts) merkkijonon x, jos automaatti alkutilasta lähdettyään päätyy lopputilaan samalla, kun merkkijono x on prosessoitu merkeittäin vasemmalta oikealle siirtyen kulloinkin merkin määräämään tilaan prosessin aikana. 11. luku 602

44 Tilasiirtymät on tällöin tehty transitiofunktion mukaan ja myös -transitio on sallittu. Niinpä äärellinen automaatti hyväksyy merkkijonon x, jos automaatin graafista saadaan suunnattu polku alkusolmusta loppusolmuun prosessoitaessa x alusta loppuun. Tällöin x saadaan katenoimalla polun kaarien merkit. Kuvattu äärellisen automaatin toimintapa on epädeterministinen (nondeterministic), koska on useita laillisia polkuja, joita automaatti voi valita annetulle merkkijonolle x. Kun prosessi voi seurata vain määriteltyjä transitioita, epädeterministinen hyväksymissääntö merkitsee myös, että jos jokin polku johtaa tilaan q, josta ei ole määritelty transitiota merkkijonon x seuraavalle merkille, niin polku päätetään kesken - se ei voi johtaa lopputilaan. Jos ei ole laillista polkua lopputilaan (niitä voi olla useita), merkkijonoa x ei ole hyväksytty. Kuvassa on muutamia esimerkkejä äärellisistä automaateista. 11. luku 603

45 0 a a 1 b (a) b a b a (b) Kuva Esimerkkejä äärellisistä automaateista: (a) hyväksyy merkkijonot, joissa on parillinen määrä (tai ei yhtään) merkkejä a ja (b) hyväksyy merkkijonon aba. Lopputila on merkitty kaksoisympyränä. 11. luku 604

46 1 a 2 3 b 4 5 a b 6 a, b (c) Kuva (loppu) Esimerkkejä äärellisistä automaateista: (c) hyväksyy merkkijonot, jotka sisältävät osanaan merkkijonon aa tai bb. 11. luku 605

47 Säännöllisiä ilmauksia äärellisinä automaatteina toteutettuina käytetään tunnistamaan eli hyväksymään säännöllisiä (formaaleja) kieliä. Automaatille, joka toteuttaa säännöllisen ilmauksen ohella tätä vastaavaa säännöllistä (formaalista) kielioppia, syötetään merkkijono. Jos merkkijono on säännöllisen ilmauksen mukainen eli samalla säännöllisen kieliopin generoiman kielen sana (tai lause), automaatti hyväksyy merkkijonon. Tarkemmitta perusteluitta mainitaan lopuksi seuraavat lauseet. Lause Olkoot säännöllisen ilmauksen pituus m merkkiä ja merkkijonon x pituus n merkkiä. Se, onko x säännöllisen ilmauksen määrittämän säännöllisen kielen mukainen, on laskettavissa ajassa O(nm). Lause Olkoot merkkijono (teksti) Tnmerkkiä pitkä ja säännöllinen ilmaus m merkkiä pitkä. Säännöllisen ilmauksen määrittämän kielen mukainen osajono löydetään tai todetaan, ettei sellaista ole, ajassa O(nm). 11. luku 606

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

Lisätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

Automaatit. Muodolliset kielet

Automaatit. Muodolliset kielet Automaatit Automaatit ovat teoreettisia koneita, jotka käsittelevät muodollisia sanoja. Automaatti lukee muodollisen sanan kirjain kerrallaan, vasemmalta oikealle, ja joko hyväksyy tai hylkää sanan. Täten

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

8. Kieliopit ja kielet

8. Kieliopit ja kielet 8. Kieliopit ja kielet Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää siipiään" on kieliopillisesti

Lisätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

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

uv n, v 1, ja uv i w A kaikilla 2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015 TIEA24 Automaatit ja kieliopit, syksy 205 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 5. marraskuuta 205 Sisällys Käsiteanalyysiä Tarkastellaan koodilukkoa äärellisenä automaattina. Deterministinen äärellinen

Lisätiedot

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

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi Äärellisten automaattien ja säännöllisten kielten ekvivalenssi Osoitamme seuraavan keskeisen tuloksen: Lause 1.8: [Sipser Thm. 1.54] Kieli on säännöllinen, jos ja vain jos jokin säännöllinen lauseke esittää

Lisätiedot

Ei-yhteydettömät kielet [Sipser luku 2.3]

Ei-yhteydettömät kielet [Sipser luku 2.3] Ei-yhteydettömät kielet [Sipser luku 2.3] Yhteydettömille kielille pätee samantapainen pumppauslemma kuin säännöllisille kielille. Siinä kuitenkin pumpataan kahta osamerkkijonoa samaan tahtiin. Lause 2.25

Lisätiedot

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3 T-79.48 Tietojenkäsittelyteorian perusteet Tentti 25..23 mallivastaukset. Tehtävä: Kuvaa seuraavat kielet sekä säännölisten lausekkeiden että determinististen äärellisten automaattien avulla: (a) L = {w

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. tammikuuta 2012 Sisällys Sisällys Muistathan A B -konstruktion 0 k 1 i 2 s 3 s 4 a 5 0 k 1 o 2 i 3 r 4

Lisätiedot

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö Algoritmit 2 Luento 12 To 3.5.2018 Timo Männikkö Luento 12 Geneettiset algoritmit Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Algoritmit 2 Kevät 2018 Luento 12 To 3.5.2018 2/35 Algoritmien

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. tammikuuta 2012 Sisällys Sisällys Äärellisiä automaatteja PUSH ON PUSH OFF Q T Q J C C H S C,Q C,Q 0 50s 1e

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015 ja ja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho NFA:ksi TIETOTEKNIIKAN LAITOS 16. marraskuuta 2015 Sisällys ja NFA:ksi NFA:ksi Kohti säännöllisiä lausekkeita ja Nämä tiedetään:

Lisätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013 TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. toukokuuta 2013 Sisällys Chomskyn hierarkia (ja muutakin) kieli LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti

Lisätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

Luonnolliset vs. muodolliset kielet

Luonnolliset vs. muodolliset kielet Luonnolliset vs. muodolliset kielet Luonnollisia kieliä ovat esim. 1. englanti, 2. suomi, 3. ranska. Muodollisia kieliä ovat esim. 1. lauselogiikan kieli (ilmaisut p, p q jne.), 2. C++, FORTRAN, 3. bittijonokokoelma

Lisätiedot

Säännöllisten kielten sulkeumaominaisuudet

Säännöllisten kielten sulkeumaominaisuudet Säännöllisten kielten sulkeumaominaisuudet Osoitamme nyt, että säännöllisten kielten joukko on suljettu yhdisteen, konkatenaation ja tähtioperaation suhteen. Toisin sanoen jos A ja B ovat säännöllisiä,

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e) Tik-79.148 Kevät 2001 Tietojenkäsittelyteorian perusteet Laskuharjoitus 7 Demonstraatiotehtävien ratkaisut 1. Pinoautomaatti M = K Σ Γ s F missä K Σ s ja F on määritelty samalla tavalla kuin tilakoneellekin.

Lisätiedot

Turingin koneen laajennuksia

Turingin koneen laajennuksia Turingin koneen laajennuksia Turingin koneen määritelmään voidaan tehdä erilaisia muutoksia siten että edelleen voidaan tunnistaa tasan sama luokka kieliä. Moniuraiset Turingin koneet: nauha jakautuu k

Lisätiedot

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

Lisätiedot

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Tehtävä 2: Loppuosataulukko

Tehtävä 2: Loppuosataulukko Tehtävä 2: Loppuosataulukko Tutustu tarkoin seuraavaan tekstiin ja vastaa sitä hyväksi käyttäen tehtävän loppuosassa esitettyihin viiteen kysymykseen. Annetun merkkijonon (ns. hahmo) esiintymän haku pidemmästä

Lisätiedot

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut T-79.148 Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S tuottama

Lisätiedot

Tehtävä 2: Säännölliset lausekkeet

Tehtävä 2: Säännölliset lausekkeet Tehtävä 2: Säännölliset lausekkeet Kun tietokoneohjelmalla luetaan käyttäjän syötettä, olisi syöte aina syytä tarkistaa. Syötteessä voi olla vääriä merkkejä tai merkkejä väärillä paikoilla (syntaktinen

Lisätiedot

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 13. lokakuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 13.10.2016 klo 9:42 passed waiting redo submitters

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. syyskuuta 2016 Sisällys Neuvoja opintoihin tee joka päivä ainakin vähän uskalla mennä epämukavuusalueelle en

Lisätiedot

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return

Lisätiedot

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB Datatähti 2019 alku task type time limit memory limit A Kolikot standard 1.00 s 512 MB B Leimasin standard 1.00 s 512 MB C Taulukko standard 1.00 s 512 MB D Ruudukko standard 1.00 s 512 MB E Sanalista

Lisätiedot

Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria)

Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria) 1.6 Aakkostot, merkkijonot ja kielet Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria) 1011 Input Automaton Output Automaatin käsite

Lisätiedot

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013 TIEA24 Automaatit ja kieliopit, kesä 3 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 22. toukokuuta 3 Sisällys Äärellisiä automaatteja ON PUSH PUSH OFF Q T J Q C C H S C,Q C,Q 0 40 60 80 00, 70 90 Deterministinen

Lisätiedot

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko 9.5. Turingin kone Turingin kone on järjestetty seitsikko TM = (S, I, Γ, O, B, s 0, H), missä S on tilojen joukko, I on syöttöaakkosto, Γ on nauha-aakkosto, I Γ, O on äärellinen ohjeiden joukko, O S Γ

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

Säännöllisen kielen tunnistavat Turingin koneet

Säännöllisen kielen tunnistavat Turingin koneet 186 Säännöllisen kielen tunnistavat Turingin koneet Myös säännöllisen kielen hyväksyvien Turingin koneiden tunnistaminen voidaan osoittaa ratkeamattomaksi palauttamalla universaalikielen tunnistaminen

Lisätiedot

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin? 2013-2014 Lasse Lensu 2 Algoritmit ovat deterministisiä toimintaohjeita

Lisätiedot

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 24. toukokuuta 2013 Sisällys Formaalit kielet On tapana sanoa, että merkkijonojen joukko on (formaali) kieli. Hieman

Lisätiedot

Yhteydettömän kieliopin jäsennysongelma

Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). Ongelma voidaan periaatteessa

Lisätiedot

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)).

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)). Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)). Esimerkkejä: Σ koostuu kaikista aakkoston Σ merkkijonoista ja

Lisätiedot

Chomskyn hierarkia ja yhteysherkät kieliopit

Chomskyn hierarkia ja yhteysherkät kieliopit Chomskyn hierarkia ja yhteysherkät kieliopit Laskennan teorian opintopiiri Tuomas Hakoniemi 21. helmikuuta 2014 Käsittelen tässä laskennan teorian opintopiirin harjoitustyössäni muodollisten kielioppien

Lisätiedot

Yhteydettömät kieliopit [Sipser luku 2.1]

Yhteydettömät kieliopit [Sipser luku 2.1] Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli

Lisätiedot

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan?

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? 2012-2013 Lasse Lensu 2 Ihmisen, eläinten ja kasvien hyvinvoinnin kannalta nykyaikaiset mittaus-,

Lisätiedot

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista Antti-Juhani Kaijanaho 15. maaliskuuta 2012 1 Apumääritelmä Määritelmä 1. Olkoon Σ merkistö, jolla on olemassa täydellinen järjestys ( ) Σ 2.

Lisätiedot

Muodolliset kieliopit

Muodolliset kieliopit Muodolliset kieliopit Luonnollisen kielen lauseenmuodostuksessa esiintyy luonnollisia säännönmukaisuuksia. Esimerkiksi, on jokseenkin mielekästä väittää, että luonnollisen kielen lauseet koostuvat nk.

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

1. Universaaleja laskennan malleja

1. Universaaleja laskennan malleja 1. Universaaleja laskennan malleja Laskenta datan käsittely annettuja sääntöjä täsmällisesti seuraamalla kahden kokonaisluvun kertolasku tietokoneella, tai kynällä ja paperilla: selvästi laskentaa entä

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä polynomisista ja ei-polynomisista ongelmista Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia

Lisätiedot

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu 832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M :=

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M := ICS-C2000 Tietojenkäsittelyteoria Luento 5: Säännöllisten kielten pumppauslemma; yhteydettömät kieliopit Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Alue ja aiheet: Orposen prujun

Lisätiedot

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 581336 Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja 1. S! axc X! axc X! by c Y! by c Y! " 2. (a) Tehtävänä on konstruoida rajoittamaton kielioppi, joka tuottaa kielen f0 n 1 n jn 1g. Vaihe1: alkutilanteen

Lisätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria

ICS-C2000 Tietojenkäsittelyteoria ICS-C2000 Tietojenkäsittelyteoria Luento 5: Säännöllisten kielten pumppauslemma; yhteydettömät kieliopit Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Kevät 2016 Alue ja aiheet: Orposen

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 62 Luku 2 Yhtenäisyys 2.1 Polku 2.2 Lyhin painotettu polku 2.3 Yhtenäinen graafi 2.4 Komponentti 2.5 Aste

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 31.1.-1.2.2018 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka tutkii onko kokonaisluku tasan jaollinen jollain toisella kokonaisluvulla siten, että ei käytetä lainkaan jakolaskuja Jaettava

Lisätiedot

5.3 Ratkeavia ongelmia

5.3 Ratkeavia ongelmia 153 5.3 Ratkeavia ongelmia Deterministisen äärellisten automaattien (DFA) hyväksymisongelma: hyväksyykö annettu automaatti B merkkijonon w? Ongelmaa vastaava formaali kieli on A DFA = { B, w B on DFA,

Lisätiedot

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut T-79.1001 Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut Lemma (Säännöllisten kielten pumppauslemma). Olkoon A säännöllinen kieli. Tällöin on olemassa n 1

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen

Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen suhteen, eli jos kielet A ja B ovat säännöllisiä, niin myös A B on. Tätä voi havainnollistaa seuraavalla kuvalla: P(Σ ) Säännölliset

Lisätiedot

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4

Lisätiedot

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja 582206 Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja 1. Esitä tilakaaviona NFA N = (Q, Σ, δ, q 0, F ), missä Q = { q 0, q 1, q 2, q 3, q 4, q 5, q 6, q 7 }, Σ = { a, b, c }, F = { q 4 } ja δ on

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku

Lisätiedot

13 Lyhimmät painotetut polut

13 Lyhimmät painotetut polut TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien

Lisätiedot

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

Pysähtymisongelman ratkeavuus [Sipser luku 4.2] Pysähtymisongelman ratkeavuus [Sipser luku 4.2] Osoitamme nyt vihdoin, että jotkin Turing-tunnistettavat kielet ovat ratkeamattomia ja jotkin kielet eivät ole edes Turing-tunnistettavia. Lisäksi toteamme,

Lisätiedot

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä

Lisätiedot

Tarkennamme geneeristä painamiskorotusalgoritmia

Tarkennamme geneeristä painamiskorotusalgoritmia Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi

Lisätiedot

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja 582206 Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja 1. Seuraavissa laskennoissa tilat on numeroitu sarakkeittain ylhäältä alas jättäen kuitenkin hyväksyvä tila välistä. Turingin koneen laskenta

Lisätiedot

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015 TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free

Lisätiedot

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Output. Input Automaton

Output. Input Automaton 16 Aakkostot, merkkijonot ja kielet Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria) 1011 Input Automaton Output Automaatin käsite

Lisätiedot

9. Matemaattisista koneista.

9. Matemaattisista koneista. 9. Matemaattisista koneista. Monia tietojenkäsittelytehtäviä, digitaalisia komponetteja, ohjelmia jne. voidaan mallintaa äärellistilaisella matemaattisella koneella. Matemaattinen kone on myös tietojenkäsittelijän

Lisätiedot