辞書のどれくらいの単語を組み合わせて1つの単語に一致させるかを確認する必要がある問題に取り組んでいます。例えば辞書の単語を組み合わせて1つの単語に一致させる
:
文字列 "hellogoodsir"、および辞書を考える:{こんにちは、良い、先生、行く、OD、E、L}、ゴールはへのすべての可能な組み合わせを見つけることです文字列を形成する。この場合
、結果が使用3 + 4 = 7ワード、または1 + 1 = 2の組合せをもたらす、ハロー+良い+サー、及びハロー+行く+ OD + SIRあろう。
私が思いついたのは、最初の文字(この例では「h」)で始まるすべての単語を1つのハッシュマップ(startH)に入れ、残りを別のハッシュマップ(endH)に入れるだけです。次にstartHハッシュマップのすべての単語を調べ、 "hellogoodsir"に新しい単語(start + end)が含まれているかどうかを確認します。ここで、endはendHハッシュマップのすべての単語です。そうであれば、一致する単語と等しいかどうかを確認し、使用された各単語の数の値でカウンタをインクリメントします。もしそれが含まれているがそれと等しくないならば、私は新しい単語(すなわちstart + end)を使って同じメソッド(再帰)を呼び出し、最後のハッシュマップの単語を新しい単語に追加して一致。
これは明らかに、多数の単語(および長い文字列が一致する)では非常に遅くなります。この問題を解決するより効率的な方法はありますか?
私が知る限り、これはO(n^2)アルゴリズムですが、これはもっと速くできると確信しています。
あなたが提案していることを100%確信しているわけではありませんが、実際にすべての「異なるビルド」(すなわち、各可能な解決策について、積極的にツリーの終わりを見つける)を繰り返しているようです。指数関数的な数があるので、これは指数関数的に行われます。 – amit