Forsr: Vkommn Dino Karabg, Stin Krogdah, Pttr Kristiansn dino@ifi.uio.no stinkr@ifi.uio.no pttkr@ifi.uio.no Gruppærr: Vkommn Dg? post@studnt.matnat.uio.no Lærbok: Agorithms: Squntia, Para, and Distributd, Knnth A. Brman and Jrom L. Pau. Ti sags i bokhandn. (Sørg for å få boka md copyright 2005.) Obigr: Tr stykkr, som må godkjnns. Andr, «næriggnd» kurs: INF-MAT 3370 Linær optimring INF-MAT 5360 Matmatisk optimring Kvaittssikring vd Ifi Undrvisningspan Som studnt har du rtt og pikt ti å bidra ti kvaittssikringn av studit ditt. Dtt gjør du først og frmst gjnnom å dta i undrvisningsvauring. Fagærr vi ta initiativ ti å stt i gang undrvisningsvauringn for hvrt nkt mn. Undrvisningsvauringn gir dg muight ti å komm md tibakmdingr og innspi på undrvisningn i øpt av smstrt, sik at forbdringr kan gjørs undrvis. 27/08 pk Søking i strngr (kap. 20) 03/09 pk Dynamisk programmring (kap. 9) 10/09 sk Fyt / matching (kap. 14) 17/09 dk Kompksittstori (introduksjon, ubrgnbarht) 24/09 dk Kompksittstori (umdgjøright, g NP-kompttht) 01/10 08/10 Du finnr mr informasjon om dtt på hovdsidn ti Institutt for informatikk, undr Annt Kvaittssikring, t ik i r vd å føg dnn inkn: http://www.ifi.uio.no/studinf/kvaittssikring/studntr. 12/12 Eksamn (09:00, 3 timr, std ikk fastsatt)
Søking i strngr Dfinisjonr Vanig søkagoritmr (on-in-søk) Prfiks-søking Naiv agoritm Knuth-Morris-Pratt-agoritmn Suffiks-søking Boyr-Moor-agoritmn Hash-basrt Et afabt r n mngd symbor A = {a 1, a 2,, a k }. En strng S = S[0:n-1] av ngd n r n skvns av symbor fra A. (Vi kan s på strngn S båd som t array S[0:n-1] og som n skvns av symbor S=s 1 s 2 s n-1.) Indksring av tkst Datastrukturr Tri-trær Suffiks-trær 0 1 2 n -1 (Tkst) P [0:m -1] (Pattrn) Søkr forovr Vindu Naiv agoritm Naiv agoritm 0 1 2 n -1 0 1 2 n-m n -1 P [0:m -1] P [0:m -1] function NaivStringMatchr (P [0:m -1], ) for s 0 to n - m do } if T [s :s + m -1] = P thn}for-økka kskvrs n m + 1 gangr. rturn(s) Hvr sjkk innti m symbosammnikningr. }O(nm) kjørtid (worst cas) ndfor rturn(-1) nd NaivStringMatchr
Knuth-Morris-Pratt-agoritmn Knuth-Morris-Pratt-agoritmn Dt r, agoritmtortisk stt, rom for forbdringr av dn naiv agoritmn. Dn fyttr vindut/pattrnt bar tt hakk i hvrt stg. Kan vi kanskj fytt mr nn bar tt stg? 0 0 1 0 0 1 0 0 2 0 2 i - d j i 0 0 1 0 0 1 0 0 2 0 2 1 j -1 j 0 j -2 j j - d j d j d j r ngdn av ngst suffix av P [1 : j -1] som også r prfix av P [0 : j -2] Vi vt nå at vi kan fytt P j - d j stg. Og vi vt at P [0 : d j -1] matchr T, så vi kan start å sammnikn md P [d j : m-1]. function KMPStringMatchr (P [0:m -1], ) i 0 // indks i T j 0 // indks i P CratNxt(P [0:m -1], Nxt [n -1]) whi i < n do if P [ j ] = T [ i ] thn if j = m 1 thn rturn(i m +1) j j + 1 s j Nxt [ j ] if j = 0 thn if T [ i ] P [0] thn ndwhi rturn(-1) nd KMPStringMatchr Knuth-Morris-Pratt-agoritmn O(n) Knuth-Morris-Pratt-agoritmn function CratNxt (P [0:m -1], Nxt [0:m -1]) Nxt [ 0 ] Nxt [ 1 ] 0 i 2 j 0 whi i < m do if P [ j ] = P [ i -1] thn Nxt [ i ] j +1 j j +1 s if j > 0 thn j Nxt [ j ] (Trykkfi i boka) s Nxt [ i ] 0 ndwhi nd CratNxt
Knuth-Morris-Pratt-agoritmn Boyr-Moor-agoritmn (Horspoo) Dn naiv agoritmn, og Knuth-Morris-Pratt r prfiksbasrt (fra vnstr mot høyr). Boyr-Moor-agoritmn (og variantr) r suffiksbasrt (fra høyr mot vnstr). 0 0 1 0 0 1 0 0 2 0 2 B M m a t c h r _ s h i f t x Linær agoritm, O(n) kjørtid worst cas. Boyr-Moor-agoritmn (Horspoo) Dn naiv agoritmn, og Knuth-Morris-Pratt r prfiksbasrt (fra vnstr mot høyr). Boyr-Moor-agoritmn (og variantr) r suffixbasrt (fra høyr mot vnstr). B M m a t c h r _ s h i f t x function HorspooStringMatchr (P [0:m -1], ) i 0 CratShift(P [0:m -1], Shift [ A - 1]) whi i < n m do j m 1 whi j 0 and T [ i+j]=p [ j ] do j j -1 ndwhi if j = 0 thn rturn( i ) i i + Shift[ T[i+m -1] ] ndwhi rturn(-1) nd HorspooStringMatchr Boyr-Moor-agoritmn (Horspoo) O(mn) kjørtid worst cas (som dn naiv agoritmn). Sub-inær ( n) i gjnnomsnitt O(n og A m / m).
Vi antar at strngn vår kommr fra t k-ært afabt A = {0, 1, 2,, k -1}. Hvrt symbo i A kan ss på som t siffr i k-tassystmt. Hvr strng S i A* kan ss på som ta S i k-tassystmt. Eks: k = 10, og A = {0,1, 2,, 9} (Dt vanig 10-tassystmt) Strngn 6832355 kan ss på som tat 6 832 355. Gitt n strng P [0:m -1], kan vi brgn dt korrspondrnd tat md m mutipikasjonr og m addisjonr (Hornrs rg): Gitt n tkststrng, og t hta s (start-indx), brukr vi T s som btgns på dstrngn T [s: s + m -1]. (Vi antar at pattrnt vårt har ngd m.) ) En agoritm basrt på Hornrs rg brgnr T 0, T 1, T 2, og sammniknr diss tan md tat P for pattrnt P. (Tisvarnd dn naiv agoritmn.) Gitt T s -1 og k m 1, kan vi rgn ut T s i konstant tid.! P = P [m -1] + k(p [m -1] + k(p [m -2] + + k(p [1] + kp [0])...)) Eks: 1234 = 4 + 10(3 + 10(2 + 10*1)) 0 1 2 s-1 s s + m -1 n -1 T s Grunnn ti at vi kan brgn T s i konstant tid når vi har T s -1 og k m 1, r føgnd rkurrnsrasjon: T s = k(t s -1 - k m 1 *T [s]) + T [s+m] s = 1,, n m Konstant, brgns n gang, kan gjørs i tid O(og m) Eks: k =10 10, A = {0,1, 2,, 9} (Dt vanig 10-tassystmt) og m =7 7. T s -1 = 7937245 T s = 9372458 T s = 10(7937245 (1000000 * 7)) + 8 Kan brgn T s i konstant tid når vi har T s -1 og k m 1. Atså kan vi brgn d n m + 1 tan T s, s = 0, 1,, n m og P i tid O(n). Vi kan atså, i torin, impmntr n søkagoritm md kjørtid O(n). Dssvrr vi tan T s og P i praksis vær for stor ti at agoritmn bir praktisk anvndbar. Trikst r å bruk moduo-aritmtikk. Vi gjør a brgningr moduo q (q t tifdig vagt primta, sik at kq akkurat passr i t 32/64 bits rgistr). Kan gjørs i konstant tid. Bar mutipikasjon og addisjon, vi antar diss oprasjonn kan gjørs i konstant tid.
Vi brgnr T (q) s og P (q), hvor T (q) s = T s mod q, P (q) = P mod q, } og sammniknr. Rstn i divisjonn, når vi dr på q: t ta i intrvat {0, 1,, q -1}. Vi kan ha T (q) T s = P (q) P, sv om T s P, n såkat spuriøs match. Har vi T (q) s = P (q), må vi atså gjør n nøyaktig sjkk av T s og P. Md stor nok q, r sannsynightn for spuriøs matchr av. function KarpRabinStringMatchr (P [0:m -1],, k, q) c k m -1 mod q P (q) 0 T (q) s 0 for i 1 to m do P (q) (k * P (q) + P [ i ]) mod q T (q) 0 (k * T (q) 0 + T [ i ]) mod q ndfor for s 0 to n - m do if s > 0 thn T (q) s (k * ( T (q) s -1 -T[ s ] * c) + T [ s + m ]) mod q if T (q) ) s = P (q) ) thn if T s = P thn rturn(s) ndfor rturn(-1) nd KarpRabinStringMatchr Lngst kjørtid for får vi når pattrnt P finns ht i suttn av strngn T. Sannsynightn for at T (q) s antar n spsifikk vrdi i intrvat {0, 1,, q-1} r uniform 1/q. (Vi antar strngn r uniformt fordt.) T (q) s, s = 0, 1,, n-m-1 vi atså gi opphav ti n spuriøs match md sannsynight 1/q. q La r vær dt forvntd anta spuriøs matchr. Hvr av diss innbærr innti m sammnikningr. I tigg må vi sjkk T (q) T n-m, hvor vi får match. Kjørtidn bir atså: (r + 1)m + (n m + 1) r r n binomiafordt i t stokastisk ti k variab. (Hvr skift r t forsøk, md suksssansynight 1/q, og vi gjør n-m forsøk) [Nå ansr vi spuriøs matchr som suksss ] E[r] = (n-m)/q. (Forvntning av binomiafordt variab.) n m + m q Totat får vi atså 1 + ( + 1) n m Forvntt kjørtid når matchn finns ht ti sutt i T. Hvis q < C, hvor C r n konstant, bir kjørtidn O(nm). MEN dt r rimig å anta q >> m, da bir kjørtidn O(n).
Tri-trær Tri-trær a i w Trykkfi i boka n o g o t b r a intr w r i t h m a n r t v w d gorithm n viw b ord ay t y Suffix-trær Div. Suffix tr for babbag a b g bbag g a bag bbag g