Este documento describe el algoritmo de Boyer-Moore para la búsqueda de patrones en cadenas de caracteres. El algoritmo minimiza el número de comparaciones requeridas mediante el desplazamiento del patrón la máxima distancia posible cuando ocurre una discrepancia. Esto lo hace más eficiente que algoritmos previos que comparaban caracter a caracter de izquierda a derecha. El documento explica la lógica del algoritmo a través de un ejemplo y analiza su complejidad computacional, concluyendo que es el método más rápido conocido para esta tarea
0 calificaciones0% encontró este documento útil (0 votos)
275 vistas9 páginas
Este documento describe el algoritmo de Boyer-Moore para la búsqueda de patrones en cadenas de caracteres. El algoritmo minimiza el número de comparaciones requeridas mediante el desplazamiento del patrón la máxima distancia posible cuando ocurre una discrepancia. Esto lo hace más eficiente que algoritmos previos que comparaban caracter a caracter de izquierda a derecha. El documento explica la lógica del algoritmo a través de un ejemplo y analiza su complejidad computacional, concluyendo que es el método más rápido conocido para esta tarea
Este documento describe el algoritmo de Boyer-Moore para la búsqueda de patrones en cadenas de caracteres. El algoritmo minimiza el número de comparaciones requeridas mediante el desplazamiento del patrón la máxima distancia posible cuando ocurre una discrepancia. Esto lo hace más eficiente que algoritmos previos que comparaban caracter a caracter de izquierda a derecha. El documento explica la lógica del algoritmo a través de un ejemplo y analiza su complejidad computacional, concluyendo que es el método más rápido conocido para esta tarea
Este documento describe el algoritmo de Boyer-Moore para la búsqueda de patrones en cadenas de caracteres. El algoritmo minimiza el número de comparaciones requeridas mediante el desplazamiento del patrón la máxima distancia posible cuando ocurre una discrepancia. Esto lo hace más eficiente que algoritmos previos que comparaban caracter a caracter de izquierda a derecha. El documento explica la lógica del algoritmo a través de un ejemplo y analiza su complejidad computacional, concluyendo que es el método más rápido conocido para esta tarea
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 9
1
Repblica Bolivariana De Venezuela
Universidad de Oriente Ncleo Anzotegui Escuela de Ingeniera y Ciencias Aplicadas Departamento de Computacin Y Sistemas Taller De Anlisis Y Diseo De Algoritmos
Profesor: Claudio A. Cortinez.
Bachiller: Christian Ynez. Bachiller: Nelson Rodrguez.
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). Hasta un momento, los algoritmos de bsqueda en texto siempre comparaban el patrn con el texto de izquierda a derecha. Sin embargo, suponga que la comparacin ahora se realiza de derecha a izquierda: si hay una discrepancia en el ltimo carcter del patrn y el carcter del texto no aparece en todo el patrn, entonces ste se puede deslizar m posiciones sin realizar ninguna comparacin extra. En particular, no fue necesario comparar los primeros m-1 caracteres del texto, lo cual indica que podra realizarse una bsqueda en el texto con menos de n comparaciones; sin embargo, si el carcter discrepante del texto se encuentra dentro del patrn, ste podra desplazarse en un nmero menor de espacios. El algoritmo fue desarrollado por Bob Boyer y J Strother Moore en 1977. Boyer-Moore es considerado el algoritmo ms eficiente en la bsqueda de patrones en cadena de caracteres, como lo indicamos anteriormente este se basa en desplazar la ventana de comparacin lo mximo posible a costa de una computacin previa. La mayor eficiencia se consigue minimizando el nmero de comparaciones entre caracteres.
4
Esquema Algoritmo
BOYER_MOORE_MATCHER (T, P) Entrada: Texto n caracteres y Patrn m caracteres Salida: ndice de la primera subcadena T que coincide con P
1. Compute function last 2. i m-1 3. j m-1 4. Repeat 5. If P[j] = T[i] then 6. if j=0 then 7. return i // we have a match 8. else 9. i i -1 10. j j -1 11. else 12. i i + m - Min(j, 1 + last[T[i]]) 13. j m -1 14. until i > n -1 15. Return "no match"
5
EJEMPLO
Notacin
y: cadena dnde se busca. x patrn de bsqueda. | y | = n, longitud de y. | x | = m, longitud de x. j: posicin en y desde dnde se prueba la coincidencia. i: posicin en x de comparacin, dnde se produce una no coincidencia , y[j+i] <> x[i], y[j+i] = b, x[i] = a. u: coincidencia en la comparacin, sufijo de x, u = y[j+i+..j+m] = x[i+1..m-1]. v: prefijo de x. s: salto del patrn para la siguiente comparacin.
Al producirse una ocurrencia del patrn, o un error en la comparacin de un carcter, se calcula el desplazamiento mximo del patrn a lo largo de la cadena de bsqueda. Partimos de una situacin en que no hay coincidencia, existe diferencia entre y[j+i] y x[i], pero las posiciones de x siguientes a i s coinciden con sus asociadas en y, u = y[j+i+..j+m] = x[i+1..m-1]; hacer notar que u es sufijo de x. El desplazamiento de x a lo largo de y se limita a causa del carcter en y que produjo la no coincidencia, y[i+j] (1), y los caracteres de x posteriores a i (2), sufijo de x que tena coincidencia parcial con y. (1) Teniendo en cuenta el carcter que produjo la no coincidencia en y, y[i+j] = b, el desplazamiento mximo, s, ser la distancia entre la aparicin ms a la derecha de b en x[0..m-2] y la longitud de x, m. La nueva j sera j=j+s, lo que se consigue es alinear las dos coincidencias de b en x e y, desde dnde es posible que se produzca una coincidencia del patrn. Se considera el intervalo 0..m-2, porque si se da el caso de que b es igual al ltimo carcter de x, el desplazamiento sera 0, y podra provocar un bucle infinito debido a que el patrn no vara su posicin. (1)
6
(2) Teniendo en cuenta los caracteres posteriores a i en x (u, sufijo de x), que coinciden de forma parcial con y, hay que alinear u lo ms a la derecha posible de x, sin que est precedido por x[i] = a (2.a); al no estar u ya precedido por x[i] = a <> x[i-s] = c, en la nueva posicin de x respecto de y, sabemos que existe la coincidencia u precedida por c, es posible que se produzca una ocurrencia en y. Si no se encuentra la situacin anterior, se tratar de alinear el mayor sufijo posible de x con un prefijo v tambin de x (2.b); como u coincide parcialmente en y, al buscar el prefijo v de x que tambin es sufijo de x, v tambin est en y. Si no se producen ninguno de los dos casos anteriores, el patrn se podr desplazar toda su longitud. (2.a)
(2.b)
El desplazamiento de x a lo largo de y ser el mximo desplazamiento entre los dos anteriores, (1) y (2).
7
Aplicabilidad
Boyer-Moore al ser el algoritmo de bsqueda general ms eficiente este es implementado en las aplicaciones ms habituales, como por ejemplo los editores de texto, los navegadores de internet, los lectores de libros electrnicos.
8
COSTES
En el mejor caso, el primer elemento del patrn no est en el texto, de manera que ningn carcter coincide con l. Tenemos un coste temporal de orden O(n), el algoritmo es lineal. En el peor caso el coste temporal de este algoritmo es de O (mn), que sera aquel en el que encontramos el patrn en todas las subcadenas del texto. En promedio el coste temporal es menor que O(mn), ya que no precisamos comparar cada vez los m caracteres, slo comparamos hasta que se detecta un fallo y las probabilidades de falsos comienzos son muy inferiores a 1 en general. Si buscamos en textos normales ser de orden O(m+n) en la mayora de los casos. El coste espacial es nulo, salvo que consideremos parte del algoritmo los buffers empleados para almacenar el patrn y la subcadena del texto con la que este est alineado, en cuyo caso ser de O(m).
9
ANLISIS
Este es el algoritmo ms rpido para la bsqueda de un solo patrn en la teora y en la prctica. El clculo del tiempo de ejecucin para Boyer-Moore es de O( m + n) y en bsqueda en tiempo real O( mn ). Por tanto, en el peor de los casos el tiempo de algoritmo de Boyer-Moore de ejecucin es O(mn) . Implica que el tiempo en el peor caso de funcionamiento es cuadrtica, en el caso de que n = m , la misma que la del algoritmo de nave. El algoritmo de Boyer-Moore es extremadamente rpido aun cuando exista un gran alfabeto. Para bsquedas binarias o patrones muy cortos el rendimiento es menor. Para cadenas binarias se recomienda algoritmo de Knuth-Morris-Pratt. Para los patrones que son demasiado cortos, el algoritmo de nave puede ser la mejor opcin.