识别一系列字符中的单词

时间:2011-08-09 09:31:13

标签: string algorithm

我需要一种能识别单词的算法(基于字典) 在一系列没有空格的字符中。

例如,让我们说顺序是:
spaceless
它应该识别空间而不是。

并且可能存在可以识别更多单词的情况。 很难给出这样的例子,但我会试一试:

示例:spaceslight
公认的词语:空间和轻微(1)
公认的词:空间和光(2)

所以算法也应该能够找到那种变化。

3 个答案:

答案 0 :(得分:1)

如果您需要对同一个字符串进行多次查询,则后缀trie是一个很好的解决方案。这将非常有效地存储字符串并允许在O(n)中查询查询,其中n是查询的长度(请注意,除非您对查询有更多了解,否则不能做得更好)。

如果后缀trie仍占用太多空间,则可以使用DAWG,但构建起来要复杂得多。

答案 1 :(得分:1)

您还可以尝试使用Knuth-Morris-Pratt算法。它在文本中搜索字符串...如果我正确记住它,它具有线性复杂性。这看一下:

http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

PS:你可能需要根据自己的需要稍微调整一下......

答案 2 :(得分:1)

你可能想看一下Rabin-Karp算法,它允许单次通过文本文件来搜索字典中所有n个字母的单词n值。标准Rabin-Karp会发现重叠:spacelight - >空间,a,ace,aces,轻微,轻,i。如果你不想要重叠的话,你需要修改它。