String Matching
description
Transcript of String Matching
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
}
q 0 1 2 3 4
P [q] - g c a g
g c a
0 1 0 0
1 - - -
2 - - -
3 - - -
4 - - -
0 1 2 3 4a gcg
q = 0Min(1,4)=K=1P[1]=g es sufijo P[0]+g=g
δ( 0, g ) = 1
g c a
0 1 0 0
1 1 - -
2 - - -
3 - - -
4 - - -
0 1 2 3 4a gcg
q = 1Min(2,4)=K=2P[2]=gc no es sufijo P[1]+g=gg
k = k – 1 = 1P[1] = g es sufijo de P[0]+g=gδ( 1, g ) = 1
g
q 0 1 2 3 4
P [q] - g c a g
q 0 1 2 3 4
P [q] - g c a g
g c a
0 1 0 0
1 1 - -
2 1 - -
3 - - -
4 - - -
0 1 2 3 4a gcg
q = 2Min(3,4)= K = 3P[3]=gca no es sufijo de P[2]+g=gcg
k = k – 1 = 2P[2] = gc no es sufijo de P[1]+g=ggk = k – 1 = 1P[1] = g es sufijo de P[0]+g=gδ( 2, g ) = 1
g g
q 0 1 2 3 4
P [q] - g c a g
g c a
0 1 0 0
1 1 - -
2 1 - -
3 4 - -
4 - - -
0 1 2 3 4a gcg
q = 3Min(4,4)= K = 4P[4]=gcag es sufijo de P[3]+g=gcag
δ( 3, g ) = 4
g g
q 0 1 2 3 4
P [q] - g c a g
g c a
0 1 0 0
1 1 - -
2 1 - -
3 4 - -
4 1 - -
0 1 2 3 4a gcg
q = 4Min(5,4)= K = 4P[4]=gcag no es sufijo de P[4]+g=gcagg
k = k – 1 = 3P[3]=gca no es sufijo de P[2]+g=gcag
k = k – 1 = 2P[2] = gc no es sufijo de P[1]+g=gcgk = k – 1 = 1P[1] = g es sufijo de P[0]+g=ggδ( 4, g ) = 1
g g
g
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
• Pattern : gcag• Text : gcgagcagc
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
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0
δ(q,T[i ]) 1
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1
δ(q,T[i ]) 1 2
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2
δ(q,X) 1 2 1
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1
δ(q,X) 1 2 1 0
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g
g
c
g
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0
δ(q,X) 1 2 1 0 1
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0 1
δ(q,X) 1 2 1 0 1 2
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0 1 2
δ(q,X) 1 2 1 0 1 2 3
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0 1 2 3
δ(q,X) 1 2 1 0 1 2 3 4
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0 1 2 3 4
δ(q,X) 1 2 1 0 1 2 3 4 2
g c a
0 1 0 0
1 1 2 0
2 1 0 3
3 4 0 0
4 1 2 0
0 1 2 3 4a gcg
g g
g
c
i 1 2 3 4 5 6 7 8 9
T [i] G C G A G C A G C
q 0 1 2 1 0 1 2 3 4
δ(q,X) 1 2 1 0 1 2 3 4 2