2012-01-09 10 views
2

私は、生成された文字列を指定された文字列に対してテストして、文字列または長さを知らずに一致するかどうかを調べるプログラムを作成しています。入力文字列も操作できません。文字列が一致するまでファイルからの読み込みの順列を高速かつ効率的に生成できますか?

PERMUTE「ABC ... XYZ」の長さ(1+)

のため:私のプロセスは、これまでの文字セットの順列を生成する強引な方法です。

しかし、順列を生成してファイルに保存し、一致している間にファイルからその行を読み取る方が良いか速いのか疑問に思っていますか?もちろん、あらかじめファイルを生成しておいてください。

答えて

0

確率のようではありません。コードは新しい順列を生成するために最大で約10回の操作が必要であり、ディスクからの読み込みよりも高速です

+0

ありがとう、それは私の質問に答える! – Aaron

0

その場合には、あなたがバインドされ、ディスクIOだろうが、あなたの生成されたコードの小さな一部がキャッシュから実行しますので、string matching algorithmを使用するために、より速く、より効率的で、Aho-Corasick.

+0

ありがとう、私もこれを試してみましょう! – Aaron

0

ブルートフォースの順列はひどい音です(パフォーマンスは賢明です)。あなたはいくつかの例を挙げて、何を合わせることができますか? Stringは繰り返しのように聞こえますが(foo)、setほどではありません。

stack => ackst 
tacks => ackst 

hello => ehllo 
oloeh => ehloo 

:「鋲」より急速にあなたは両方を並べ替えることができ、より一層多くの場合、いくつかの文字を含む、文字列のために働くことになる、彼らは同じであるかどうか、チェックして「スタック」を一致させるために

サイズが一致した場合に

"tacks".matches ("[stack]+") 

、彼らは繰り返し文字で文字列を一致させるために失敗します:セットは、あなたは正規表現を使用することができます。

+0

これは文字列であり、セットではありません。残念です。しかし、私はそれを入力文字列に対してのみチェックしています、入力文字列の操作は許可されていません。 – Aaron

+0

入力文字列のコピーでもありませんか?あなたはその質問に言及すべきです。 –

関連する問題