您将如何处理 PHP + MySQL 字谜求解器? [关闭]

Posted

技术标签:

【中文标题】您将如何处理 PHP + MySQL 字谜求解器? [关闭]【英文标题】:How would you approach a PHP + MySQL anagram solver? [closed] 【发布时间】:2011-03-27 05:21:22 【问题描述】:

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

我希望实现类似的目标:

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

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

谢谢..

【问题讨论】:

我无法避免认为这听起来不像是一个问题,至少不是一个编程问题。关于 PHP,如果他使用 C 在 m 分钟内解决问题,在 PHP 中可能需要几个小时。 【参考方案1】:

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

您如何从他发布的详细信息中得知这一点?

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

如果我有一个包含列的表格怎么办? 'word'(例如 cat)、'length'(例如 3)和 A-Z(例如 c=1 a=1 t=1)。这样一来 字谜'atc'我可以做一个查询 '从字典 WHERE c 中选择单词

请将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

【讨论】:

【参考方案4】:

我将有一个表格 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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

从你的链接...

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

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

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

【讨论】:

如果我有一个表格,其中包含列的“单词”(例如 cat)、“长度”(例如 3)和 A-Z(例如 c=1 a=1 t=1)。这样,字谜'atc'我可以做一个查询,比如'从字典中选择单词WHERE c 在数据库中存储分层数据有什么问题?它迫使您计划如何以可搜索的方式表示数据。 @Pablo,我喜欢这个很有创意的解决方案,但你会浪费很多存储空间。 @symcbean,在关系数据库中存储分层数据的问题在于,将数据查询到任意深度既困难又低效。 @haydenmuhl:不是,不是。一些 DBMS 明确支持“简单”关系层次模型(参见我的帖子和oracle.com/technology/oramag/oracle/05-may/o35asktom.html),非常有效地达到任意深度。还有很多其他方法可以在关系数据库中对树进行建模,例如sitepoint.com/article/hierarchical-data-database

以上是关于您将如何处理 PHP + MySQL 字谜求解器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我将如何处理此链接器错误?

Mysql对字谜求解器的多个查询

php - 向字谜求解器添加通配符

php |字谜求解器通过 woldcard 查找不在原始搜索中的字母

c# FileSystemWatcher如何处理多个文件?

如何处理字谜搜索期间字符串排列的时间复杂度?