我正在尝试使用以下规则来实现一个小游戏:给定一组随机字母(例如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个),我想找到一个可以从这些字母中形成的所有可能的单词。我正在使用标准的...
我有一个主意,我不确定,但希望能对您有所帮助。首先将字典创建为工作键,该键将是单词包含的所有字母的字母顺序。例如:经典-> acils,字母->埃尔特。类似于随机字符串。您可以为此准备程序。并获得浏览复杂度为O(n)的字典所需的一切]