Merkkjonot (strngs) n merkkä ptkä merkkjono : T T T G T n = 18 kukn merkk [], mssä 0 < n, kuuluu aakkostoon Σ, jonka koko on Σ esm. bttjonot: Σ = {0,1} ja Σ = 2, DN: Σ = {,T,,G} ja Σ = 4 tetokoneen aakkosto (merkstökoodaus): perntesest SII (mm. /++:n char), nykyään Uncode (mm. Java:n char) Tetorakenteet, syksy 2007 1 Merkkjonot (strngs) [..j] on loppulte (suffx), jos j = n 1 j T T T G T Merkkjonojen =[0..n-1] ja B=B[0..m-1] katenaato: peräkkän lttämnen (concatenaton): B=B[0..n+m-1] = [0..n-1]B[0..m-1] 0 1 2 3 = B = B = 5 6 7 8 G T G T Tetorakenteet, syksy 2007 3 Merkkjonot (strngs) Merkkjonon osamerkkjono [..j]: j T T T G T merkkjonon merkt ndeksstä ndeksn j = [0..n-1] el oman tsensä osamerkkjono [..j] on ato (proper), jos [..j] [..j] on etulte (prefx), jos = 0 j T T T G T Tetorakenteet, syksy 2007 2 Merkkjonohaku (strng matchng) Merkkjonohaku: annettu hahmo [0..m-1], tekst T[0..n-1] tehtävä: tutk esntyykö hahmo tekstssä T onko olemassa sellanen ndeks, jossa T[..+m-1] = = T = T T T G T :n esntymä Tetorakenteet, syksy 2007 4
Raa an voman (brute-force) merkkjonohaku Nav (brute-force) merkkjonohaku: T T T G T verrataan hahmoa kuhunkn mahdollseen esntymskohtaan tekstssä tekstnkohtaa ja hahmoa verrataan merkkpar kerrallaan jos merkkpar e täsmää el hahmo e esnny nykykohdassa, srretään hahmoa tekstssä askel eteenpän ja yrtetään uudelleen Tetorakenteet, syksy 2007 5 Raa an voman (brute-force) merkkjonohaku Nav (brute-force) merkkjonohaku: T T T G T hahmo täsmäs kohdassa = 11: Tetorakenteet, syksy 2007 7 Raa an voman (brute-force) merkkjonohaku Nav (brute-force) merkkjonohaku: T T T G T Tetorakenteet, syksy 2007 6 Raa an voman (brute-force) merkkjonohaku T T T G T Työn määrä pahmmassa tapauksessa? kokeltava kohta n m + 1= O(n) kussakn kohdassa pahmmllaan m merkkvertalua El haun kokonastyö pahmmassa tapauksessa O(n) O(m) = O(mn) Tetorakenteet, syksy 2007 8
Raa an voman (brute-force) merkkjonohaku T T T G T Työn määrä keskmääräsessä tapauksessa? tyypllnen (epätarkka) oletus: kahden merkn täsmäyksen todennäkösyys = 1 Σ todennäkösyys tehdä k peräkkästä täsmäävää merkkvertalua: = 1 Σ k erlasa m-merkn vertalukohta q = Σ m Raa an voman (brute-force) merkkjonohaku T T T G T 1 Σ k q erlasta vertalukohtaa, jossa tehdään k. peräkkänen täsmäys kakken erlasten kohten kästtely: täsmätään Σ m k=1 (q 1 Σ k ) merkkpara keskarvo: em. lukumäärä jaettuna arvolla q: Σ m k=1 ( 1 Σ k ) Σ m k=1 ( 1 2 k ) = 1 1 2 m = O(1) El akavaatvuus keskmäärn O(n) O(1) = O(n) Tetorakenteet, syksy 2007 9 Knuth-Morrs-ratt (KM) KM algortm: hyödynnetään tetoa stä, mkä tekstn osa on jo täsmännyt hahmon osan kanssa T T T G T f(x): psn etultteen [0..x] ato loppulte, joka myös [0..x]:n alkulte (f(x) = ptuus) y x loppuosa 0 x-y alkuosa f(x) = x y + 1 [y..x] = [0..x-y] Tetorakenteet, syksy 2007 11 Tetorakenteet, syksy 2007 10 Knuth-Morrs-ratt (KM) T y j-1 j loppuosa 0 j-y-1 alkuosa T[-j...-1] = [0..j-1] j f(j-1) = j y [y..j-1] = [0..j-y-1] = T[-(j-y)..-1] KM:n peraate verrattaessa merkkejä T[] ja [j]: esoletus: täsmäys T[-j..-1] = [0..j-1] on maksmaalnen jos T[] [j], pävtetään j f(j-1), jollon täsmäys T[-j..-1] = [0..j-1] on seuraavaks psn mahdollnen jos T[] = [j], on löydetty maksmaalnen täsmäys T[-j..] = [0..j] Tetorakenteet, syksy 2007 12
Knuth-Morrs-ratt (KM) T T T G T merkt T[] ja [j] evät täsmää (j = 3) tomnta kun brute-force algortmlla, mutta hahmon eteenpän srto: srrytään seuraavaan kohtaan, jossa hahmon alkuosa ja jo täsmätyn tekstnosan loppuosa täsmäävät el jos T[] [j], seuraava vertalu merkken T[] ja [f(j 1)] välllä (pats jos j = 0, srrytään askel eteenpän ja verrataan seuraavaks merkkejä T[ + 1] ja [0]) Tetorakenteet, syksy 2007 13 Knuth-Morrs-ratt (KM) T T T G T Työn määrä merkkvertalujen lukumäärä Kukn merkk T[] vo olla mukana täsmäävässä vertalussa korkentaan kerran täsmäävä vertaluja yhteensä O(n) Tetorakenteet, syksy 2007 15 Knuth-Morrs-ratt (KM) T T T G T T[] [j] ja f(j-1) = f(2) = 1, kun = 3, j = 3 T[6] [4], nyt f(j-1) = f(3) = 0 T[6] [0], joten askel eteenpän T[10] [4], f(j-1) = f(3) = 1 T[10] [1], f(0) = 0 T[6] [0], askel hahmo löyty: Kuvan värt: snnen: täsmätty krjan, vhreä: funkton f pohjalta täsmääväks tedetty alkuosa, e verrata uudelleen, punanen: epätäsmäys Tetorakenteet, syksy 2007 14 Knuth-Morrs-ratt (KM) T T T G T Jos vertalu T[] [j] ja j > 0 aemmn täsmätty [0..j 1] = T[-j..-1] verrataan seuraavaks T[] [f(j 1)] selväst f(j 1) j 1 < j, joten vmestään j epätäsmäyksen päästä vuorossa [0] j täsmäystä, korkentaan j epätäsmäystä tämä vertalutapaus korkentaan O(n) kertaa Tetorakenteet, syksy 2007 16
Knuth-Morrs-ratt (KM) T T T G T Epätäsmäävä vertaluja merkn T[] kohdalla? Jos vertalu T[] [0], epätäsmäyksen jälkeen asetetaan + 1 tämä vertalutapaus korkentaan O(n) kertaa Yhteenveto: Knuth-Morrs-ratt algortmn vertalujen lukumäärä ja ss akavaatvuus = O(n) Tetorakenteet, syksy 2007 17 Knuth-Morrs-ratt (KM) Funkton f alustus? sovelletaan Knuth-Morrs- ratt algortma tekstn [1..m 1] KM:n sääntö: onnstuneen vertalun T[] = [ + 1] = [j] jälkeen täsmäys T[-j..] = [+1-k...+1] = [0..j] on maksmaalnen el tedetään, että f( + 1) = j + 1 f( + 1) = 0, jos mllään j e tehdä täsmäystä T[] = [ + 1] = [j] f(0) = 0, ja muut arvot f(j) lasketaan, ennen kun KM käyttää ntä (koska ana + 1 > j) Tetorakenteet, syksy 2007 18 Knuth-Morrs-ratt (KM) = T 5 6 T = [1..m-1] T T T T T T T T T 5 alustus f(0) 0 f(1) 1, stten j f(0) = 0 f(2) 0, stten + 1 f(3) 1, f(4) 2 f(5) 3, f(6) 4 Funkton f alustuksen työmäärä? O(m), kun hahmon ptuus m Tetorakenteet, syksy 2007 19