New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore...

40
String Matching Análisis y diseño de algoritmos II

Transcript of New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore...

Page 1: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching

Análisis y diseño de algoritmos II

Page 2: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingEncontrar todas las ocurrencias de un patrón enun texto.

Aplicaciones� Funcionalidad de editores de texto� Patrones en secuencias de ADN

a b c a b a a b c a

a b a a

b a cTexto

Patrón

Page 3: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching

El texto y el patrón están definidos sobre un mismoalfabeto Σ.

El texto es un arreglo de n elementos:T[1..n]El patrón es un arreglo de m elementos (m≤n): P[1..m]Ocurrencia del patrón con desplazamiento s:(∃s: 0≤s≤n-m:(∀j:1≤j≤m:T[s+j]=P[j]))

a b c a b a a b c a

a b a a

b a cTexto

Patrón

Page 4: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingNotación“w es prefijo de x” (w ⊏ x) si x= w.y (yεΣ*).Si w ⊏ x luego, │w│ ≤ │ x │Ejemplo ab ⊏ abcac“w es sufijo de x” (w ⊐ x) si x = y.wEjemplo cab ⊐ abcabLa notación Pk es equivalente a P[1..k], representa a losk caracteres prefijos de P.Tk representa a los k caracteres prefijo de T.

Page 5: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingNotationx,y,z: cadenas/ x ⊐ z y y⊐z. Si |x|≤ |y|, luegox⊐y. Si |x| ≥|y|, luego y⊐x. Si |x|=|y| luego x=y

X

Z

Y

X

Y

X

Z

Y

X

Y

X

Z

Y

X

Y

Page 6: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingUn algoritmo “ingenuo”Encontrar todos los desplazamientos s en el rango 0≤s≤n-m / P⊐Ts+mP ocurre sólo una vez en T, en el desplazamiento s = 2

Page 7: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingUn algoritmo “ingenuo”STRING-MATCHER (T:Texto; P:Patrón){n = long(T);m= long(P);for (s=0; s <= n-m; s++)if ( P[1..m] == T[s+1..s+m])cout << “Matching con desplazamiento”<<s;

}

Page 8: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching- Algoritmos clásicosTiempo Tiempo

Preprocesamiento MatchingRabin-Karp O(m) O((n - m + 1)m)

Autómata finito O(m |Σ|) O(n)

Knuth-Morris-Pratt O(m) O(n)

