我的文字大约有300-500个字。我也有大约20万个关键字,我想知道每个关键字是否包含在文本中。字符串包含ist的速度很慢,是否有某种预处理字符串的方法?

我考虑过使用SuffixTree,但不确定是否是最佳选择。

另外,有没有很好的库可以完成此任务?例如,semanticdiscoverytoolkit具有后缀树实现,但是在添加字符串之后,我无法弄清楚如何查找树中是否包含字符串。

问候,

尼科

最佳答案

您可以尝试使用rabin-karp字符串搜索算法。由于您主要进行哈希(整数)比较,因此性能比字符串比较要好得多。


计算关键字的哈希
计算文本的滚动哈希
比较这两个哈希。如果它们匹配,则执行实际的字符串比较。
将位置提高1个字符,然后从步骤2开始重复,直到到达文本结尾。


打个比方,滚动哈希就像沿着文本滚动的“滑动窗口”。使用“滑动窗口”中子字符串的哈希值与关键字的哈希值进行哈希比较。

10-06 13:05
查看更多