Java Anagram 求解器

Posted

技术标签:

【中文标题】Java Anagram 求解器【英文标题】:Java Anagram Solver 【发布时间】:2011-02-11 22:14:38 【问题描述】:

我可以弄清楚如何创建字符串的字谜,但我不知道如何将它们与真实单词字典进行比较以检查字谜是否是真实单词。 Java API 中是否有包含整个英语词典的类?

【问题讨论】:

【参考方案1】:

不,但您可以从various places 获得词汇表。从那里,您可以将 wordlist 文件读入列表:

List<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("wordlist.txt"));
String line = null;
while (null!=(line=in.readLine()))

   lines.add(line);

in.close();

最后二分搜索使用lines.contains()作为候选词。

【讨论】:

没有理由使用 O(log N) 二进制搜索,因为 Set 实现如 HashSet 可以这么快。 超级好点 Alex Martelli。我不知道我在想什么。需要咖啡。【参考方案2】:

确定一组字符是否是单词的字谜的一种方法涉及使用素数。为每个字母分配一个质数,例如,a=2、b=3、c=5、d=7。现在为字典中的每个单词预先计算素数的乘积。例如,'add' = 2*7*7 = 98,或'bad' = 3*2*7 = 42。

现在可以通过计算一组字母的值来确定一组字母是否是字典中任何单词的字谜。例如,字母 'abd'= 2*3*7 = 42 = 'bad'。只需检查字母的计算值是否存在于您的预先计算的字典中。对于任何字谜,您只需要执行一次此计算,而不是尝试生成每个可能的字谜。但请注意,此方法仅适用于相对较小的单词,否则会遇到溢出问题并需要使用 BigInteger。

【讨论】:

【参考方案3】:

不,您必须使用外部库,例如 JWNL,它是 WordNet 的包装器——按含义组织的机器可读词汇数据库,它包含几乎所有英语词。

【讨论】:

我不熟悉 JWNL,但是“意义”数据不会给真正只需要一个简单单词列表的应用程序添加不必要的体积吗?【参考方案4】:

也许jazzy的英文词典可以帮到你。

【讨论】:

【参考方案5】:

标准 Java 库中没有这样的专用类,但您可以使用您喜欢的任何 Set 接口实现,并通过从无数 word lists 中选择的任何单词加载它来初始化它您可以在很多地方找到(只需仔细检查您选择的单词列表的许可证是否与您的预期应用程序兼容,例如,它是否允许商业使用,如果您需要的话,可以使用闭源应用程序等等)。

【讨论】:

以上是关于Java Anagram 求解器的主要内容,如果未能解决你的问题,请参考以下文章

C中的递归问题

Java中的数独求解器,使用回溯和递归

Java问题中的蛮力数独求解器算法

使用 DPLL sat 求解器求解

简单的约束规划求解器

求解器加载项错误,未找到求解器 32.dll 并发生意外错误