Boyer-Moore O(m) O((n-m+1)m+|Σ|

Page 9: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-KarpSe basa en nociones elementales de la teoría denúmeros, tal como la equivalencia de dosnúmeros módulo un tercero.

Sugerencia:Consultar los apuntes de Matemática Discreta oCormen, capítulo 31

Page 10: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-KarpSupongamos que el alfabeto es

Σ={0,1,2,3,4,5,6,7,8,9}Una cadena de k caracteres consecutivosrepresenta un número decimal de longitud k.Por ejemplo la cadena 31415.En el caso general, asumimos que cada caracteres un dígito en un sistema d-ario, donde d=|∑.

Page 11: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-KarpSean P[1..M] y T[1..n] el patrón y texto.

p es el valor decimal de P

ts es el valor decimal de T[s+1..s+m] (0≤s≤ n-m)

ts = p si y sólo sí T[s+1..s+m]=P[1..m]

Page 12: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-KarpCálculo de p en O(m) usando la regla de Horner p = P[m]+10(P[m-1]+10(P[m-2]+ …10(P[2]+

10 (P[2] + 10P[1])…))El valor de t0 puede ser calculado desde T[1..m]en O(m). Para calcular t1, t2,…,tn-m en tiempoO(n-m) es suficiente observar que ts+1 puede sercalculado desde ts en un tiempo constante: ts+1= 10(ts -10m-1T[s+1]) + T[s+m+1]

Page 13: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-Karpts+1= 10(ts -10m-1T[s+1]) + T[s+m+1]Si m=5 y ts=31415ts+1=10 (31415 -10000.3) +2 = 14152

Page 14: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-Karpts+1= 10(ts -10m-1T[s+1]) + T[s+m+1]

Si 10m-1 es precalculada, el cálculo de ts+1 es constante.Luego, p, t0, t1,..tn-m pueden ser calculados en O(n+m). Es decir,todas las ocurrencias de P[1..m] en el texto T[1..n] pueden sercalculadas en O(n+m). Sin embargo, si p y ts son muy grandes nose puede considerar que las operaciones aritméticas sobre p secalculan en tiempo constante. Luego, Rabin y Karp proponentrabajar con módulos de p y ts.

Page 15: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-Karp

mod 13

válido inválido

Supongamos que el patrón sea 31415, otras cadenas como 67399 compartenvalores.Trabajar con módulos permite descartar ocurrencias pero no garantizala ocurrencia del patrón.

Page 16: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-Karp14152 ≡ (31415 -3. 10000).10 + 2 (mod 13)14152 ≡ (7 – 3.3 ) 10 + 2 (mod 13)≡ 8 mod 13 Recordar!x mod y ≡ x – y x/y-18 mod 13 ≡ -18 -13 -18/13-18 mod 13 ≡ 8 mod 13 ...-18, -5, 8, 21,... son todos “congruentes módulo 13”

7 8

Page 17: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-KarpTs+1= (d (ts –T[s+1] h) + T[s+m+1]) mod q

h= dm-1 (mod q)

Sugerencia:Para un alfabeto d-ario elegir un q / d.qpueda almacenarse en una palabra de computadora

Page 18: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Rabin-Karp

Rabin-Karp-Matcher (T, P, d,q){n=long(T);m= long(P);h= dm-1 (mod q);p = 0; to = 0;for (i=1; i<=m; i++){ p = (d. p + P[i]) (mod q);to = d. t0 + T[i]) (mod q);}for (s=0; s <=n-m; s++){if (p == ts)

if (P[1..m] == T[s+1..s+m] )cout<< “matching con desplazamiento”<< s;

else if (s < n-m) ts+1= (d. (ts –T[s+1].h) + T[s+m+1]) mod q

}}

O((n-m+1)m)

Page 19: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching“Fuerza bruta” vs Rabin-Karp

Tiempo TiempoPreprocesamiento Matching

“Alg. ingenuo” O(1) O((n-m+1) m)Rabin-Karp O(m) O((n - m + 1)m)

Sugerencias� Analizar el comportamiento promedio de Rabin-Karpvs. fuerza bruta� Analizar si es posible adaptar Rabin-Karp para reconocervarios patrones en un mismo proceso.

Page 20: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en Autómata Finito (AF)Para cada patrón P existe un AF. Este autómataes construido en la etapa de preprocesamiento.Si P= ababaca se construiría el siguiente AF: a

a

a

a

ac

b

ba

a

b0 3 541 2 76

a a

b

Page 21: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFNotación AFUn autómata finito M se define mediante la tupla<Q,q0,A, ∑, δ > dondeQ es un conjunto finito de estados,q0∈Q, es el estado inicialA⊆Q, conjunto de estados finales∑, alfabeto de entradaδ :Q x ∑->Q es la función de transición φ(ε) = q0 φ(wa)= δ(φ(w),a) (transiciones sobre cadenas)

Page 22: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AF

a

a

a

ac

b

ba

a

b0 3 541 2 76

a a

b

Page 23: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFDefiniciónFunción sufijo correspondiente a un patrónP[1..m] σ : ∑* ->{0,1,…,m}/ σ(x) es la longituddel prefijo más largo de P que es sufijo de x:σ(x) ≡ {k / Pk ⊐ x}

σ(Y)= |Y|X

P

Y

Page 24: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFFunción sufijoSi P = abσ(ε) = 0 σ(ccaca) = 1 σ(ccaab) = 2P0 = ε es sufijo de cualquier xDado un patrón P de longitud mσ(x) = m si y sólo sí P ⊐ x.Si x ⊐y, luego σ(x) ≤ σ(y)

Page 25: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFDefinición del AF para P[1..m]Q es {0,1,…,m}q0 es 0A ={m}δ(q,a) = σ(Pqa)El AF mantiene invariante las transicionesφ(Ti) = σ(Ti)

Page 26: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFFINITE-AUTOMATON-MATCHER(T, δ,m){n = long(T);q = 0;for (i=1; i<=n;i++){q = δ(q, T[i]);if (q == m) {s = i-m; cout<<“Matching con desplazamiento”<< s;

}}

Page 27: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFCOMPUTE-TRANSITION-FUNCTION(P,Σ)1 {m = long (P);2 for (q=0;q<=m;q++)3 for cada caracter a∈∑4 {k = min (m+1, q+2);5 repeat 6 k=k-17 until Pk ⊐ Pqa8 δ(q,a) = k;

}}

Page 28: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFEjemplo P = ababaaa

m=7 (1) q=0 (2)Símbolo ak=min(8,2)=2 (4)k=1 (5)P1 ⊐ P0a

δ(0,a)=1

m=7 (1) q=0 (2)símbolo bk=min(8,2)=2 (4)k=1 (5)P1 ⊐ P0b

δ(0,b)=0

Page 29: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AF

a

a

a

ac

b

ba

a

b0 3 541 2 76

a a

b

Page 30: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String Matching basado en AFComplejidad temporal

O(m |∑|(m+1)m)# caracteres del patrón#iteraciones repeat

O(m3 |∑|)

Page 31: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-PrattSe basa en un pre-procesamiento del patrón queevita el cálculo de la función de transición δusando una función prefijo para patrones πprecalculada desde el patrón.Informalmente, para cada q=0,1,…,m ycualquier a∈∑, π[q] contiene la información quees independiente de a y necesaria para calcularδ(q,a).

Page 32: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-Pratt

s

q

T

P

s’ = s +2

k Pq

Pk

Si se logró un matching de q=5 símbolos con desplazamiento s, se sabe que podrían coincidir símbolos con desplazamiento s+2 y no en s+1

Basta preprocesar el patrón!

T[s+1..s+q] = P[1..q]

Page 33: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-PrattTeniendo en cuenta que P[1..q] = T[s+1..s+q],cuál es el menor desplazamiento s’ > s tal queP[1..k] = T[s+1..s’+k], donde s’+k = s+q?s’ es el primer desplazamiento que no esinválido. En la mejor situación, s’=s+q y losdesplazamientos s+1, s+2, s+q-1 se excluyen.Esta información puede calcularse comparandoal patrón contra sí mismo!

Page 34: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-Pratt¿Cuál es el menor desplazamiento s’ > s tal queP[1..k] = T[s+1..s’+k], donde s’+k = s+q?

¿Cuál es el mayor k<q / Pk ⊐ Pq? Luego, s’=s +(q-k) es el siguientedesplazamiento potencialmente válido.

Page 35: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-PrattPreprocesamiento del patrón

Dado un patrón P[1..m], la función prefijo delpatrón P es la funciónπ: {1,2,..m}-> {0,1,..m-1}/π[q] = max {k: k < q and Pk ⊐ Pq}

Es decir, π[q] es la longitud del prefijo más largode P que es sufijo de Pq .P ababacaπ 0012301

Page 36: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-Pratt KMP-MATCHER (T,P){ n = long (T);m= long (P);Π=COMPUTE-PREFIX-FUNCTION (P){ q=0;for (i=1;i<=n; i++)while (q >0 and P[q+1] <> T[i]q = Π[q];if (P[q+1] == T[i]) q=q+1;if (q=m) cout <<“matching con desplazamiento”<<i-m;q = Π[q];

}

Page 37: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-Pratt COMPUTE-PREFIX-FUNCTION(P)1 {m= long (P);2 Π(1) = 0;3 k = 0;4 for (q=2;i<=m; q++)5 while (k >0 and P[k+1] <> P[q]6 k =Π[k];7 if (P[k+1] = P[q])8 k=k+1;9 Π[q]= k;10 return Π}

Page 38: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-Pratt

Page 39: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-PrattP= ababababcam=10 (1)π[1]=0 (2)k=0 (3)q=2 (4)π[2]=0 (5,7,8)q=3 (4)k=1 (6)π[3]=1 (8)….. π[4]=2; π[5]=3; π[6]=4; π[7]=5; π[8]=6; π[9]=0; π[10]=1

Page 40: New String Matching - EXACTAS UNICEN · 2009. 10. 21. · Knuth-Morris-Pratt O(m) O(n) Boyer-Moore O(m) O((n-m+1)m+|Σ| StringMatching Algoritmo de Rabin-Karp Se basa en nociones

String MatchingAlgoritmo de Knuth-Morris-PrattComplejidad temporalCompute-Prefix-Function ∈ O(m)Knuth-Morris-Pratt ∈ O(m+n)

Tiempo TiempoPreprocesamiento Matching

Autómata finito O(m | |) O(n)

Knuth-Morris-Pratt O(m) O(n)