[英]How to generate unique combinations of the alphabet up to length 6?
我正在創建一個簡單的程序,以查看哪種字母組合為 NY Times Spelling Bee 拼圖生成了最可能的單詞。 到目前為止,我擁有的是一個包含 80,000 多個單詞的文本文件和下面的代碼,它天真地選擇了所需的字符,然后生成了 6 個字符的隨機組合。 然后我編譯我的模式並針對已知單詞的集合進行測試。 這個解決方案需要優化,因為有 26^7 組合需要測試。
該解決方案可以通過以下幾種方式進行優化:
int numMaxSolutions = 0;
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
for (char keyChar : alphabet) {
for (char a : alphabet) {
for (char b : alphabet) {
for (char c : alphabet) {
for (char d : alphabet) {
for (char e : alphabet) {
for (char f : alphabet) {
char[] optionalChars = new char[]{a,b,c,d,e,f};
Pattern pattern = this.constructPattern(keyChar, optionalChars);
List<String> results = new ArrayList<String>();
for (String word : words) {
if (word.length() >= this.minLength && pattern.matcher(word).matches()) {
results.add(word);
}
}
if (results.size() > numMaxSolutions) {
numMaxSolutions = results.size();
System.out.println(String.format("Max: %c-%s (%d)", keyChar, String.valueOf(optionalChars), numMaxSolutions));
}
}
}
}
}
}
}
}
我怎樣才能實現前兩個?
我會 go 反過來,而是循環遍歷已知單詞的列表。
例如在偽代碼中:
Map<String,Integer> combination2Count = new HashMap<>();
for (word in list){
String sortedCharacters = sortCharactersAlphabetically(word);
combination2Count.put(sortedCharacters, current count + 1);
}
現在您搜索計數最高的條目。 這為您提供了字符與最有效單詞的組合。
如果您還需要這些單詞,您可以將 map 調整為Map<String,List<String>>
其中List<String>
包含該字符組合的單詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.