我試圖在Java中創建一個Boggle遊戲,並且對於我的程序,一旦我隨機化了該板,我有一種方法可以遍歷可能的組合,並將每一個與一個字典列表來檢查它是否是一個有效的單詞,如果是的話,我把它放在關鍵字中。它工作正常,但程序需要三到四分鐘來生成密鑰,這主要是由於字典的大小。我使用的是約19k字,比較每個組合需要花費大量的時間。下面的代碼中,我試圖做出更快的一部分:遍歷java中的大部分列表
if (str.length()>3&&!key.contains(str)&&prefixes.contains(str.substring(0,3))&&dictionary.contains(str)){
key.add(str);
}
其中str
產生的組合。 prefixes
是一個列表我生成基於dictionary
認爲是這樣的:
public void buildPrefixes(){
for (String word:dictionary){
if(!prefixes.contains(word.substring(0,3))){
prefixes.add(word.substring(0,3));
}
}
}
這只是增加了所有的三個字母前綴在詞典如「ABB」和「月」,這樣,當str
是jibberish像「xskfjh 「它不會被整個字典檢查,只是prefixes
這就像1k字。
我試圖做的是通過僅在具有相同的第一個字母爲str
字典中的單詞進行迭代削減時間,所以如果str
是「修道院」,那麼它只會檢查str
對詞從「a」開始,而不是整個列表,這將大大縮短時間。或者甚至更好,它只檢查str
對具有相同前綴的單詞。我對Java很新,所以如果你的答案非常具有描述性,我會非常感激,謝謝!
看起來您可能想要使用地圖>或沿着這些線的東西。這將你的搜索分成26個大塊,並且會加快搜索速度。但你可能正在尋找的是一種有效的方式來建立和搜索一個圖形 –
發現這個雖然谷歌搜索... http://www.wutka.com/dawg.html有趣的東西 –
你試圖重塑Trie – AdamSkywalker