字符串搜索算法

avd*_*avd 9 algorithm string-search

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

IVl*_*lad 11

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

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

您可能还想查看其他算法,例如Boyer-Moore,Rabin-Karp甚至是朴素算法,因为有些情况(输入),其中一个比其他算法更好.

底线是:

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