-1

有没有人有用 PHP 和 MySQL 解决字谜的任何想法、链接或算法。如果有人有一本好的英语词典,也将不胜感激。

我希望实现与此类似的目标:

http://www.ssynth.co.uk/~gay/anagram.html

这家伙解释了他是如何在这里做到的?

谢谢..

4

6 回答 6

1

根据他的说法,像 PHP 这样的语言可能不适合

你是如何从他公布的细节中得知这一点的?

如果有人有一本好的英语词典...

pspell 扩展中有一个,尽管考虑到所呈现算法的性质,将大部分逻辑(和字典)推送到数据库中可能会更有效 - IIRC pspell 使用自定义格式,尽管有文档记录

于 2010-08-09T12:29:02.183 回答
1

您可能想查看 Xavier 的 Anagram Solver。它是用 PHP 和 MYSQL 编写的。有一个演示:http ://anagram.savjee.be/

源代码位于:https ://github.com/Savjee/Xavier-s-Anagram-Solver 很容易理解。

于 2012-04-30T12:25:37.087 回答
0

我会有一个表 {letter} {word} {count} 并且对于每个单词,将它与它的每个组成字母一起存储,以及该字母在单词中出现的次数。然后搜索字谜开始于搜索一组字母,并找到与每个字母相关联的词组之间的交集。例如

输入:大鼠表:

T tar 1
A tar 1
R tar 1
C cat 1
A cat 1
T cat 1
C car 1
A car 1
R car 1

每个字母的结果

R car tar
A cat car tar
T cat tar

然后你将每个查询与一个交集连接起来!

于 2010-08-09T13:56:08.750 回答
0

您可以使用Trie 数据结构循环遍历字符序列的每个组合(如果没有子节点,显然会停止当前节点)。

这将以相当有效的方式生成所有可能解决方案的完整列表。对于有限的起始字符集,我认为它会很好用。

在每个节点上,您可以选择匹配单词的计数,当它足够小时,将其加载到数组中进行比较,这样您就不需要运行一百万次选择。

于 2010-08-09T13:59:02.910 回答
0

Pablo 建议的算法到底有什么问题?我打算提出同样的建议;)

如果我有一个包含列的“单词”(例如 cat)、“长度”(例如 3)和 AZ(例如 c=1 a=1 t=1)的表格怎么办。这样,字谜'atc'我可以做一个查询,比如'SELECT word FROM dictionary WHERE c <= 1 AND a <= 1 AND t <= 1 AND length <= 3' 它会返回 cat

请将upvoting(如果有的话)重定向到他的评论。

还有一个类似的问题:Algorithm to generate anagrams

您还需要检查谷歌: http ://www.google.ru/search?q=anagram+solving+algorithms&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

于 2010-08-09T13:38:47.063 回答
-2

从你的链接...

将所有单词存储在树结构中

数据库在存储这样的分层数据方面非常糟糕,所以我不推荐 MySQL。你也许可以用索引和 LIKE 子句做一些“聪明”的事情,但我希望这会相当笨拙。

PHP 拥有为此进行编码所需的一切,但可能还有更好的选择。Perl 以其进行文本操作的能力而闻名。我不确定 Python 或 Ruby 等脚本语言。

于 2010-08-09T10:20:22.470 回答