¿Qué significa bm?

BM es un algoritmo de coincidencia.

El algoritmo BM se considera un algoritmo de coincidencia de cadenas sublineal. La complejidad temporal de encontrar todas las apariciones del patrón en el peor de los casos es O(mn). O (mn) y encontrar todas las apariciones del patrón. La complejidad temporal es O (n/m).

La idea principal del algoritmo BM se describe a continuación:

El orden coincidente de las cadenas de patrones es de derecha a izquierda:

1. alinear P y T, es decir, p y t están alineados

2. Luego, la coincidencia comienza desde el carácter más a la derecha de la cadena de patrón P, es decir, se juzga si p [m] y t [. m] coincide:

Si coinciden Si tiene éxito, muévase hacia la izquierda para determinar si p[m-1] y t[m-1] coinciden, y el ciclo continúa si la coincidencia no tiene éxito, la cadena se desliza; se realiza.

El principio del algoritmo BM:

A diferencia de la comparación carácter por carácter del modo ingenuo (búsqueda de fuerza bruta), Boyer-Moore aprovecha al máximo la información del preprocesamiento. P para omitir más actualizaciones tanto como sea posible. Muchos personajes. Normalmente, cuando comparamos una cadena, comenzamos desde la primera letra y las comparamos una por una. Una vez que se encuentran diferentes personajes, la siguiente comparación debe realizarse desde cero.

De esta manera, todos los caracteres de la cadena deben compararse uno por uno. La clave del algoritmo de Boyer-Moore es que después de comparar el último carácter de P, podemos decidir omitir uno o más caracteres. Si el último carácter no coincide, no es necesario seguir comparando el carácter anterior.

Si el último carácter no aparece en P, entonces podemos omitir directamente los n caracteres de T y comparar los siguientes n caracteres, donde n es la longitud de P (ver definición).

Si el último carácter aparece en P, entonces se debe calcular el número de caracteres omitidos (es decir, P se retrocede en su totalidad) y luego se continúan los pasos anteriores para comparar. Mover caracteres de esta manera en lugar de compararlos uno por uno es la clave para que este algoritmo sea tan eficiente.