trabajo final algoritmos ii: algoritmos de string …i ntroduccion string matching es el problema de...

16
TRABAJO FINAL ALGORITMOS II: Algoritmos de String Matching Integrantes: Barragán, Ariel Giorda, Mauro Docente: Favre, Liliana 1

Upload: others

Post on 10-Mar-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

TRABAJO FINAL ALGORITMOS II:

Algoritmos de String Matching

Integrantes:

Barragán, Ariel

Giorda, Mauro

Docente:

Favre, Liliana1

SUMARIO

Como esta organizada nuestra charla:

Introducción a String Matching

Objetivos del proyecto y de la aplicación

Componentes de la aplicación

Herramientas del programa

Algoritmos implementados

Detalles de diseño

Ejemplos utilizando el programa 2

INTRODUCCION

String matching es el problema de la búsqueda de

ocurrencias de un patrón dentro de una cadena de texto. Su

utilidad comprende tanto editores de texto como complejas

secuencias de ADN.

Un tipo de clasificación posible es:

Preprocesamiento

Algoritmos Ninguno Patrón Texto

Fuerza Bruta

Rabin-Karp

Autómata Finito

Knuth-Morris-Pratt

Boyer-Moore

Index. Longitud

Index. Letra

3

OBJETIVOS

4

COMPONENTES DE LA APLICACIÓN

5

Seguimiento del algoritmo

Lista de operaciones

Visor de estado

Esquema de autómata

Información de resultados

Cantidad de ocurrencias

Tiempo de procesamiento

Comparaciones carácter a

carácter

Fuerza Bruta

Rabin-Karp

Autómata Finito

Knuth-Morris-Pratt

Boyer-Moore

Index. Longitud

Index. Letra

HERRAMIENTAS DEL PROGRAMA

6

Herramienta de búsqueda

Resultados obtenidos

Visor de estado

Esquema de Autómata

Lista de operaciones

ALGORITMO: FUERZA BRUTA

MEJORADO

7

Características

Pre-procesamiento: ninguno

Complejidad: O(n.m)

Desplazamiento: siempre uno a la derecha

FUERZA-BRUTA(T,P){ n = longitud(T);m= longitud(P);for (s=0; s <= n-m; s++){

j = s; k= 1;while( P[k] == T[j])

if (k == j)cout<< “ocurrencia”<<s;

elsej++; k++;

}}

Pseudo CodigoPseudo Código

ALGORITMO: RABIN-KARP

8

Características

Pre-procesamiento: patrón en O(m)

Complejidad: O(n.m)

Desplazamiento: siempre uno a la derecha

Usa una funcion de Hashing (Rolling hash)

Eficiente para patrones múltiples

RABIN-KARP(T,P,d,q){ n = longitud(T);m= longitud(P);p = Hash(P,d,q);t0 = Hash(T[1..m],d,q);for (s=0; s <= n-m; s++){

if (p == ts)if (P[1..m] == T[s..s+m]

cout<< “ocurrencia”<< s; ts+1= RollingHash(T[s+1], d,q)}

}

Pseudo CodigoPseudo Código

ALGORITMO: AUTÓMATA FINITO

9

Características

Pre-procesamiento: patrón en O(m3|Σ|)

Complejidad: O(n)

Desplazamiento: siempre uno a derecha

Lee cada carácter del texto solo una vez

Genera un AF determínistico

A-FINITO-MATCHER(T,P){ n = longitud(T);m = longitud(P);q = 0;for (s=0; s <= n; s++){

q = d(q,T[s]);if (q == m)

cout<< “ocurrencia”<< s; }

}

Pseudo CodigoPseudo Código

10

ALGORITMO: KNUTH-MORRIS-PRATT

Características

Pre-procesamiento: patrón en O(m)

Complejidad: O(n+m)

Desplazamiento: siempre uno a derecha

Genera una tabla con la función prefijo

Reconstruye en la tabla cualquier transición

KNUTH-MORRIS-PRATT(T,P){

n = longitud(T);

m = longitud(P);

F = FuncionPrefijo(P);

q=0;

for (i=1;i<=n; i++){

while (q >0 and P[q+1] <> T[i]

q = P[q];

if (P[q+1] == T[i]) q=q+1;

if (q=m) {cout <<“ocurrencia”<< i-m;

q = P[q];

}

}

}

Pseudo CodigoPseudo Código

11

ALGORITMO: BOYER-MOORE

Características

Pre-procesamiento: patrón en O(m)

Complejidad: O(n) en el peor caso y O(n/m) en el mejor

Desplazamiento: variable

Compara de atrás hacia delante del patrón

Utiliza dos funciones para el pre procesado, BadCharacter y

GoodSuffix

BOYER-MOORE(T,P, Σ){

n = longitud(T);

m = longitud(P);

BC[ ] = BadCharacter(P,m,Σ);

GS[ ] = GoodSuffix(P,m);

q=0;

while (q <= n – m){

j = m;

while (q >0 and P[q] == T[q + j]

q = q – 1;

if (j == 0)

cout << “ocurrencia”;

q = q + GS [0];

else

q = q + max ( GS [ j ], j – BC [ T [q+j] ] );

}

}

Pseudo CodigoPseudo Código

12

Good-Suffix. Luego del mismatch con „b‟, se encuentra el sufijo „u‟ más a la izquierda en el patrón precedido por „c‟ e indica ese desplazamiento.

Bad-Character. Luego del mismatch con „b‟, se detecta una „b‟ más a la izquierda en el patrón e indica ese desplazamiento.

13

ALGORITMO: INDEXACIÓN POR LONG. DE PALABRA

Características

Pre-procesamiento: texto en O(n).

Complejidad: según el método elegido para las comparaciones.

Desplazamiento: variable

Alta eficiencia en textos estáticos

Indexa el texto según longitud de las palabras

INDEX-LONGITUD(T,P){

n = longitud(T);

m = longitud(P);

if(I[] == null)

I[] = tablaIndexLONG(T);

L[] = I[m];

q = 0;

while ( L[q] <= n-m ){

algBusq(T[ L[q]..L[q] + m],P);

q++;

}

}

Pseudo CodigoPseudo Código

14

ALGORITMO: INDEXACIÓN POR LETRA

Características

Pre-procesamiento: texto en O(n)

Complejidad: según el método elegido para las comparaciones.

Desplazamiento: variable

Implementa una variante en el método de indexación

Indexa el texto según la posición de cada letra

INDEX-LETRA(T,P){

n = longitud(T);

m = longitud(P);

if(I[][] == null)

I[][] = tablaIndexLETRA(T);

L[] = I[ P[1] ];

q = 0;

while ( L[q] <= n-m ){

algBusq(T[ L[q]..L[q] + m],P);

q++;

}

Pseudo CodigoPseudo Código

DETALLES DE DISEÑO

15

16

DETALLES DE DISEÑO – CONT.