Tema 10: Algoritmos de empate de cadenas
1
Análisis de algoritmos
M. en C. Edgardo Adrián Franco Martínez http://[email protected]@edfrancom edgardoadrianfrancom
• Introducción
• Empate de cadenas
• Fuerza bruta
• Complejidad de Fuerza bruta
• Rabin-Karp
• Complejidad de Rabin-Karp
• Knuth-Morris-Pratt
• Complejidad de Knuth-Morris-Pratt
• Autómata finito
• Complejidad de un autómata finito
Contenido
2
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Introducción• Una cadena es una secuencia de caracteres sobre un
alfabeto finito.
• 𝐴𝑇𝐶𝑇𝐴𝐺𝐴𝐺𝐴 es un cadena sobre Σ = {𝐴, 𝐶, 𝐺, 𝑇}
• El problema de emparejamiento de cadenas esencontrar todas las ocurrencias de una cadena p,llamada patrón, en una cadena más grande T delmismo alfabeto.
• Dadas las cadenas 𝑥, 𝑦 y z, se dice que x es:
• a) Un prefijo de xy,
• b) Un sufijo de yx,
• c) Una subcadena de yxz.3
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
4
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• A menudo sucede que los datos a procesar no sedescomponen lógicamente en registros independientes querepresenten pequeñas partes identificables.
• Este tipo de datos se caracteriza fácilmente por el hecho deque se pueden escribir en forma de cadenas: series lineales(por lo regular muy largas) de caracteres.
• Las cadenas son evidentemente el centro de los sistemas detratamiento de texto, que proporcionan una gran variedad deposibilidades para la manipulación de textos.
5
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Tales sistemas procesan cadenas alfanuméricas, que puedendefinirse en primera aproximación como series de letras,números y caracteres especiales. Estos objetos pueden serbastante grandes, por lo que es importante disponer dealgoritmos eficaces para su manipulación.
• Otro tipo de cadena es la cadena binaria, que es una simpleserie de valores 0 y 1. Esta es, en cierto sentido, un tipoespecial de cadena alfanumérica, pero es útil hacer ladistinción porque existen diferentes algoritmos específicospara este tipo de cadenas y porque las cadenas binarias seutilizan en muchas aplicaciones.
Empate de cadenas• Implica la implementación de algoritmos de búsqueda de
subcadenas y por lo tanto su objetivo es buscar la existenciade una subcadena dentro de una cadena.
• La mayoría de los algoritmos para este problema se puedenmodificar fácilmente para encontrar todas las ocurrencias delpatrón en el texto, puesto que recorren el texto en secuenciay se pueden reinicializar en la posición situadainmediatamente después del comienzo de una concordancia,para encontrar la concordancia siguiente.
6
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Fuerza bruta• El método en el que se piensa de inmediato para el
reconocimiento de patrones consiste simplementeen verificar, para cada posición posible del texto enla que el patrón pueda concordar, si efectivamentelo hace.
100111010010100010100111000111
Reconocer la cadena: 10100111
100111010010100010100111000111
10100111
10100111
10100111
10100111
10100111
10100111
100111010010100010100111000111
7
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
8
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• El algoritmo de Fuerza Bruta compara el patrón con eltexto un carácter cada vez, hasta encontrar que nocoinciden los caracteres.
Complejidad de Fuerza bruta• Dado un patrón de M caracteres de longitud, y un texto de N
caracteres de longitud.• Mejor caso: encuentra el patrón en las primeras M posiciones del
texto.
• Complejidad: O(N)
• Peor caso: compara el patrón con cada subcadena de texto delongitud M.
• Complejidad: O(MN)
9
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
BruteForceSearch (T; P)
{
for (s=0; s <= n-m; s++)
if (P[1..m] == T[s+1..s+m])
cout << “Matching”<< s;
}
Rabin-Karp• Calcula un valor hash para el patrón, y para cada
subsecuencia de M-caracteres de texto.
• Si los valores hash son diferentes, se calcula una valor para lasiguiente secuencia.
• Si los valores hash son iguales se usa una comparación deFuerza Bruta.
• Valor Hash de “AAAAA” es 37
• Valor Hash de“AAAAH” es 100
10
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Complejidad de Rabin-Karp• Dado un patrón de M caracteres de longitud, y un texto de N
caracteres de longitud.• Complejidad Pre-procesamiento: O(M)
• Complejidad Búsqueda: O(MN)
11
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
RabinKarpSearch(T, P)
{
for( i=1; i<m; i++ ) dM = (dM * D) % Q; // Hash al patrón
for( i=1; i<=m; i++ )
{
h1 = ((h1 * D) + pat[i] ) % Q;
h2 = ((h2 * D) + text[i] ) % Q;
}
for( i = 1; i <= n-m+1; i++ ) // Busqueda
{
if( h1 == h2 ) // Potencial coincidencia
{
for(j=1; j<=m && text[i-1+j] == pat[j]; j++ );
if( j > m ) // Coincidencia confirmada
cout << “Matching”<<i;
}
h2 = (h2 + (Q * D) - text[i]*dM ) % Q;
h2 = ((h2 * D) + text[i+m] ) % Q;
}
}
Algoritmo Knuth-Morris-Pratt• El algoritmo de búsqueda Knuth-Morris-Pratt (KMP)
se diferencia del método de fuerza bruta porquemantiene una pista de información obtenida encomparaciones previas.
• Se calcula una función de prefijos (Π) que brindainformación sobre el patrón a la hora de hacer lascomparaciones. Permite saber el corrimiento sobreel patrón hasta la próxima comparación con algúncarácter en el texto, esta información es registradaen una tabla de fallos o tabla de siguientes que dicecomo realizar las comparaciones en la cadena dondese busca un patrón.
12
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Complejidad: O(n + m)
13
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
preKMPfunction (Tabla de siguientes)KMPNextTable(P)
{
pos=2 cnd=0
table[0]=-1, table[1]=0
while(pos<p.lenght)
if (p[pos-1]==p[cnd])
table[pos]=cnd + 1
cnd++
pos++
else if (cnd > 0)
cnd=table[cnd]
else
table[pos] = 0
pos++
return table
}
KMP (Busqueda KMP)KMPSearch(s,p)
{
i=0,j=0,h=0,res=0
KMPnext = preKMPfunction(p)
while (i < s.lenght)
{
if(s[i]==p[j])
if(j==p_lenght-1)
res++ //MATCHING++
j=KMPnext[j]
if(j==-1) i++, j=0
else
i++, j++
else
j=KMPnext[j]
if(j==-1) i++, j=0
return res
}
16
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Cuando se detecta una discordancia (no concordancia), elprincipio donde se comienza a comparar al patrónnuevamente se define por los caracteres que se conocen yahan pasado en el texto (puesto que están en el patrón segúnlo indica la tabla de siguientes).
• Cuando se detecta la no concordancia, se sabe, en virtud delhecho de que concuerdan j caracteres, que no se necesita<retroceder> el puntero i del texto, puesto que ninguno delos j-1 caracteres del texto pueden concordar con el primercarácter del patrón.
• Saltar todos los caracteres del patrón cuando se detecta unadiscordancia, sería un error en el caso en el que el patrón serepita en el propio punto de la concordancia.
Complejidad de Knuth-Morris-Pratt•Dado un patrón de M caracteres de
longitud, y un texto de N caracteres delongitud.
• Complejidad del calculo de la tabla defallos: O(M)
• Complejidad Búsqueda: O(M+N)
17
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Boyer-Moore• Fue desarrollado por Bob Boyer y J Strother Moore en 1977.
• El algoritmo preprocesa la cadena objetivo que está siendobuscada. El tiempo de ejecución del algoritmo Boyer-Moore,aunque es lineal en el tamaño de la cadena siendo buscada,puede tener un factor significativamente más bajo quemuchos otros algoritmos de búsqueda: no necesitacomprobar cada carácter de la cadena que es buscada,puesto que salta algunos de ellos.
• Generalmente el algoritmo es más rápido cuanto más grandees la cadena que es buscada ya que usa la informaciónconseguida desde un inicio para descartar tantas posicionesdel texto como sean posibles.
18
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
Algoritmo con autómata finito• Un autómata finito (AF) o máquina de estado finito es un
modelo computacional que realiza cómputos en formaautomática sobre una entrada para producir una salida.
• Este modelo está conformado por un alfabeto, un conjuntode estados y un conjunto de transiciones entre dichosestados. Su funcionamiento se basa en una función detransición, que recibe a partir de un estado inicial una cadenade caracteres pertenecientes al alfabeto (la entrada), y queva leyendo dicha cadena a medida que el autómata sedesplaza de un estado a otro, para finalmente detenerse enun estado final o de aceptación, que representa la salida.
19
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
• Utiliza un AF Determinístico
• Cantidad de Estados = m+1
• Cantidad de Comparaciones = n
• Complejidad Pre-procesamiento: O(m³|Σ|))
• Complejidad Búsqueda: O(n)
20
An
ális
is d
e al
gori
tmo
s1
0 A
lgo
ritm
os
de
emp
ate
de
cad
enas
Pro
f. Ed
gard
o A
dri
án F
ran
co M
artí
nez
AutomataFinitoSearch(T; P;d)
{
estado = automata->getInicial();
for(j = 0; j <= n; j++ )
{
estado = d(estado, T [j]);
if (automata->esFinal(estado))
cout << “Matching”<< j + 1 - m;
}
}
Complejidad de la búsqueda con autómata finito
Top Related