如何找到所有可能的单词?

时间:2013-11-29 19:58:28

标签: algorithm graph-algorithm

在iPhone上的Word Scramble游戏中,游戏会告诉您在每场比赛结束时可以有多少潜在的单词。

我想创建自己的Word Scramble游戏并且也有这个功能,但我无法弄清楚他们是如何计算的。

他们不可能通过游戏中的每个组合来查明它是否是一个词,对吧?这是一个5x5的随机字母板。单词最多可以包含11个字母。

在这里帮助我,我被踩了。

游戏看起来像这样:

您可以用手指在限定时间内使用字母制作单词。

2 个答案:

答案 0 :(得分:0)

免责声明:我只看过这样的游戏,没有实现类似的游戏。

你可以使用一些回溯算法来做到这一点,后者生成单词并在字典中搜索它们。但是,对于5x5主板,这将非常慢。因此,如果您已经生成了一些单词,那么您可以搜索可以进一步生成的单词数量。例如,如果您已生成the,则必须从the..开始搜索单词数量;如果该数额太低(比如“yoe”),那么您可以停止进一步搜索。通过这种方式,您可以修剪搜索树并实现目标。如果你的dictinary被排序,那么你可以通过使用简单的上限和下限(二进制搜索修改)来实现O(log(number_of_words))的复杂性。

在生成棋盘和答案时可以帮助的另一件事是让游戏与用户更具互动性 - 给他/她一些时间来查看他/她的分数,其他人的分数等等,并开始一个新的那个时期之后的游戏(也许大约10秒就足够了)。通过这种方式,您可以在下一个板上预先计算几乎所有可能的单词。

答案 1 :(得分:0)

替代解决方案是使用trie和所有有效单词。您可以利用它的结构来有效地修剪搜索空间。

可能组合数量的粗略上限,对于5x5板,单词最多11个字母,为100,000,000个单词。其中大多数不是有效的单词(如图像最后一行中的TNPU)。因此,在搜索期间进行适当的修剪以及为词典快速建立数据结构时,您应该能够在现代智能手机上快速完成这项工作。