Академический Документы
Профессиональный Документы
Культура Документы
Integrantes:
Barragn, Ariel
Giorda, Mauro
Docente:
1
Favre, Liliana
SUMARIO
Como esta organizada nuestra charla:
Introduccin a String Matching
Objetivos del proyecto y de la aplicacin
Componentes de la aplicacin
Herramientas del programa
Algoritmos implementados
Detalles de diseo
Ejemplos utilizando el programa 2
INTRODUCCION
String matching es el problema de la bsqueda de
ocurrencias de un patrn dentro de una cadena de texto. Su
utilidad comprende tanto editores de texto como complejas
secuencias de ADN.
4
COMPONENTES DE LA APLICACIN
Lista de
operaciones
Resultados
obtenidos
Visor de estado
Esquema de
Autmata
6
ALGORITMO: FUERZA BRUTA
MEJORADO
Caractersticas PseudoCodigo
Pseudo Cdigo
Pre-procesamiento: FUERZA-BRUTA(T,P){
ninguno n = longitud(T);
m= longitud(P);
for (s=0; s <= n-m; s++){
Complejidad: O(n.m)
j = s; k= 1;
while( P[k] == T[j])
Desplazamiento: siempre if (k == j)
uno a la derecha cout<< ocurrencia<<s;
else
j++; k++;
} 7
}
ALGORITMO: RABIN-KARP
Caractersticas Pseudo Cdigo
Pseudo Codigo
Pre-procesamiento: RABIN-KARP(T,P,d,q){
patrn en O(m) n = longitud(T);
m= longitud(P);
Complejidad: O(n.m) p = Hash(P,d,q);
t0 = Hash(T[1..m],d,q);
Desplazamiento: siempre for (s=0; s <= n-m; s++){
uno a la derecha if (p == ts)
if (P[1..m] == T[s..s+m]
Usa una funcion de cout<< ocurrencia<< s;
Hashing (Rolling hash)
ts+1= RollingHash(T[s+1], d,q)
Eficiente para patrones
} 8
mltiples }
ALGORITMO: AUTMATA FINITO
Caractersticas Pseudo Cdigo
Pseudo Codigo
Pre-procesamiento: A-FINITO-MATCHER(T,P){
patrn en O(m3||) n = longitud(T);
m = longitud(P);
Complejidad: O(n) q = 0;
for (s=0; s <= n; s++){
Desplazamiento: q = d(q,T[s]);
siempre uno a derecha if (q == m)
Lee cada carcter del cout<< ocurrencia<< s;
texto solo una vez }
}
Genera un AF
determnistico
9
ALGORITMO: KNUTH-MORRIS-PRATT
Caractersticas Pseudo Cdigo
Pseudo Codigo
Pre-procesamiento: KNUTH-MORRIS-PRATT(T,P){
patrn en O(m) n = longitud(T);
m = longitud(P);
F = FuncionPrefijo(P);
Complejidad: O(n+m)
q=0;
for (i=1;i<=n; i++){
Desplazamiento:
while (q >0 and P[q+1] <> T[i]
siempre uno a derecha
q = P[q];
Genera una tabla con if (P[q+1] == T[i]) q=q+1;
la funcin prefijo if (q=m) {cout <<ocurrencia<< i-m;
q = P[q];
Reconstruye en la tabla }
cualquier transicin }
} 10
ALGORITMO: BOYER-MOORE
Caractersticas Pseudo Cdigo
Pseudo Codigo
BOYER-MOORE(T,P, ){
Pre-procesamiento: patrn en n = longitud(T);
O(m)
m = longitud(P);
BC[ ] = BadCharacter(P,m,);
Complejidad: O(n) en el peor caso GS[ ] = GoodSuffix(P,m);
y O(n/m) en el mejor
q=0;
while (q <= n m){
Desplazamiento: variable j = m;
while (q >0 and P[q] == T[q + j]
q = q 1;
Compara de atrs hacia delante del if (j == 0)
patrn
cout << ocurrencia;
q = q + GS [0];
Utiliza dos funciones para el pre else
procesado, BadCharacter y
GoodSuffix q = q + max ( GS [ j ], j BC [ T [q+j] ] );
}
11
}
Bad-Character. Luego del mismatch con b, se detecta una b
ms a la izquierda en el patrn e indica ese desplazamiento.
12
15
DETALLES DE DISEO CONT.
16