You are on page 1of 11

Facultad de Produccin y Servicios

Escuela Profesional de Ingeniera de Sistemas

Asignatura: Analisis y Diseo de Algoritmos

Desarrollo de Investigacin:

The Naive String-Matching Algorithm


Grupo-6

Docente: Mgter. Carlo Corrales Delgado

Integrantes:
Abril Christian
Ortiz Mamani Waldir
Oviedo Yauri Diego
Introduccin
En el desarrollo de este proyecto para la asignatura de Anlisis y Diseo de Algoritmos
analizaremos uno de los ms bsicos algoritmos de bsqueda de subcadenas: El
Algoritmo de fuerza bruta .
Veremos sus principales caractersticas y las clasificaciones de las bsquedas de texto.
Luego implementaremos el algoritmo en el lenguaje de programacin Java. Para
posteriormente analizar su tiempo de ejecucin con otros algoritmos de bsqueda.
Adems detallaremos la bsqueda simple y mltiple en un cadena.
Anlisis de Algoritmos de bsqueda de subcadenas :
Algoritmo de fuerza bruta.

Algoritmos de bsqueda de subcadenas


A este tipo de algoritmos tambin se les llama Algoritmos de patrones en un texto,
algoritmos de emparejamiento de secuencias, algoritmos de casamiento de secuencias
o simplemente por su nombre en ingls string matching. Este tipo de algoritmos
persiguen encontrar subcadena/s con alguna propiedad en una cadena de caracteres.
Los algoritmos de Bsqueda Secuencial de Texto se encargan de verificar y recorrer
documentos de texto, localizando en ellos ocurrencias del patrn o patrones buscados.
Se debe tener en cuenta qu tipo de bsqueda se est realizando: palabras, frases, etc.
Se debe analizar y estudiar los diferentes tipos de algoritmos que han sido creados
para realizar las bsquedas secuenciales para as comparar su funcionamiento a fin de
decidir cules se adaptan mejor a los requisitos de desarrollo.
La bsqueda de patrones en un texto es un problema muy importante en la prctica.
Sus aplicaciones en computacin son variadas, como por ejemplo la bsqueda de una
palabra en un archivo de texto o problemas relacionados con biologa computacional,
en donde se requiere buscar patrones dentro de una secuencia de ADN, la cual puede
ser modelada como una secuencia de caracteres (el problema es ms complejo que lo
descrito, puesto que se requiere buscar patrones en donde ocurren alteraciones con
cierta probabilidad, esto es, la bsqueda no es exacta).
Aunque los datos se pueden presentar de varias maneras, el texto sigue siendo la
forma principal para intercambiar la informacin:
En la literatura o la lingstica los datos se componen de la recopilacin y de
diccionarios enormes.
En la informtica existe una gran cantidad de datos que se almacenan en
archivos.
En la biologa molecular, las molculas biolgicas se pueden aproximar a
menudo como secuencias de nucletidos o de aminocidos.
Adems, la cantidad de datos disponibles en estos campos tiende a duplicarse cada 18
meses.
sta es la razn por la que los algoritmos deben ser eficientes, incluso la velocidad y la
capacidad del almacenaje de computadoras aumentan regularmente.
La bsqueda secuencial de texto consiste en encontrar una o, ms generalmente,
ocurrencias de una secuencia (generalmente llamada patrn) en un texto.

Clasificacion
Este tipo de algoritmos se pueden clasificar segn el nmero de subcadenas que se
intentan buscar en simples, se busca slo una subcadena, y mltiples, se buscan varias
subcadenas.

Algoritmos de bsqueda simple de subcadenas


