Comprender el algoritmo KMP

 

algoritmo de coincidencia KMP introducido por la violencia ---->

algoritmo de coincidencia de la violencia


 Problemas: Hay una cadena de texto S, y una cadena de patrón P, P ahora para encontrar la ubicación en S.

 Si la idea de la coincidencia de la violencia, y suponiendo ahora coincide con la cadena de texto S a la posición i, j para que coincida con la posición de la cadena patrón P, se encuentran:

  • Si el carácter actual coincide con éxito (es decir, S [i] == P [j]), entonces i ++, j ++, continúa para que coincida con el siguiente carácter;
  • Si la falta de correspondencia (! Es decir, S [i] = P [j]), de modo que i = i - (j - 1), j = 0. Cuando el fallo correspondiente a cada partido, i retroceso, j se establece en 0. (Cadena Anteriormente emparejado de buena-j full-1 volcado)

 

El ejemplo anterior :( S, por debajo de P)

Un ejemplo de coincidencia, de aquí en:

 

 Este partido tiene que ir:

 

 Aquí hay coincidencia en:

 

Rollback volver a empezar de nuevo:

 

Esta reversión pregunta es:

Antes del paso de adaptación 4, hemos aprendido que S [5] = P [1] = B, y P [0] = A, es decir, P [1]! = P [0], de modo que S [5] obligada no es igual a P [0], es inevitable que conducirá de nuevo desajuste pasado.

Es decir, en el cuadro rojo en la Figura B S sabíamos antes no significa seguir una caja roja A, dando marcha atrás espalda es inútil.

Que no hay ningún algoritmo de uno, así que no volver atrás, sólo se mueven a j?

SÍ  ===> el algoritmo KMP, la coincidencia parte tiene información válida antes de usarlo, i no se mantiene de nuevo, mediante la modificación de la posición j, lo más lejos posible de manera que la cadena de patrón de posiciones válidas.

 

algoritmo KMP

Knuth-Morris-Pratt algoritmo de búsqueda de cadenas, se refiere como "el algoritmo KMP", utiliza a menudo para encontrar la posición de un Aparece cadena de patrón P en una cadena de texto S , el algoritmo de Donald Knuth, Vaughan Pratt, James H. Morris en tres en 1977, publicado conjuntamente, por lo que escogió a los tres hombres llevan el nombre del algoritmo.

KMP dado directamente después de la primera algoritmo de proceso (descrito en detalle seguirá):

Supongamos ahora que coincide con la cadena de texto S a la posición i, j para que coincida con la posición de la cadena patrón P:

  • Si = -1 siguiente [j], o el juego de caracteres actual tiene éxito (es decir, S [i] == P [j]), han hecho i ++, j ++, continúa para que coincida con el siguiente carácter;
  • Si el siguiente [j]! = -1, y el carácter actual no coincide con (es decir, S [i]! = P [j]), el mismo para i, j = siguiente [j]. Esto significa que cuando una falta de coincidencia, la cadena patrón P j con respecto a la cadena de texto se mueve a la derecha S - próximos [j] bits. (A diferencia del movimiento por encima para que coincida con la violencia i)

Ejemplo:

Luego, busquen en el ejemplo anterior, donde se encuentra una coincidencia en no:

 

A continuación, volvemos a caer aquí ( no he cambiado, j mueven hacia la derecha 4 ==> ¿Por qué desea mover cuatro a la derecha de la misma, ya que después del movimiento cuatro, y había un patrón de encordado "AB" se puede continuar con S [8 ] S [9] corresponde a, por lo que no permito dar marcha atrás ): KMP la idea del algoritmo es tratar de utilizar esta información conocida, no a la posición "Buscar" para retroceder han comparado la posición, que continúa moviéndose hacia atrás, por lo para mejorar la eficiencia.

 

Puede verse que, cuando la cadena patrón de bits de desajuste se está moviendo hacia la derecha: el número de caracteres emparejados - máxima longitud falta de coincidencia en un personaje correspondiente al carácter

 

Ejemplo completo :

Si una determinada cadena de texto "BBC ABCDAB ABCDABCDABDE", y la cadena de patrón "ABCDABD", ahora llevarlo a hablar con una cadena de texto coincidente cadena de patrón.

