我试图在iphone上创建这个应用程序给出6个字母,它会输出所有可能的3-6个字母的英文单词。我已经有了一本字典,我只是想知道怎么做。
我四处搜索,只在python或那些单词搜索网格解决方案中找到了那些拼字游戏求解器。
我认为蛮力搜索会做,但我关注的是性能。代码是没有必要的,一个算法或算法本身的链接会很好,我想我能够管理一次。
谢谢!
答案 0 :(得分:1)
如果您担心性能问题,这种方法可能会有所帮助。它涉及一些预处理,但允许几乎即时查找字谜。
创建一个将String键映射到字符串列表的数据结构(我更熟悉Java,因此在这种情况下它将是Map<String,List<String>>
)这将存储您的字典。< / p>
定义一个函数,该函数接受一个字符串并输出按字母顺序排列的相同字母。例如,hello
将成为ehllo
; kitchen
将成为cehiknt
。我将此功能称为keyify(word)
以下是预处理部分:对于词典中的每个项目,找到该项目键的列表(keyify(item)
)并将该项目添加到列表中。
当需要查找给定单词的字谜时,只需在该单词的keyify
处查找列表即可。例如,如果输入为kitchen
,则keyify
将为cehiknt
,并在地图中查找该列表时应生成包含kitchen
,{{1}的列表和我忘记的其他任何厨房字谜:P
答案 1 :(得分:0)
看看这个答案:Algorithm to generate anagrams..看看杰森科恩的答案。按字母顺序排列6个字母的单词,然后运行你的字典并对该单词进行alphabatize并进行比较。
答案 2 :(得分:0)
几个星期前我实际上碰到了这个问题,我能找到解决问题的最有效方法是
我找到了给定字符串的所有子集(这将采用O(2 ^ n))
然后我查看了我的字典,看看子集是否“用完”了那个大小的所有字符串的所有字符
例如给出字符串“hetre” 你的字典中有“the,there,her”字样 你可以计算所有子集
{h} {e} {t} {r} {e} {he} {ht} {hr} {he} {het} {her} {reh} ...有32个“hetre”子集
然后检查这些子集中的任何一个是否与这种情况下字典中的单词类似 reh和她相似,这意味着她是一个可以使用的词
这是我能想到的最有效的方式
研究PowerSets并想出一种可以编写“用完”字符串的函数的方法
另一种方法是通过找出字符串的powersets并查找所有排列来强制它,这将破坏性能
在我开始使用第一种方法输入超过15个字符的字符串之前,我没有给我带来任何问题 使用第二种方法我直到7才得到问题