【发布时间】:2011-07-21 11:19:21
【问题描述】:
我正在寻找最好的方法来搜索一串字母字符以在字符串末尾找到可能最长的字典单词。
示例:对于字符串qbehugejackhammer,结果应该是jackhammer,而不是hammer。
一种更有效地做到这一点的方法是将单词以相反的形式存储在索引表中,并一次迭代一个字母,直到它不再匹配任何内容:
SELECT word FROM dictionary WHERE word LIKE 'remmahkca%';
SELECT word FROM dictionary WHERE word LIKE 'remmahkcaj%'; # last match
SELECT word FROM dictionary WHERE word LIKE 'remmahkcaje%';
这看起来和感觉就像一个 hack,很可能不是最佳解决方案。有没有更快和/或更好的方法来做到这一点?我选择的工具是 PHP 和 MySQL,但如果其他语言或 DBMS 更适合我的需求,我会全力以赴。
【问题讨论】:
-
最佳方法取决于您打算执行此搜索的次数。你在迭代一个包含几个的结构吗?许多?数百?数千?需要以这种方式检查的单词有多少?
-
我没有时间给出完整的答案,但请查看en.wikipedia.org/wiki/Trie 和en.wikipedia.org/wiki/Directed_acyclic_word_graph
-
@Tim:这是一本完整的英语词典,每个活跃的站点用户大约每分钟调用一次。
标签: php mysql optimization string dictionary