字符串搜索算法

时间:2010-04-10 11:16:41

标签: algorithm string-search

对于两种字符串搜索算法:KMP和后缀树,在哪些情况下首选?举一些实际的例子。

1 个答案:

答案 0 :(得分:11)

如果您必须回答很多问题,例如“大海捞针是否存在?”,那么后缀树会更好。如果您只需要在另一个字符串中搜索一个字符串,KMP就会更好,而不必多次执行。

后缀树是一种更通用的数据结构,因此您可以使用它做更多事情。看看你能用它做什么here。 KMP对于查找字符串是否是另一个字符串中的子字符串非常有用。

您可能还想查看其他算法,例如Boyer-MooreRabin-Karp甚至天真算法,因为有些情况(输入),其中一个比其他算法好。

底线是:

  1. 如果你有很多像我上面提到的那样的查询,那么建立一个后缀树然后更快地回答每个查询是值得的。
  2. 如果您需要做的不仅仅是那些类型的查询,那么后缀树也值得建立。
  3. 如果您只关心偶尔发现字符串是否是另一个字符串的子字符串,那么请使用KMP。