número de bit Shift = número de caracteres que coincida con - el valor correspondiente a la coincidencia parcial   ==> longitud máxima mesa de matriz / NEXT

La longitud máxima del patrón original correspondiente a los respectivos prefijos de cuerda sub-secuencia y sufijos elementos comunes mesa / siguiente matriz es:

Nos fijamos en cómo se construye la tabla:

Longitud máxima (también referido como "valor de coincidencia parcial") es la longitud de "prefijo" y "sufijo" elementos más larga totales. Para "ABCDABD", por ejemplo,

  - "A" prefijo y sufijo son conjunto vacío, la longitud de los elementos comunes es 0;

  - el prefijo "AB" es [A], el sufijo es [B], la longitud de los elementos comunes es 0;

  - el prefijo "ABC" es [A, AB], el sufijo [BC, C], la longitud de los elementos comunes de 0;

  - "ABCD" prefijo al [A, AB, ABC], el sufijo [BCD, CD, D], la longitud de los elementos comunes es 0;

  - el prefijo "ABCDA" es [A, AB, ABC, ABCD], el sufijo [BCDA, CDA, DA, A], como elementos comunes "A", la longitud 1;

  - el prefijo "ABCDAB" es [A, AB, ABC, ABCD, ABCDA], el sufijo [BCDAB, CDAB, DAB, AB, B], los elementos comunes de "AB", una longitud de 2;

  - el prefijo "ABCDABD" es [A, AB, ABC, ABCD, ABCDA, ABCDAB], el sufijo [BCDABD, CDABD, DABD, ABD, BD, D], 0 es la longitud de los elementos comunes.

 

 

 Y luego copiar el proceso de algoritmo anterior:

  • Si = -1 siguiente [j], o el juego de caracteres actual tiene éxito (es decir, S [i] == P [j]), han hecho i ++, j ++, continúa para que coincida con el siguiente carácter;
  • Si el siguiente [j]! = -1, y el carácter actual no coincide con (es decir, S [i]! = P [j]), el mismo para i, j = siguiente [j]. Esto significa que cuando una falta de coincidencia, la cadena patrón P j con respecto a la cadena de texto se mueve a la derecha S - próximos [j] bits. (A diferencia del movimiento por encima para que coincida con la violencia i)

 

Ejemplo proceso de correspondencia es la siguiente:

 

1. Debido a que los caracteres de la cadena patrón de texto de una cadena de caracteres con B, B, C, el espacio no es el principio de una cadena perfil de compatibilidad directamente a la correcta puede continuar hasta que el modo de una cadena de caracteres con el texto quinta cadena de caracteres de una persona compatible:

 

2. continuar en el próximo partido, cuando la última cadena de texto cadena de patrón de caracteres D se combina con cadenas de patrones no coincidentes necesitan moverse a la derecha. ¿Cuántas hacer sino que se mueven hacia la derecha? Dado que en este momento tiene el número de caracteres que coincida con seis (ABCDAB), entonces las ganancias y pérdidas, de acuerdo con el carácter D "Longitud máxima" pueden ser la longitud de un carácter B correspondiente a un valor de 2 , por lo que de acuerdo con las conclusiones anteriores, muestra que un derecho móvil 6--2 = 4.


3. mover cadenas de patrones 4 a la derecha, una vez más se encuentra en la falta de coincidencia C, debido a que los dos caracteres se han emparejado (AB), y el carácter B que corresponde a un valor de longitud máxima de 0 , se mueve a la derecha: 2--0 = 2.

 

4. La falta de concordancia con el espacio, uno se mueve a la derecha.

 

La comparación continúa, D y C encontraron desajuste se mueve hacia la derecha de modo que el número de bits: 6 menos el número de caracteres que coincida con el carácter B que corresponden a una longitud máxima de 2 , es decir, movimiento hacia la derecha 6 - 2 = 4 .

 

6. Paso 5 después de experimentar (CDABD la coincidencia parcial), se encuentra una coincidencia exitosa, el proceso termina.

Como puede verse por el proceso de correspondencia, la cuestión clave es encontrar la misma cadena de prefijo y sufijo patrón de longitud máxima , con base en el partido.

 

referencia 1 

referencia 2

referencia 3

Supongo que te gusta

Origin www.cnblogs.com/shona/p/12571167.html
Recomendado
Clasificación