你会如何处理PHP + MySQL anagram求解器?

时间:2010-08-09 10:10:47

标签: php mysql anagram

有没有人有任何想法,链接或算法来解决PHP和MySQL的字谜。如果有人有一个好的英语词典,也会受到赞赏。

我希望实现类似的目标:

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

这家伙解释他是如何在这里做的http://www.ssynth.co.uk/~gay/anagabout.html ......从他说的语言来看,像PHP这样的语言可能不合适......会不会有问题?

谢谢..

6 个答案:

答案 0 :(得分:1)

  

他说的是像PHP这样的语言可能不适合

你如何从他发表的细节中得到这个?

  

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

pspell extension中有一个虽然考虑到所提算法的性质,但将大部分逻辑(和字典)推入数据库可能更有效 - IIRC pspell使用自定义格式,尽管是{{} 3}}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

  

如果我有一个带有列的表,该怎么办?   'word'(例如cat),'length'(例如3)和   A-Z(例如c = 1a = 1t = 1)。那样的   anagram'atc'我可以做一个类似的查询   'SELECT word FROM dictionary WHERE c   < = 1 AND a< = 1 AND t< = 1 AND长度   < = 3'并且它将返回cat

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

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

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

答案 3 :(得分: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

然后用交叉点加入每个查询!

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:-2)

从您的链接...

  

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

数据库在存储这样的分层数据方面非常糟糕,因此我不建议使用MySQL。你可能能够用索引和LIKE子句做一些“聪明”的事情,但我希望这是相当的kludgey。

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