2012-09-03 21 views
9

可能性の重複:私は部分文字列検索のパフォーマンスを比較し、スタックオーバーフローここで多くの記事を読みました
How is string.find implemented in CPython?pythonの効率的な部分文字列検索

(例えばPython string search efficiencyIs this the most efficient way to search for a substring?substring in pythonなど)

また、ソースc odeの実装にはabstract.cが含まれています。私の知る限り、内蔵の実装を参照として

は反復いずれかです。python docs

は、Pythonの部分文字列を見つけるためのより十分な技術の実装を持っている:Boyer–Moore AlgorithmRabin–Karp algorithm、等... ? ?

EDIT

は、問題が拡張されました: 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 Rabin-Karpと比較すると面白いです。 – Michael

+0

@Martijn Pieters:notice string_containsへのリンクを追加する前に私はこの質問をしました。 – Michael

答えて

9

実際のCPythonの列検索の実装はここにある:

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

ボイヤー - ムーアを使用するように見えます。

+0

ありがとう、私この回答を受け入れますが、Rabin Karpにもそのような実装があれば私は興味があります。 – Michael

+0

他の答えのコメントを参照してください、それはB-Mではなく、いくつかのHorspoolとB-Mのインスピレーションを受けています(http://effbot.org/zone/stringlib.htmを参照)。 –

1

コアの実装では、このレベルの機能は提供されません。

Googleを使用して、Boyer-MooreまたはRabin-Karp for Pythonの実装を見つけることができます。

+2

厳密に言えば、CPythonはBMRKを使用していませんが、BMベースのアルゴリズムを使用してサブラインのパフォーマンス(良いこと)を提供することができます:[The stringlib Library](http://effbot.org/zone/stringlib.htm) – jfs

関連する問題