He estado atrapado durante algún tiempo en cuál es el algoritmo de búsqueda de cadenas más rápido, escuché muchas opiniones, pero al final no estoy seguro.
He escuchado a algunas personas decir que el algoritmo más rápido es Boyer-Moore y algunos dicen que Knuth-Morris-Pratt es en realidad más rápido.
He buscado la complejidad en ambos, pero en su mayoría se ven iguales O(n+m)
. He descubierto que en el peor de los casos, Boyer-Moore tiene una O(nm)
complejidad en comparación con Knuth-Morris-Pratt que tiene O (m + 2 * n). Donde n = longitud del texto ym = longitud del patrón.
Hasta donde yo sé, Boyer-Moore tiene un peor tiempo lineal si usara la Regla de Galil.
Mi pregunta, sobre todo, que en realidad es el algoritmo de búsqueda de cadenas más rápido (esta pregunta incluye todos los algoritmos de picadura posibles, no solo Boyer-Moore y Knuth-Morris-Pratt).
Editar: debido a esta respuesta
Lo que estoy buscando exactamente es:
Dado un texto T
y un patrón P
, tengo que encontrar todas las apariencias P
en T
.
También la longitud de P y T es de [1,2 000 000]
y el programa tiene que ejecutarse por debajo de 0,15 segundos.
Sé que KMP y Rabin-Karp son suficientes para obtener un puntaje del 100% en el problema, pero por mi parte quería intentar implementar Boyer-Moore. ¿Cuál sería el mejor para este tipo de búsqueda de patrones?