【问题标题】:How would you approach a PHP + MySQL anagram solver? [closed]您将如何处理 PHP + MySQL 字谜求解器? [关闭]
【发布时间】: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 中可能需要几个小时。

标签: php mysql anagram


【解决方案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
            猜你喜欢
            • 2011-11-02
            • 2015-10-31
            • 2012-05-17
            • 1970-01-01
            • 2013-05-28
            • 1970-01-01
            • 2014-05-09
            • 1970-01-01
            • 2012-05-13
            相关资源
            最近更新 更多