Vous êtes sur la page 1sur 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.






Marzo de 2014

2

NDICE GENERAL

INDICE GENERAL ........................................................................................................................... 2
ANTECEDENTES ............................................................................................................................. 3
Esquema Algoritmo .................................................................................................................. 4
EJEMPLO ...................................................................................................................................... 5
Aplicabilidad ............................................................................................................................. 7
COSTES ........................................................................................................................................ 8
ANLISIS ...................................................................................................................................... 9



3

ANTECEDENTES

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.

Vous aimerez peut-être aussi