簡體   English   中英

如何生成長度為 6 的唯一字母組合?

[英]How to generate unique combinations of the alphabet up to length 6?

我正在創建一個簡單的程序,以查看哪種字母組合為 NY Times Spelling Bee 拼圖生成了最可能的單詞。 到目前為止,我擁有的是一個包含 80,000 多個單詞的文本文件和下面的代碼,它天真地選擇了所需的字符,然后生成了 6 個字符的隨機組合。 然后我編譯我的模式並針對已知單詞的集合進行測試。 這個解決方案需要優化,因為有 26^7 組合需要測試。

該解決方案可以通過以下幾種方式進行優化:

  • 不要重新生成相似或包含重復字母的可選字符 arrays。 “abcdef”與“fedcba”的結果相同。 同樣,“aaabcd”不會有與“abcdef”一樣多的解決方案,因為所有字母都可以重復使用。
  • 不要生成包含所需字符的可選字符 arrays。 可選字符數組中的點最好用於將新字符引入解決方案。
  • 還有什么我想不到的?
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM