TRABAJO FINAL ALGORITMOS II: Algoritmos de String …I NTRODUCCION String matching es el problema de...
Transcript of TRABAJO FINAL ALGORITMOS II: Algoritmos de String …I NTRODUCCION String matching es el problema de...
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
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