C ++ 17添加了专门的字符串搜索算法:
在Boyer–Moore–Horspool algorithm上引用维基百科:
它是Boyer-Moore字符串搜索算法的简化,它与Knuth-Morris-Pratt算法有关。该算法在时间上交换空间以便在随机文本上获得O(n)的平均情况复杂度,尽管在最坏的情况下它具有O(nm),其中模式的长度是m并且搜索的长度string是n。
问题:
结论:
至少关于std::default_searcher
的问题不在标记的副本(Which is a better string searching algorithm? Boyer-Moore or Boyer Moore Horspool?)中,并且似乎对答案感兴趣,为了完整起见,这是我的尝试:< / p>
问题: std :: default_searcher如何与这两种算法相匹配?是否有任何标准库实现没有实现它与天真的字符串比较(针对小字符串优化)?
根据documentation on cppreference,std::default_searcher
代表现有的C ++之前的17 std::search
函数。
我认为标准没有强制执行,但如果这个功能并不总是作为强力搜索实现,我会感到惊讶。根据经验,至少Linux上提供的标准库确实将其实现为强力搜索(在__search
中的stl_algo.h
中实现)。
问题:除了测量之外,还有哪些指导方针可以决定什么是最好的? 什么时候应该在std :: boyer_moore_searcher上使用std :: boyer_moore_horspool_searcher?
不,没有好的经验法则。这在很大程度上取决于输入。
尝试两者并测量哪个更快。