2011-01-14 68 views
2

我正在用Java编写一个简单的程序。给定一组字母,它将列出与字母组合相匹配的所有单词(超过2个字母)。
例如:
给定的单词是病房。
结果应该是:病房DAW战争弧度
我有一个SQLite数据库在最初形成巨大的列表Ø英语单词和字母排序,这使选择更快。我可以使用什么模式来存储单词组合?


数据库模式是这样的:
词典:{ID,字,长度}
字谜:{ID,字谜,长度}
anagram_dictionary:{ID,word_id,anagram_id}


在相同的例子:
当字原料被插入
它搜索ARW,结果还给战争

我的问题在于,每次我做搜索的时候就做我给出的字母combinations的数学。

对于示例它使此数学:!(!3 * 1)
4 /(!4 * 1)+ 4/= 5

我的问题是给定的字母长度是16.因此,我必须在16 +组合16 + 16 +组合16 + 1 +组合16在1

我需要改进该方法,因为它需要年龄来给出一个简单的结果,但我现在不怎么样?所以我尝试在数据库中存储,但无法弄清楚如何?

在此先感谢

回答

2

林并不完全相信你的约束和资源,这将帮助我调整我回答,但在这里它去...

当您输入字典时,请执行一些预处理。就像CurtainDog所建议的那样计算频率。

现在,根据您的示例,您看起来像要查找给定单词的子集。您可以搜索其组合,或者可以消除那些不适合该子集的组合。

从而

获取字典从这个
,你定的字有A,所以跳过这封信从这个
,你定的字没有一个B,所以返回不所有单词由此得到一个B. ,你给定的单词没有C,所以返回所有没有C. 的单词,你的给定单词有一个D,改进了格式,所以跳过这个字母
etc ...

看起来你的担心似乎是运行时间越来越长,因为你给定的单词有更多的字母。 有了这个解决方案,运行时变得更好,更大的单词和更糟糕的情况下 是(26-2)*(词典中的字数)

0

在您的字典中,存储每个字母的频率。然后,只建立你的选择,只返回字母频率匹配的单词(或者如果你想能够返回部分字母则更小)

+0

我已经保存了某种频率,但我仍然需要所有可能的字母组合以匹配频率。我该如何改进? – 2011-01-14 03:06:07

+0

为什么你需要让所有组合匹配频率? – 2011-01-14 03:14:42

3

看起来最有效的方法是存储单词采用α有序键(你已经):

ADN - >和DNA celrstu - >集群 等等

把你的输入,按字母顺序排列的字母,看看它,比赛。完成。

如果不回答你的问题,你可能需要调整你的问题有点措辞......

相关问题