10 Algoritmos de empate de cadenas

20
Tema 10: Algoritmos de empate de cadenas 1 Análisis de algoritmos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Transcript of 10 Algoritmos de empate de cadenas

Page 1: 10 Algoritmos de empate de cadenas

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

Page 2: 10 Algoritmos de empate de cadenas

• 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

Page 3: 10 Algoritmos de empate de cadenas

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

Page 4: 10 Algoritmos de empate de cadenas

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.

Page 5: 10 Algoritmos de empate de cadenas

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.

Page 6: 10 Algoritmos de empate de cadenas

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

Page 7: 10 Algoritmos de empate de cadenas

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

Page 8: 10 Algoritmos de empate de cadenas

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.

Page 9: 10 Algoritmos de empate de cadenas

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;

}

Page 10: 10 Algoritmos de empate de cadenas

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

Page 11: 10 Algoritmos de empate de cadenas

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;

}

}

Page 12: 10 Algoritmos de empate de cadenas

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

Page 13: 10 Algoritmos de empate de cadenas

• 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

Page 14: 10 Algoritmos de empate de cadenas

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

}

Page 15: 10 Algoritmos de empate de cadenas

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

}

Page 16: 10 Algoritmos de empate de cadenas

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.

Page 17: 10 Algoritmos de empate de cadenas

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

Page 18: 10 Algoritmos de empate de cadenas

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

Page 19: 10 Algoritmos de empate de cadenas

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

Page 20: 10 Algoritmos de empate de cadenas

• 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