有没有人有用 PHP 和 MySQL 解决字谜的任何想法、链接或算法。如果有人有一本好的英语词典,也将不胜感激。
我希望实现与此类似的目标:
http://www.ssynth.co.uk/~gay/anagram.html
这家伙解释了他是如何在这里做到的?
谢谢..
有没有人有用 PHP 和 MySQL 解决字谜的任何想法、链接或算法。如果有人有一本好的英语词典,也将不胜感激。
我希望实现与此类似的目标:
http://www.ssynth.co.uk/~gay/anagram.html
这家伙解释了他是如何在这里做到的?
谢谢..
您可能想查看 Xavier 的 Anagram Solver。它是用 PHP 和 MYSQL 编写的。有一个演示:http ://anagram.savjee.be/
源代码位于:https ://github.com/Savjee/Xavier-s-Anagram-Solver 很容易理解。
我会有一个表 {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
然后你将每个查询与一个交集连接起来!
您可以使用Trie 数据结构循环遍历字符序列的每个组合(如果没有子节点,显然会停止当前节点)。
这将以相当有效的方式生成所有可能解决方案的完整列表。对于有限的起始字符集,我认为它会很好用。
在每个节点上,您可以选择匹配单词的计数,当它足够小时,将其加载到数组中进行比较,这样您就不需要运行一百万次选择。
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
从你的链接...
将所有单词存储在树结构中
数据库在存储这样的分层数据方面非常糟糕,所以我不推荐 MySQL。你也许可以用索引和 LIKE 子句做一些“聪明”的事情,但我希望这会相当笨拙。
PHP 拥有为此进行编码所需的一切,但可能还有更好的选择。Perl 以其进行文本操作的能力而闻名。我不确定 Python 或 Ruby 等脚本语言。