深度搜索或回溯递归,以便在填字游戏/保护板中找到所有可能的字母组合?

时间:2015-06-11 05:33:54

标签: java c++ algorithm time-complexity boggle

时间复杂度是多少?我只想避免这种情况 O(n!)。使用深度优先搜索是时间复杂度 O(n ^ 2),对于每个字母,它可能必须通过所有其他字母最坏情况?

我想我不确定我是否正确地思考这个问题。

当我说使用深度优先搜索时,我的意思是从第一个字母开始深度优先搜索,然后从第二个字母开始,等等。

这有必要吗?

注意:
最初的问题是在填字游戏/保镖板中找到所有可能的单词。我正在考虑使用trie数据结构来查找单词是否在字典中,但我正在考虑自己生成单词的方法。

1 个答案:

答案 0 :(得分:0)

根据上面的讨论,这是我的答案:

定义trieX是一个子广告,只有X字长。

由于我们使用所需语言的所有单词,我们也可以获得相应的trieX

我们说填字游戏有w个单词,所以我们创建一个数组w,其中每个条目都是trieX的根,其中X是相关词的长度。这为我们提供了每个空白单词中可能的单词列表。

然后迭代单词之间的交叉点并消除无法放置的单词。如果没有更改,我们会停止。

两条评论:
1.为了提高性能,我们首先添加长词或非常短词。什么是短期还是长期?看看thisthis 2.删除trieX中的单词也可以通过检查单词之间的依赖关系来完成(如果这个单词在这里,则那些单词不能存在,等等)。这是更复杂的,所以如果有人想要如何轻松地添加一些想法 - 请做。