Čas 3: Sravnjivanje niski (string matching) 1.Naivni algoritam za sravnjivanje niski 2.Konačni automat za sravnjivanje niski 3.Sufiksna stabla 4.Primena sufiksnih stabala 5.Bojer-Murov algoritam izvor: Algoritmic Aspects of Bioinformatics H.J.Böckenhauer,D.Bongartz,poglavlje 4
SRAVNJIVANJE NISKI Data je proizvoljna azbuka Σ. Problem uparivanja stringova definiše se na sledeći način: Ulaz: dva stringa nad Σ, t=t 1...t n (tekst) i p=p 1...p m (obrazac) Izlaz: Skup svih pozicija u stringu t gde počinje pojavljivanje stringa p
NAIVNI ALGORITAM Velika složenost O(m(n-m)) za tekst dužine n i obrazac dužine m Poboljšanja: preprocesiranje teksta ili obrasca uštedeti poređenja korišćenjem strukture stringa
KONAČNI AUTOMATI - PODSEĆANJE Konačni automat je torka M=(Q,Σ,q 0,d,F) gde je: Q konačan skup stanja Σ azbuka q 0 Q početno stanje F Q skup završnih stanja d: Q x Σ -> Q funkcija prelaska Proširenje funkcije prelaska d na skup Σ*: d : Q * d( q, ) q Q d ( q, xa) d ( d ( q, x), a) q Q, a, x *
KONAČNI AUTOMAT ZA UPARIVANJE STRINGOVA Korak1: konstrukcija automata koji propušta tekstove koji se završavaju datim obrascem DKA za obrazac aba
FUNKCIJA PRELASKA
KONAČNI AUTOMAT Kako implementirati funkciju prelaska? Ideja: za obrazac p dužine m definisati m+1 stanja koja su povezana karakterima obrasca; iz svakog stanja, pored postojećih pravila prelaska dodati još po jedno pravilo prelaska za svaki karakter azbuke Σ koji nedostaje; završno stanje za svako dodatno pravilo određujemo na osnovu strukture uopštenog preklapanja dve niske
KONAČNI AUTOMAT ZA UPARIVANJE STRINGOVA UOPŠTENO PREKLAPANJE Neka su s i t stringovi nad azbukom Σ. Ako postoje stringovi x,y i z iz Σ* takvi da: 1. s=xy 2. t=yz 3. y je maksimalna Tada y zovemo uopštenim preklapanjem stringova s i t označavamo sa Ov( s, t), a dužinu preklapanja sa ov( s, t) Napomena: String s može biti podstring stringa t, i obrnuto t može biti podstring stringa s. Odnosno x ili z mogu biti jednaki (prazna niska). Kod standardnog preklapanja Ov(s,t), to nije dopušteno!
PRIMERI STANDARDNOG I UOPŠTENOG PREKLAPANJA aba sa aabb aba aabb abb sa aba aabb aba aabb sa aabb standardno: uopšteno: aabb aabb x=z= aabb aabb
KONAČNI AUTOMAT ZA UPARIVANJE STRINGOVA Ideja: definisati pravilo prelaska na sledeći način: za svako q Q i svako s d ( q, s) ov( p... p s, p) 1 q
KONAČNI AUTOMAT ZA UPARIVANJE STRINGOVA { a, b}, p " aba ", Q {0,1,2,3} q 0 s a Ov( a, aba) " a ", ov( a, aba) 1 s b Ov( b, aba) "", ov( b, aba) 0 q 1 s a Ov( aa, aba) " a ", ov( aa, aba) 1 s b Ov( ab, aba) " ab", ov( ab, aba) 2 q 2 s a Ov( aba, aba) " aba ", ov( aba, aba) 3 s b Ov( abb, aba) "", ov( abb, aba) 0 q 3 s a Ov( abaa, aba) " a ", ov( aba, aba) 1 s b Ov( abab, aba) " ab", ov( abb, aba) 2
PRIMER ZA BABABAA
ALGORITAM: SRAVNJIVANJE STRINGOVA PREKO KONAČNOG AUTOMATA Konstruisati konačni automat za string p=p 1...p m (obrazac) t=t 1...t n (tekst) i Propuštati karaktere teksta t=t 1...t n redom kroz konačni automat; ako se nakon karaktera t i automat dođe do završnog stanja, to znači da je obrazac p sufiks datog prefiksa t 1...t i obrazac počinje od indeksa i-m+1
PRIMER Izgraditi konačni automat nad obrascem gcagagag i pronaći sva njegova pojavljivanja u tekstu gcatcgcagagagtatacagtacg
SUFIKSNA STABLA - PRIMER Sufiksno stablo za tekst t=dabdac
SUFIKSNA STABLA Prosto sufiksno stablo za tekst t=t 1 t n je usmereno stablo T t =(V,E) sa korenom r koje zadovoljava sledeće uslove: 1. Ima tačno n listova označenih sa 1,...,n 2. Grane su označene simbolima iz S 3. Sve izlazne grane iz unutrašnjih čvorova su označene međusobno različitim simbolima 4. Putanja od korena do lista i se obeležava t i...t n
SUFIKSNA STABLA Prosta sufiksna stabla postoje za tekst t ako i samo ako nijedan njegov sufiks nije prefiks nijednog njegovog drugog sufiksa npr abab nije ispunjen uslov jedinstvenosti (3) Rešenje: simbol $ na kraju
PRIMER: SUFIKSNO STABLO ZA A 3 B 3 C
KOMPAKTNO SUFIKSNO STABLO Kompaktno sufiksno stablo za tekst t=t 1 t n je usmereno stablo T t =(V,E) sa korenom r koje zadovoljava sledeće uslove: 1. Ima tačno n listova označenih sa 1,...,n 2. Svaki unutrašnji čvor stabla T t ima bar dva potomka 3. Grane su označene podstringovima teksta t; svaki podstring dužine k je predstavljen početnom i krajnjom pozicijom u t ako važi k>=2log(n- Σ ), gde je k dužina oznake grane 4. Sve izlazne grane iz unutrašnjih čvorova počinju međusobno različitim simbolima 5. Putanja od korena do lista i se obeležava t i...t n
KOMPAKTNO SUFIKSNO STABLO ZA A 3 B 3 C
PRIMENE SUFIKSNIH STABALA 1. Traženje šablona u nizu tekstova npr traženje svih DNK sekvenci u datoj bazi podataka koji sadrže određeni DNK fragment (uopštena sufiksna stabla) 2. Traženje najdužeg zajedničkog podstringa za niz stringova npr najduži zajednički podstring za nekoliko srodnih sekvenci DNK pokazuje značajan deo DNK 3. Efikasno traženje preklapanja parova stringova u nizu stringova DNK sekvencioniranje 4. Traženje ponavljajućih sekvenci traženje takvih motiva u DNK sekvencama
TRAŽENJE OBRASCA U NIZU TEKSTOVA Ideja: Ako su dati tekstovi t 1,...,t n, konstruisati kompaktno sufiksno stablo za tekst t 1 $ 1 t 2 $ 2...t n $ n Ovo stablo sadrži sufikse tekstova t 1,...,t n u putanjama, ali se sufiksi tekstova t 1,...,t n-1 ne završavaju u listovima stabla; treba ga popraviti tako da taj uslov bude ispunjen: Završni simboli $ i pojavljuju se samo u oznakama grana koje vode do listova => za svaku granu koja vodu do lista, njenu oznaku možemo skratiti do simbola $ i Oznake listova promeniti tako da označavaju i tekst u kome je obrazac, i početak njegovog pojavljivanja
ZADATAK Konstruisati uopšteno sufiksno stablo za tekstove t 1 =aba i t 2 =ab
TRAŽENJE NAJDUŽEG ZAJEDNIČKOG PODSTRINGA Ideja: konstruisati uopšteno sufiksno stablo za string t 1 $ 1 t 2 $ 2...t n $ n Svakom unutrašnjem čvoru v pridružiti dve oznake: 1. Skup M {1,,N} gde i M ako od unutrašnjeg čvora v postoji grana do lista (i,j) za proizvoljno j 2. Dubinu čvora t koja predstavlja dužinu oznake putanje od korena do čvora t Najduži zajednički podstring je oznaka putanja od korena do unutrašnjeg čvora čiji je skup M= {1,,N}, a koji ima najveću dubinu od svih takvih čvorova
ZADATAK Naći najduži zajednički podniz za stringove t 1 =bcabcac t 2 =aabca t 3 =bcaa
TRAŽENJE STANDARDNOG PREKLAPANJA Govorimo o standardnom preklapanju koje se u odnosu na uopšteno preklapanje razlikuje za dodatni uslov da x i z ne smeju biti 1. Konstruisati uopšteno sufiksno stablo za string t 1 $ 1 t 2 $ 2...t n $ n 2. Svakom unutrašnjem čvoru v pridružiti dve oznake: 1) Skup L {1,,N} gde i L ako od unutrašnjeg čvora v postoji grana sa oznakom $ i 2) Dubinu čvora v (depth(v)) koja predstavlja dužinu oznake putanje od korena do čvora t
3. Za svaki string t j preklapanja sa ostalim stringovima se računaju na sledeći način: za j=1,..., N x := koren dokle god je x unutrašnji čvor za svako i L(x) ako je depth(x)<min{ t i, t j } U(t i,t j ) = putanja(x) u(t i,t j ) = depth(x) x := potomak čvora x na putanji t j $ j
ZADATAK Naći uzajamna preklapanja za stringove t 1 = aba t 2 = bab t 3 = aabb
Traženje maksimalnih ponavljajućih sekvenci Ponavljajuća sekvenca je maksimalna ako se ne može produžiti na bilo koju stranu a da ostane ponavljajuća sekvenca Dat je string t=t 1 t n. a T njegovo kompaktno sufiksno stablo. Tada levim simbolom indeksa i zovemo simbol t i-1. Ako je x list stabla T, tada levim simbolom lista x zovemo levi simbol početne pozicije sufiksa pathlabel(x). Za unutrašnji čvor v stabla T kažemo da je levo različit ako podstablo sa korenom u v sadrži dva lista sa različitim levim simbolima.
Traženje maksimalnih ponavljajućih sekvenci String p je maksimalna ponavljajuća sekvenca u tekstu t sa kompaktnim sufiksnim stablom T ako i samo ako postoji levo-različit čvor x u stablu T, različit od korena, takav da je p=pathlabel(x)
SUFIKSNI NIZOVI Sufiksni niz za string s je niz koji sadrži sve sufikse niza s u leksikografskom poretku Primer: s=ababbabbb, s =9 Sufiksi: s[1,9] =ababbabbb s[3,9]=abbabbb s[6,9]=abbb s[2,9]=babbabbb s[4,9]=bbabbb s[5,9]=babbb s[7,9]=bbb s[8,9]=bb s[9,9]=b
SUFIKSNI NIZOVI s[1,9] =ababbabbb s[3,9]=abbabbb s[6,9]=abbb s[9,9]=b s[2,9]=babbabbb s[5,9]=babbb s[8,9]=bb s[4,9]=bbabbb s[7,9]=bbb A = (1,3,6,9,2,5,8,4,7)
UPARIVANJE NISKI POMOĆU POMOĆU SUFIKSNIH NIZOVA Neka je p šablon, t tekst, a A(t) sufiksni niz nad tekstom t. Ako je A[i] prvi element niza A koji počinje šablonom p, a A[j] poslednji takav element, onda se šablon p pojavljuje u tekstu t sa početkom u indeksima A[i], A[i+1],,A[j].
BOJER-MUROV ALGORITAM Unapređenje naivnog algoritma za sravnjivanje stringova preprocesiranjem obrasca Ideja: abbadabacba babac Pomeranje obrasca Bojer-Murov algoritam udesno za n pozicija, n>=1 Naivni algoritam udesno za tačno jednu poziciju Pravac poređenja obrasca i teksta sdesna nalevo sleva nadesno
BOJER-MUROV ALGORITAM Koliko pozicija udesno će se obrazac pomeriti određuje se na osnovu pravila: 1. pravilo dobrog sufiksa (good suffix rule) 2. pravilo lošeg karaktera (bad character rule) Od dve predložene vrednosti za pomeranje, uzima se maksimum
PRAVILO LOŠEG KARAKTERA Primer: abbadabacba babac babac do razlike je došlo kod karaktera koji se ne pojavljuje nigde dalje u obrascu
PRAVILO LOŠEG KARAKTERA Primer: abbababacba babac babac do razlike je došlo kod karaktera koji se pojavljuje dalje u obrascu; ako se pojavljuje više puta, uzima se najdešnje pojavljivanje
PRAVILO DOBROG SUFIKSA Primer: abaababacba cabab cabab Nakon uparivanja jednog sufiksa, traži se sledeće pojavljivanje takvog sufiksa i bira najdešnje; napomena: prethodni karakter mora biti različit
PRAVILO DOBROG SUFIKSA Primer: aabababacba abbab abbab Upareni sufiks bab se ne pojavljuje dalje u obrascu; onda se traži najveći njegov sufiks koji je prefiks obrasca
PRIMER Tekst: GCATCGCAGAGAGTATACAGTACG Obrazac: GCAGAGAG, dužine m=8 Σ={A,C,G,T} Korak 1: Konstrukcija tabela pomeranja na osnovu pravila dobrog sufiksa i pravila lošeg karaktera
PRIMER Pravilo lošeg karaktera: Označiti indeks poslednjeg pojavljivanja svakog karaktera iz Σ na pozicijama od 0 do m-1 s BC(s) A 6 C 1 G 5 T -1
PRIMER Pravilo dobrog sufiksa: Za i=0,...,m-1, označiti za koliko je pozicija potrebno pomeriti obrazac udesno da bi se dobilo potencijalno poklapanje sa sufiksom p i+1,..., p m-1 kom prethodi karakter različit od p i i GS(i) G 7 1 AG 6 7 GAG 5 4 AGAG 4 7 GAGAG 3 2 AGAGAG 2 7 CAGAGAG 1 7 GCAGAGAG 0 7
PRIMER Korak 2: sravnjivanje j= 0, i=7 GCATCGCAGAGAGTATACAGTACG GCAGAGAG max{gs(i), i-bc(a)} = max{1,1} = 1 shift=1 GCATCGCAGAGAGTATACAGTACG GCAGAGAG
PRIMER j= 1, i=5 GCATCGCAGAGAGTATACAGTACG GCAGAGAG max{gs(5), 5-BC(C)} = max{4,4} = 4 shift=4 GCATCGCAGAGAGTATACAGTACG GCAGAGAG
PRIMER j= 5, i=5 GCATCGCAGAGAGTATACAGTACG GCAGAGAG pronađeno pojavljivanje, J={5} shift=bs(0)=7 GCATCGCAGAGAGTATACAGTACG GCAGAGAG
PRIMER j= 12, i=5 GCATCGCAGAGAGTATACAGTACG GCAGAGAG max{gs(5), 5-BC(C)} = max{4,4} = 4 shift=4 GCATCGCAGAGAGTATACAGTACG GCAGAGAG Kraj.
ZADATAK Primeniti Bojer-Murov algoritam na pronalaženje svih pojavljivanja obrasca ACGACG u tekstu ACACGACGACGTAG
KORISNI LINKOVI Animacije različitih algoritama: http://www-igm.univmlv.fr/~lecroq/string/index.html