用于在每个给定输入文本中查找每个给定模式的第一次出现的算法

时间:2014-02-03 12:01:27

标签: string algorithm pattern-matching substring string-matching

我正在寻找在C中可以实现的算法。 我的输入包括许多模式和很多文字。 我想在每个文本中找到每个模式的第一次出现。

我正在从这里探索字符串匹配算法: http://igm.univ-mlv.fr/~lecroq/string/

但不确定最佳解决方案。 有没有人知道这个用例的最佳匹配算法?

我的模式将在10-15个字符范围内。文本将在30-40个字符范围内。

还有一些stackoverflow答案提到Boyes-Moore&由于现代的HW架构,KMP不一定比strstr()表现更好。 对于我的特殊用例,这也是如此吗?

这是另一个算法列表。 http://www.dmi.unict.it/~faro/smart/algorithms.php

1 个答案:

答案 0 :(得分:0)

使用the Rabin-Karp algorithm的修改:

  1. 计算模式的最小模式长度(在您的示例中为10)

  2. 对于每个模式,创建前缀长度为10的“snake-hash”。为模式创建哈希表。

  3. 对于每个文本,“移动蛇长度= 10”,并重新计算哈希值。如果hash匹配任何前缀 - 比较完整字符串。

  4. 所以,这个算法是~O(n + m); N =文本长度; M ='s长度。

    对于散列,我建议使用对“cyclic_shift + XOR”。