String Matching
Autómata Finito Un autómata finito M es una 5-tuple (Q, q0, A, , δ), donde Q es un conjunto finito de estados q0 ε Q es el estado inicial A Q es un conjunto de estados de aceptacion o finales es un alfabeto δ es la funcion de transicion
Como trabaja un Automata en estados finitos Los automata finito M comienza en el estado q0 Lee los caracteres desde uno a la vez Si M esta en el estado q y lee un caracter “a”, entonces M se mueve al estado δ(q,a) Los nodos correspondientes a los estados de aceptación están marcados por un doble círculo. Los que no con un círculo sencillo.
Ejemplo Pattern : gcag Text : gcgagcagc
Funcion de transicion For( q = 0; q<= m; q ++ ) For( cada carácter x del alfabeto ){ k = min( q +1, m) while( P[ k] no es sufijo de P[ k] + c ){ k = k – 1 } δ( q, x ) = k
g c a g q 1 2 3 4 P [q] - g c a 1 2 3 4 q = 0 Min(1,4)=K=1 1 - 2 3 4 q 1 2 3 4 P [q] - g c a g c a g 1 2 3 4 q = 0 Min(1,4)=K=1 P[1]=g es sufijo P[0]+g=g δ( 0, g ) = 1
g g c a g q 1 2 3 4 P [q] - g c a 1 2 3 4 q = 1 Min(2,4)=K=2 1 - 2 3 4 q 1 2 3 4 P [q] - g c a g g c a g 1 2 3 4 q = 1 Min(2,4)=K=2 P[2]=gc no es sufijo P[1]+g=gg k = k – 1 = 1 P[1] = g es sufijo de P[0]+g=g δ( 1, g ) = 1
g g g c a g q 1 2 3 4 P [q] - g c a 1 2 3 4 q = 2 Min(3,4)= K = 3 1 - 2 3 4 q 1 2 3 4 P [q] - g c a g g g c a g 1 2 3 4 q = 2 Min(3,4)= K = 3 P[3]=gca no es sufijo de P[2]+g=gcg k = k – 1 = 2 P[2] = gc no es sufijo de P[1]+g=gg k = k – 1 = 1 P[1] = g es sufijo de P[0]+g=g δ( 2, g ) = 1
g g g c a g q 1 2 3 4 P [q] - g c a 1 2 3 4 q = 3 Min(4,4)= K = 4 1 - 2 3 4 q 1 2 3 4 P [q] - g c a g g g c a g 1 2 3 4 q = 3 Min(4,4)= K = 4 P[4]=gcag es sufijo de P[3]+g=gcag δ( 3, g ) = 4
g g g g c a g q 1 2 3 4 P [q] - g c a 1 2 3 4 q = 4 Min(5,4)= K = 4 1 - 2 3 4 q 1 2 3 4 P [q] - g c a g g g g c a g 1 2 3 4 q = 4 Min(5,4)= K = 4 P[4]=gcag no es sufijo de P[4]+g=gcagg k = k – 1 = 3 P[3]=gca no es sufijo de P[2]+g=gcag k = k – 1 = 2 P[2] = gc no es sufijo de P[1]+g=gcg k = k – 1 = 1 P[1] = g es sufijo de P[0]+g=gg δ( 4, g ) = 1
Pattern : gcag Text : gcgagcagc g c a 1 2 3 4 g g g g c a g 1 2 3 4 c
Algorithm Entrada : T [1..n], δ and m String_matcher_automata_finito (T, m, δ) n ← length[T ] q ← 0 for i ← 1 to n q ← δ (q, T [i]) if q = m print “pattern” i-m
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,T[i ]) g 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,T[i ])
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,T[i ]) g 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,T[i ])
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)
g g g g c a g c 1 2 3 4 i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X) g c a 1 2 3 4 g g g g c a g 1 2 3 4 c i 1 2 3 4 5 6 7 8 9 T [i] G C A q δ(q,X)