No es probable que el análisis de tiempo de ejecución asintótico sea la mejor herramienta para elegir entre estos dos algoritmos: el análisis asintótico ignora factores constantes, y los factores constantes serán críticos aquí. Los dos algoritmos tienen básicamente el mismo tiempo de ejecución asintótico, por lo que el análisis asintótico probablemente no sea muy útil para elegir entre ellos.
En cambio, la forma correcta de elegir entre los dos algoritmos es a través del análisis experimental. Identifique una carga de trabajo representativa y luego compare el rendimiento de ambos algoritmos en su carga de trabajo, en los tipos de máquinas que piensa usar en la práctica.
Por cierto, parece que podría tener una ligera confusión sobre el tiempo de funcionamiento asintótico de Rabin-Karp. Por un lado, dice que Rabin-Karp tiene tiempo de ejecución, pero luego, en la siguiente oración, dice que Rabin-Karp tiene tiempo de ejecución. Quizás esté confundido por la diferencia entre el tiempo de ejecución esperado (caso promedio) y el peor de los casos.O ( n + m )O(nm)O(n+m)
Dado que Rabin-Karp es aleatorio, el tiempo de ejecución esperado (caso promedio) es la métrica adecuada para predecir el rendimiento en la práctica en el mundo real. En particular, aquí el promedio se toma sobre la elección aleatoria de la función hash. Específicamente, no es un promedio tomado de la elección de cadenas. Incluso para la peor cadena y patrón posibles, el tiempo de ejecución promedio seguirá siendo . Con una función hash adecuada, la probabilidad de que el tiempo de ejecución sea mayor que es exponencialmente pequeña en . Para decirlo de otra manera (y ser un poco informal), solo hay una posibilidad exponencialmente pequeña de que Rabin-Karp tarde más quec ⋅ ( n + m ) c O ( n + m )O(n+m)c⋅(n+m)cO(n+m)hora. Ya tenemos que aceptar posibilidades exponencialmente pequeñas de que sucedan cosas malas; por ejemplo, hay una pequeña pero no nula posibilidad de que un rayo cósmico provoque un cambio de bits en su memoria que haga que el programa se repita para siempre. Entonces, preocuparse por esta posibilidad exponencialmente pequeña no tiene sentido.
Desde el punto de vista de la ingeniería, el tiempo de ejecución de Rabin-Karp es [o bien podría serlo]. Ignora el material ; eso no es realmente relevante para la práctica.O ( n m )O(n+m)O(nm)