最好的字符串搜索算法

时间:2011-11-04 11:21:07

标签: c++ string search

我有一个代码在哪里比较一个大数据,比如一个网页的来源与一个文件中的某些单词。什么是最好的算法?

可以有两种情况:

  1. 如果我有大量的单词要与源进行比较,在这种情况下,对于普通的字符串搜索算法,它必须采用一个单词,与数据进行比较,采取下一个并进行比较数据等等,直到一切都完成。

  2. 我在文件中只有几个单词,正常的字符串搜索就可以了,但仍需要尽可能减少时间。

  3. 什么算法最好?我知道Boyer-Moore和Rabin-Karp搜索算法。 虽然Boyer-Moore搜索看起来很快,但我还想了解其他算法的名称及其比较。

2 个答案:

答案 0 :(得分:1)

在这两种情况下,我认为你可能想构建一个patricia trie(也称为基数树)。最重要的是,查找时间为O(k),其中k是trie中字符串的最大长度。

答案 1 :(得分:1)

请注意,Boyer-Moore将在文本中搜索文本(几个单词)。

如果你想要的只是识别一些单词,那么它就容易多了:

  • 将每个搜索的字词放入字典结构中(无论它是什么)
  • 查找字典中文本的每个单词

这最显着的意思是您将文本作为流读取,并且不需要一次将其全部保存在内存中(这对于文件光标的典型示例非常有用)。

至于字典的结构,我会推荐一个简单的哈希表。与树结构相比,它具有很好的记忆效果。