您将如何处理 PHP + MySQL 字谜求解器? [关闭]
Posted
技术标签:
【中文标题】您将如何处理 PHP + MySQL 字谜求解器? [关闭]【英文标题】:How would you approach a PHP + MySQL anagram solver? [closed] 【发布时间】:2011-03-27 05:21:22 【问题描述】:有没有人有任何用 php 和 mysql 解决字谜的想法、链接或算法。如果有人有一本好的英语词典,也将不胜感激。
我希望实现类似的目标:
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 字谜求解器? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章