230 likes | 497 Views
String Matching. Autómata Finito. Un autómata finito M es una 5-tuple ( Q , q 0, A , , δ ), donde Q es un conjunto finito de estados q 0 ε Q es el estado inicial A Q es un conjunto de estados de aceptacion o finales es un alfabeto δ es la funcion de transicion.
E N D
Autómata Finito • Un autómatafinitoM 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 0 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 0 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 0 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 0 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 0 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 g g g c a g 0 1 2 3 4 c
Algorithm • Entrada : T [1..n], δ and m • String_matcher_automata_finito (T, m, δ) • n ← length[T ] • q ← 0 • fori ← 1 ton • q ← δ (q, T [i]) • ifq = m • print “pattern” i-m
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c
g g g g c a g 0 1 2 3 4 c