Professional Documents
Culture Documents
Qu es?
Es un algoritmo de bsqueda de subcadenas simple y por lo tanto su objetivo es
buscar la existencia de una subcadena dentro de una cadena. Para ello utiliza
informacin basada en los fallos previos, aprovechando la informacin que la propia
palabra a buscar contiene de s (sobre ella se precalcula una tabla de valores), para
determinar donde podra darse la siguiente existencia, sin necesidad de analizar
ms de 1 vez los caracteres de la cadena donde se busca.
Historia:
El algoritmo de bsqueda de cadenas Knuth-Morris-Pratt (KMP) busca la aparicin
de una palabra P dentro de una cadena de texto principal C.
Inventado por Knuth y Pratt e independientemente por J. H. Morris en 1977, pero
los tres lo publicaron en conjunto.
Algoritmo BsquedaKMP:
Entrada:
un array de caracteres, T (el texto donde se busca)
un array de caracteres, P (la palabra/s que se busca)
Salida:
un entero que expresa la posicin en T en la cual se encontr P.
(nota: opcionalmente puede convenir devolver un entero con
signo).
Definicin de variables:
un entero, k 0 (puntero de examen en T)
un entero, i 0 (la posicin del carcter actual en P, y avance
relativo respecto de k, para T)
un array de enteros, F (la tabla de fallo, calculada a
continuacin, o en otra parte)
Si tamao de T es mayor o igual que tamao de P entonces
Precalcular TablaKMP(P,F)
Mientras k + i es menor que la longitud de T, hacer
Si P[i] = T[k + i] entonces
Si i es igual a la longitud de P - 1 entonces
Devolver k
Fin si
Asignar i i + 1
Si no entonces
Asignar k k + i - F[i]
Si i es mayor que 0 entonces
Asignar i F[i]
Fin si
Fin si
Repetir
Fin si
Algoritmo TablaKMP:
Entrada:
un array de caracteres, P (la palabra/texto que va a ser
analizada)
un array de enteros, F (la tabla de fallos a rellenar) debe
tener el mismo tamao que P.
Salida:
nada, no devuelve valores( pero por referencia, devuelve la
tabla rellenada)