2012-09-03 15 views
9

Duplicar posible:
How is string.find implemented in CPython?pitón de búsqueda subcadena eficiente

He leído muchos puestos aquí en la pila de desbordamiento de comparar el rendimiento de la búsqueda de subcadena (por ejemplo Python string search efficiency, Is this the most efficient way to search for a substring?, substring in python, etc ...)

También he observado la fuente c La implementación ode contiene abstract.c.

Por lo que yo veo la aplicación integrada es un proceso iterativo uno: python docs

¿El pitón tener una implementación de técnicas más suficientes para encontrar una subcadena: Boyer–Moore Algorithm, Rabin–Karp algorithm, etc ... ?? ?

EDITAR

La pregunta se ha extendido: Python: Improving sub-string search by embedding sophisticated algorithms.

+2

rel: http://stackoverflow.com/questions/681649/how-is-string-find-implemented-in-cpython – georg

+0

+1 será interesante compararlo con Rabin-Karp – Michael

+0

@Martijn Pieters: notice que hice esta pregunta antes de haber agregado el enlace a string_contains. – Michael

Respuesta

9

La aplicación de búsqueda de cadenas CPython real es aquí:

http://hg.python.org/cpython/file/tip/Objects/stringlib/fastsearch.h

Parece utilizar Boyer-Moore.

+0

Gracias, yo aceptaré esta respuesta, aunque estoy interesado si existe tal implementación también para Rabin Karp. – Michael

+0

Ver el comentario en la otra respuesta, no es B-M, está inspirado (simplificado) por B-M con algo de Horspool y Sunday inchus. Consulte http://effbot.org/zone/stringlib.htm. –

1

La implementación principal no proporciona este nivel de funcionalidad.

Encontrará implementaciones para Boyer-Moore o Rabin-Karp para Python utilizando Google.

+2

Si bien, estrictamente hablando, CPython no utiliza BMRK, puede proporcionar un rendimiento sublineal (algo bueno) usando un algoritmo basado en BM: [La biblioteca de stringlib] (http://effbot.org/zone/stringlib.htm) – jfs

Cuestiones relacionadas