时间复杂度是多少?我只想避免这种情况 O(n!)。使用深度优先搜索是时间复杂度 O(n ^ 2),对于每个字母,它可能必须通过所有其他字母最坏情况?
我想我不确定我是否正确地思考这个问题。
当我说使用深度优先搜索时,我的意思是从第一个字母开始深度优先搜索,然后从第二个字母开始,等等。
这有必要吗?
注意:
最初的问题是在填字游戏/保镖板中找到所有可能的单词。我正在考虑使用trie数据结构来查找单词是否在字典中,但我正在考虑自己生成单词的方法。
答案 0 :(得分:0)
根据上面的讨论,这是我的答案:
定义:trieX
是一个子广告,只有X
字长。
由于我们使用所需语言的所有单词,我们也可以获得相应的trieX
。
我们说填字游戏有w
个单词,所以我们创建一个数组w
,其中每个条目都是trieX的根,其中X
是相关词的长度。这为我们提供了每个空白单词中可能的单词列表。
然后迭代单词之间的交叉点并消除无法放置的单词。如果没有更改,我们会停止。
两条评论:
1.为了提高性能,我们首先添加长词或非常短词。什么是短期还是长期?看看this和this
2.删除trieX中的单词也可以通过检查单词之间的依赖关系来完成(如果这个单词在这里,则那些单词不能存在,等等)。这是更复杂的,所以如果有人想要如何轻松地添加一些想法 - 请做。