Sto provando a creare un gioco Boggle in Java, e per il mio programma una volta che ho randomizzato la scheda ho un metodo che scorre le possibili combinazioni e confronta ognuna con un elenco di dizionari per verificare se si tratta di una parola valida e, in caso affermativo, inserirla nella chiave. Funziona bene, tuttavia il programma impiega tre o quattro minuti per generare la chiave, che è principalmente dovuta alla dimensione del dizionario. Quello che sto usando ha circa 19k parole e il confronto di ogni combinazione richiede un sacco di tempo. Ecco la parte del codice che sto cercando di rendere più veloce:Iterate attraverso solo parte di un grande elenco in java
if (str.length()>3&&!key.contains(str)&&prefixes.contains(str.substring(0,3))&&dictionary.contains(str)){
key.add(str);
}
dove str
viene generata la combinazione. prefixes
è una lista che ho generato in base dictionary
che va come questo:
public void buildPrefixes(){
for (String word:dictionary){
if(!prefixes.contains(word.substring(0,3))){
prefixes.add(word.substring(0,3));
}
}
}
che aggiunge solo tutti e tre i prefissi lettera nel dizionario come "abb" e "mar" in modo che quando str
è jibberish come "xskfjh "Non verrà controllato contro l'intero dizionario, solo prefixes
, che è qualcosa come 1k parole.
Quello che sto cercando di fare è ridurre il tempo scorrendo solo le parole del dizionario che hanno lo stesso prima lettera come str
, quindi se str
è "Abbey" allora controllerà solo str
contro parole che iniziare con "a" anziché l'intera lista, che ridurrebbe in modo significativo il tempo. O ancora meglio, controlla solo str
contro parole che hanno lo stesso prefisso. Sono abbastanza nuovo in Java, quindi sarei davvero grato se sei molto descrittivo nelle tue risposte, grazie!
Sembra che si desideri utilizzare una mappa> o qualcosa del genere. Questo divide la ricerca in 26 blocchi e velocizzerà la ricerca. Ma quello che stai probabilmente cercando è un modo per costruire e cercare efficientemente un grafico –
Trovato questo mentre su Google ... http://www.wutka.com/dawg.html Cose interessanti –
Stai cercando di reinventare un Trie – AdamSkywalker