有许多字符串匹配算法可用于在大文本中查找模式(字符串),如Boyer-Moore,Aho-Corasick等。
使用哪种字符串匹配算法在C ++中实现std::search
函数?
答案 0 :(得分:10)
根据C ++ 03 ISO标准§25.1.9/ 3,std::search
的复杂性是
复杂性:最多(last1 - first1)*(last2 - first2)相应谓词的应用
这是实现此算法的唯一要求。 ISO规范没有规定这里应该使用哪种算法,而且它完全依赖于实现。这些时间限制允许使用朴素序列搜索算法Knuth-Morris-Pratt,Boyer-Moore和Rabin-Karp。要知道正在使用哪一个,您应该提取您正在使用的标准库的任何版本的文档。也就是说,你不能指望它是便携式的。我的猜测是大多数实现只使用朴素匹配算法,因为最坏的情况通常不会在实践中出现。
希望这有帮助!