2012-09-03 13 views
9

Powiel możliwe:
How is string.find implemented in CPython?pyton wyszukiwania wydajny podciąg

Czytałem wiele postów tutaj na przepełnienie stosu porównującym skuteczność wyszukiwania podciągu (np Python string search efficiency, Is this the most efficient way to search for a substring?, substring in python, itp ...)

Sprawdziłem również źródło c implementacja zawiera zawiera abstract.c.

O ile widzę wbudowanej realizacja jest iteracyjny jeden: python docs

Czy Pythona mają implementacja bardziej odpowiednich technik w celu znalezienia podciąg: Boyer–Moore Algorithm, Rabin–Karp algorithm, etc ... ?? ?

EDIT

Kwestia została rozszerzona: 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 będzie interesujące porównanie go do Rabin-Karp – Michael

+0

@Martijn Pieters: informacja że zadałem to pytanie, zanim dodasz link do string_contains. – Michael

Odpowiedz

9

Faktyczna realizacja wyszukiwania CPython łańcuch jest tutaj:

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

Wydaje użyciu Boyer-Moore.

+0

Dzięki, ja przyjmie tę odpowiedź, chociaż jestem zainteresowany, czy taka jest implementacja również dla Rabina Karpa. – Michael

+0

Zobacz komentarz do drugiej odpowiedzi, to nie jest B-M, jest zainspirowany (uproszczony) przez B-M z Horspoolem i niedzielą wrzuconą. Zobacz http://effbot.org/zone/stringlib.htm. –

1

Podstawowa implementacja nie zapewnia takiego poziomu funkcjonalności.

Znajdziesz implementacje dla Boyer-Moore lub Rabin-Karp dla Pythona za pomocą Google.

+2

Podczas gdy ściśle mówiąc, CPython nie używa BMRK, może dostarczać sublinearną wydajność (dobrze) za pomocą algorytmu opartego na BM: [The Stringlib Library] (http://effbot.org/zone/stringlib.htm) – jfs