寻求有关使用DAWG实施文字游戏的建议

问题描述 投票:0回答:1

我正在尝试使用以下规则来实现一个小游戏:给定一组随机字母(例如10个),我想找到一个可能由这些字母组成的所有可能的单词。我为此使用标准词典。

允许多次使用字母,并且不必使用所有字母,只要它能使单词包含4个或更多字符即可。我认为这类似于解决字谜,除了字母可以多次使用。

例如给的字母:q r b d t e s可能的字词:床上用品,甜点等。

寻找支持O(1)的数据结构以检查建议的单词是否在字典中,我找到了此paper,随后还找到了一个有效的Java DAWG实现here。>

[我被困在这里:

当尝试生成可以从这些字母中创建的可能单词的列表时,我想知道是否使用DAWG实现会丢失某些内容。我在这里看到了其他建议使用Trie并递归地遍历节点的线程,但我希望可以使用DAWG做类似的事情。

我当前正在执行的实现方式是遍历字典中的所有单词,然后跳过包含不属于先前分配的字母的字母的任何单词。这可行,但是很慢,要遍历字典中的所有单词*最坏的情况是〜20个字母。

for(String word : dawg.getAllStrings()) {
     boolean blacklist = false;
     for(int i = 0; i<nonLetters.length(); i++) {
         if(word.indexOf(nonLetters.charAt(i)) >= 0) {
             blacklist = true;
             break;
         }
     }

     if(!blacklist)
         possibleWordList.add(word);
}

[我尝试实现递归字匹配,但是由于实现未公开对其Node实现的访问而感到苦恼,不过我可以在本地进行更改。

没有访问该节点的权限,我可以使用dawg.contains(letter),但是由于要求多次使用字母,我想知道这样做是否真的有帮助。例如。我将从“ A”开始,然后从“ AA”开始,...例如20A。

使用Trie,这一切会更容易吗?找到匹配的单词还相当快,但是更容易生成可能的单词列表?

是否有其他DAWG库公开Node遍历或具有ref实现以生成所有可能的单词?

感谢您的帮助或指点!

我正在尝试使用以下规则来实现一个小游戏:给定一组随机字母(例如10个),我想找到一个可以从这些字母中形成的所有可能的单词。我正在使用标准的...

java trie anagram dawg
1个回答
0
投票

我有一个主意,我不确定,但希望能对您有所帮助。首先将字典创建为工作键,该键将是单词包含的所有字母的字母顺序。例如:经典-> acils,字母->埃尔特。类似于随机字符串。您可以为此准备程序。并获得浏览复杂度为O(n)的字典所需的一切]

© www.soinside.com 2019 - 2024. All rights reserved.