2011-07-27 12 views
3

私はこの6つの文字を指定すると、すべての可能な3から6文字の英語の単語を出力するこのアプリケーションをiPhoneで作成しようとしています。私はすでに辞書を持っています。それをやる方法を知りたいだけです。Objective-Cの混乱した文字ソルバー

私は周りを検索し、それらのスクラブルソルバーをPythonまたはそれらの単語検索グリッドソリューションで見つけました。

私はブルートフォース検索を行うと思いますが、私はそのパフォーマンスに懸念しています。コードは必要ではなく、アルゴリズムへのリンクやアルゴリズム自体はうまくいくでしょう。私が一度それを得ると管理できると思います。

ありがとう!

+0

までの問題を取得していない第二の方法を用いて、第1の方法 を使用して15文字以上の文字列を入力開始までの鉱山は私に問題を与えていないを破壊しますか? objective-c内のリンクやサンプルコードは非常に役立ちます。前もって感謝します。 – SwapnilPopat

答えて

1

パフォーマンスが懸念される場合は、この方法が役立ちます。いくつかの前処理が必要ですが、アナグラムをほぼ即座に検索することができます。

  1. (Iは、Javaをよりよく知っているので、その場合には、それはMap<String,List<String>>だろう)これはあなたの辞書を格納する文字列のリストに文字列のキーをマップするデータ構造を作成します。

  2. 文字列を受け取り、同じ文字をアルファベット順に出力する関数を定義します。たとえば、helloehlloになります。 kitchencehikntになります。この関数は、keyify(word)

  3. となります。辞書の各項目について、その項目のキーのリスト(keyify(item))を見つけてリストに追加します。

  4. 与えられた単語のアナグラムを調べるときは、その単語のkeyifyでそのリストを調べるだけです。入力がkitchenた場合たとえば、keyifycehikntだろう、と自分のマップにそのを探してkitchenchickenおよび他のものは何でも、私は忘れてしまった台所のアナグラムを含むリストをもたらすべきである:P

+0

偉大な解決策、タッシナリとJ.コーエンの答えへのリンクに似ています。私は、結果的に得られる単語が3〜6文字でなければならないので、問題がある部分は、そのマップを構築するだろうと思う。 :Sこの時点で、私はどのように実装するのか混乱しています。 – kazuo

+0

ルックアップマップに入れた元の辞書の項目をかなり簡単に制限できます。あなたが必要としないデータを入れる理由はありません。実装に関しては、私は客観的なCに精通していないので、私はそこにあなたを助けることはできません。 – Dylan

0

この回答を確認してください:Algorithm to generate anagrams..ジェイソンコーエンの答えを見てください。 6文字の英単語をアルファベット順に並べ替えて、辞書を実行し、その単語を英字化して比較します。

0

I実際には数週間前、この問題に走ったと私はそれを解決する方法を見つけ出すことができる最も効率的な方法は、

だった私は、与えられた文字列のすべてのサブセット(これはO(2^n)を取る)

を見つけました

次に、私の辞書を見て、文字列「hetre」 を与え例えばそのサイズ

のすべての文字列のすべての文字を「使い切る」セットとの言葉「そこに、彼女の」あなたの辞書 にあなたはすべてのサブセット

を計算することができています

{h} {e} {t} {r} {e} {he} {ht} {hr} {he} {her} {reh} ...

「hetre」の32のサブセットがあり、これらのサブセットのいずれかどうかを確認し、この場合に REHは、彼女が

を使用する言葉であることを意味している彼女に似て、辞書内の単語に似ています

これは私が

研究PowerSetsを考えると、あなたは、文字列

を「使い切る」もう一つの方法は、考え出すことによってそれをブルートフォースするだろうとの関数を書くことができ方法を考えることができる最も効率的な方法でした弦の力とすべての順列を見つけると、このwi LLパフォーマンス

私はあなたがどんな解決策を見つけた私は7

+0

文字列のpowersetをやったり、すべての組み合わせ/置換を見つけるより実用的な解決策になるのだろうかと疑問に思っていましたか? – kazuo

+0

あなたは文字列のpowersetを見つけてすべての文字列をチェックしてからすべての組み合わせと置換を見つけなければならないでしょう、パワーセットはすべてのサイズのすべての文字列を見つけるでしょう。この場合、置換は同じサイズの文字列 – dbarnes