Tambin llamados por su denominacin en ingls Single string Matching. En este tipo
de algoritmos slo se busca una subcadena a la que llamamos patrn, es decir el
objetivo es encontrar todas las ocurrencias del patrn P dentro del texto. Este tipo de
algoritmos se suelen agrupar en alguno de los siguientes tipos
Fuerza bruta. La idea es ir deslizando el patrn sobre el texto de izquierda a
derecha, comparndolo con las subcadenas del mismo tamao que empiezan
en cada carcter del texto.
Leer todos los caracteres del texto uno a uno modificando en cada paso algunas
variables que permitan identificar posibles ocurrencias. A este tipo pertenecen
los algoritmos de Knuth-Morris-Pratt,4 Shift-Or o bsqueda simple con
autmata determinista.
Buscar el patrn en una ventana que se desliza a lo largo del texto. Para cada
posicin de esta ventana buscamos de derecha a izquierda un sufijo de la
ventana que corresponda a un sufijo del patrn. A este tipo pertenecen los
algoritmos de Boyer-Moore,6 Boyer-Moore-Horspool y Sunday Quick Search.8
Este tipo de algoritmos no suelen funcionar bien cuando el tamao del patrn
es pequeo y hay una probabilidad alta de encontrarlo en el texto.
La bsqueda se realiza de derecha a izquierda dentro de una ventana, pero en
este esquema se busca el sufijo ms largo en la ventana que es subcadena del
patrn. Ejemplos de este tipo de algoritmos son BDM, BNDM y BOM Este tipo
de algoritmos para patrones pequeos no suelen funcionar bien.
Esquemas basados en funciones hash. Ejemplo de este tipo de algoritmos es el
de Karp-Rabin.

Algoritmos de bsqueda mltiple de subcadenas


Tambin llamados por su denominacin en ingls Multiple String Matching. Ahora no
tenemos un slo patrn p a buscar sino que contamos con un conjunto P={p1,..., pl}
de patrones. La solucin que se suele adoptar es la extensin de los esquemas
anteriores para el caso mltiple. Por tanto tenemos los siguientes subtipos:
Fuerza bruta
Extensin del tipo 2 de algoritmos de bsqueda simple de subcadenas. De este
tipo de algoritmos son los de Aho-Corasick, Multiple Shift-And y bsqueda
mltiple con autmata determinista.
Extensin del tipo 3 de algoritmos de bsqueda simple de subcadenas. De este
tipo son los algoritmos de Commentz-Walter, Set Horspool, Wu-Manber
Extensin del tipo 4 de algoritmos de bsqueda simple de subcadenas. De este
tipo son los algoritmos SBOM, Mltiple BNDM,DAWG-MATCH.
Extensin del tipo 5 de algoritmos de bsqueda simple de subcadenas

Algoritmo de fuerza bruta :

Se alinea la primera posicin del patrn con la primera posicin del texto, y se
comparan los caracteres uno a uno hasta que se acabe el patrn, esto es, se encontr
una ocurrencia del patrn en el texto, o hasta que se encuentre una discrepancia.

Si se detiene la bsqueda por una discrepancia, se desliza el patrn en una posicin


hacia la derecha y se intenta calzar el patrn nuevamente.

En el peor caso este algoritmo realiza comparaciones de caracteres

Caractersticas
Es el algoritmo ms simple posible.
Consiste en probar todas las posibles posiciones del patrn en el texto.
Requiere espacio constante.
Realiza siempre saltos de un carcter.
Compara de izquierda a derecha.
Realiza la bsqueda del patrn en un tiempo O(mn).
Realiza 2n comparaciones previstas de los caracteres del texto.

Implementacin del Algoritmo de fuerza bruta en java


Para poder implementar este algoritmo seguimos la siguiente lgica:
Se sita el patrn en la primera posicin, y se compara carcter a carcter hasta
encontrar un fallo o llegar al final del patrn.
Se pasa a la siguiente posicin y se repite el proceso.
El proceso finaliza al alcanzar el final del texto
No existe un preprocesamiento del patrn.

Implementacin en Java:

public static void fuerzabruta(char[] texto, char[] patron, int n, int m) {


// texto es el texto donde se buscara el patron
// n cadena
// m patron
int k, j;
int contador = 0; // verificar si hay ocurrencias o no
for (int i = 0; i <= n - m; i++) { // rompe el bucle al final restado del patrn
k = i; //k el inicio del carcter a comparar en el texto
j = 0; // j el inicio del caracter a comparar en el patrn
while (j < m && texto[k] == patron[j]) { //comparamos el texto con el patrn
k++; // j debe ser menor al patrn
j++;
} //rompe el bucle cuando encuentra el patrn en el texto
if (j > m - 1) { //verifica e imprime la posicin de la coincidencia
System.out.println("se encuentra en la posicin :" + (i + 1));
contador ++;
}
}
if (contador == 0) { // Se imprime si no se encontr el patron
System.out.println("no se encuentra");
}
}
Anlisis (Asinttico) Comparativo de Tiempo de ejecucin
Sea m la longitud del patrn, n sea la longitud del texto buscable y k =|| El tamao
del alfabeto.
Algoritmo Tiempo de Pre- Tiempo de
procesamiento coincidencia
Nave string search algorithm 0 (no preprocessing) (nm)
RabinKarp string search (m) average (n + m),
algorithm worst ((nm)m)

