我正在寻找在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
答案 0 :(得分:0)
使用the Rabin-Karp algorithm的修改:
计算模式的最小模式长度(在您的示例中为10)
对于每个模式,创建前缀长度为10的“snake-hash”。为模式创建哈希表。
对于每个文本,“移动蛇长度= 10”,并重新计算哈希值。如果hash匹配任何前缀 - 比较完整字符串。
所以,这个算法是~O(n + m); N =文本长度; M ='s长度。
对于散列,我建议使用对“cyclic_shift + XOR”。