哪个是更好的字符串搜索算法?Boyer-Moore或Boyer Moore Horspool

Which is a better string searching algorithm? Boyer-Moore or Boyer Moore Horspool?

本文关键字:Boyer-Moore Boyer Moore Horspool 搜索算法 更好 字符串      更新时间:2023-10-16

Boyer Moore算法的预处理时间为Θ(m + |Σ|(,匹配时间为Ω(n/m(,O(n(。我知道Boyer Moore Horspool是简化Boyer Moore本身的进步,但是根据这篇维基百科文章,它的平均情况复杂性为O(N(和最坏情况O(MN(。因此,在最坏的情况下,它应该比Boyer Moore算法慢。但智利大学的这项经典调查显示,Boyer-Moore几乎每次都优于Boyer Moore。我很困惑!我应该使用哪一种(对于小型和大型模式(进行字符串搜索,哪种算法在实际世界中具有更大的意义(我只是一名计算机科学专业的学生(?

关键词是"几乎"。最坏的情况可能是极少数情况。现实生活中的平均行为和渐近行为也是相当松散耦合的。Boyer-Moore-Horspool的最佳行为与Boyer-Moore相同。Boyer-Moore-Horspool最糟糕的情况比Boyer-Moore要糟糕得多。对于典型用途,Boyer-Moore-Horspool往往与Boyer-Moore大致相同,但开销和初始化成本稍好(更低(。

使用哪一个?这取决于您的目标以及您对要搜索的模式和文本的期望。两者都不是特别难实现,所以为什么不同时做这两件事并自己比较结果。(看看当你承认自己是学生时会发生什么?你得到一个任务!:))