Finite-state automaton based (mk) (n)


search
KnuthMorrisPratt (m) (n)
algorithm
BoyerMoore string search (m + k) best (n/m),
algorithm worst O(mn)

Explicacin paso a paso:

Para la bsqueda:

Consiste en la comparacin de todas las posiciones del texto entre 0 y el n - m, si una


ocurrencia del patrn corresponde o no.
Si encuentra una no ocurrencia, o una ocurrencia total del patrn, salta un carcter
hacia la derecha.
Comparamos el patrn con la longitud del texto caracter por caracter, si hay
coincidencia avanzamos de posicin haciendo una comparacin cada vez q avanza:.
Cuando llegamos a una caracter distinto al patrn, recorremos un espacio a la derecha
sin importar cuantos caracteres hayan coincidido, solo recorremos un espacio a la

derecha y seguimos comparando caracter por caracter:

Hasta encontrar el patrn en el texto:

Seguimos recorriendo hasta el final para encontrar ms ocurrencias.


Conclusiones.
Las conclusiones obtenidas despus de haber estudiado el algoritmo de fuerza bruta
para bsqueda de patrones en un texto son las siguientes:

Es el algoritmo MS SIMPLE posible, por este motivo normalmente es el


primero en implementarse pero no es el mas recomendable por ser el peor
asintticamente.
Consiste en probar todas las posibles posiciones del patrn en el texto. Debido
a esta caracterstica hace que este algoritmo sea constante en su tiempo de
ejecucin.
Compara de IZQUIERDA A DERECHA. Este algoritmo esta su clasificado por
su comparacin en donde tambin se encuentra Knuth-Morris-Pratt.
Realiza la bsqueda del patrn en UN TIEMPO O(mn). Y con este tiempo se
vuelve el peor comparado con otros algoritmos de su tipo.
BIBLIOGRAFA
Robert S. Boyer and J. Strother Moore. A fast stringsearching algorithm.
Communications of the ACM , 20(10):762772, 1977.
Zvi Galil and Joel Seiferas. Timespaceoptimal string matching. Journal of Computer
and System Sciences , 26(3):280294, 1983.
Donald E. Knuth, James H. Morris, Jr., and Vaughan R. Pratt. Fast pattern matching
in strings. SIAM Journal on Computing , 6(2):323350, 1977.
William J. Masek and Michael S. Paterson. A faster algorithm computing string edit
distances. Journal of Computer and System Sciences , 20(1):1831, 1980.
Tuck, N., Sherwood, T., Calder, B., & Varghese, G. (2004, March). Deterministic
Memoryefficient string matching algorithms for intrusion detection. In INFOCOM
2004. Twentythird AnnualJoint Conference of the IEEE Computer and
Communications Societies (Vol. 4, pp. 26282639). IEEE.
Danvy, O., & Rohde, H. K. (2006). On obtaining the boyermoore stringmatching
algorithm by partial evaluation. Information Processing Letters , 99 (4), 158162.
Galil, Z. (1995). A constanttime optimal parallel stringmatching algorithm. Journal
of the ACM (JACM) , 42 (4), 908918.
Hall, P. A., & Dowling, G. R. (1980). Approximate string matching. ACM computing
surveys (CSUR) , 12 (4), 381402.
Breslauer, D., & Galil, Z. (1990). An optimal O(\log\logn) time parallel string
matching algorithm. SIAM Journal on Computing , 19 (6), 10511058.
Galil, Z., & Giancarlo, R. (1988). Data structures and algorithms for approximate
string matching. Journal of Complexity , 4 (1), 3372.
Larsson, N. J. (1999). Structures of string matching and data compression.
Department of Computer Science, Lund University.

You might also like