私はJavaでBoggleのゲームを作ろうとしています。私のプログラムでは、ボードをランダム化すると、可能な組み合わせを繰り返し、有効な単語であるかどうかを確認するための辞書リストを作成します。それは正常に動作しますが、プログラムは3〜4分かかります。これは主に辞書のサイズによるものです。私が使っているものは約19kの言葉を持っていて、すべての組み合わせを比較するには時間がかかります。Javaの大きなリストの一部のみを繰り返します。
if (str.length()>3&&!key.contains(str)&&prefixes.contains(str.substring(0,3))&&dictionary.contains(str)){
key.add(str);
}
str
は組み合わせが生成されます。ここで私はより速くしようとしているコードの一部です。 prefixes
はこのように書きdictionary
に基づいて、私が作成したリストです:
str
はxskfjh」のようなjibberishときになるように、まさにそのような「ABB」と「傷」として辞書にすべての3つの文字の接頭辞を追加し
public void buildPrefixes(){
for (String word:dictionary){
if(!prefixes.contains(word.substring(0,3))){
prefixes.add(word.substring(0,3));
}
}
}
"辞書全体に対してチェックされることはありません。ちょうどprefixes
は1k単語のようなものです。
私は何をしようとしていることstr
と同じ最初の文字を持っている辞書で単語だけを反復することで、時間を削減されるので、str
は「修道院」であるならば、それだけでその言葉に対してstr
をチェックしますリスト全体ではなく「a」で始まります。これは、時間を大幅に短縮します。あるいは、同じプレフィックスを持つ単語に対してはstr
をチェックするだけです。私はJavaにはかなり慣れていますので、あなたの答えが分かりやすいのであれば、本当に感謝しています。
マップ>またはその行に沿ったものを使用したいかもしれません。これはあなたの検索を26のチャンクに分割し、いくらか検索を高速化します。しかし、おそらくあなたが探しているのは、グラフを効率的に構築して検索する方法です。 –
グーグルでこれを見つけました... http://www.wutka.com/dawg.html興味深いもの –
あなたはトライを再考しようとしています – AdamSkywalker