在std :: search中使用了什么算法?

时间:2012-02-06 04:07:52

标签: c++ string algorithm pattern-matching string-matching

有许多字符串匹配算法可用于在大文本中查找模式(字符串),如Boyer-Moore,Aho-Corasick等。

使用哪种字符串匹配算法在C ++中实现std::search函数?

1 个答案:

答案 0 :(得分:10)

根据C ++ 03 ISO标准§25.1.9/ 3,std::search的复杂性是

  

复杂性:最多(last1 - first1)*(last2 - first2)相应谓词的应用

这是实现此算法的唯一要求。 ISO规范没有规定这里应该使用哪种算法,而且它完全依赖于实现。这些时间限制允许使用朴素序列搜索算法Knuth-Morris-PrattBoyer-MooreRabin-Karp。要知道正在使用哪一个,您应该提取您正在使用的标准库的任何版本的文档。也就是说,你不能指望它是便携式的。我的猜测是大多数实现只使用朴素匹配算法,因为最坏的情况通常不会在实践中出现。

希望这有帮助!