Boyer Moore算法的预处理时间为Θ(m + |Σ|),匹配时间为Ω(n / m),O(n)。我了解到,Boyer Moore Horspool是Simplified Boyer Moore本身的改进,但是根据此Wikipedia文章,其平均情况复杂度为O(N),最坏情况为O(MN)。因此,在最坏的情况下,它应该比博耶·摩尔算法慢。但是智利大学进行的一项经典调查显示,博伊尔·摩尔大学的几乎每个时期都比博伊尔·摩尔好。我很困惑!我应该使用哪一个(无论大小模式)进行字符串搜索,以及哪种算法在实际应用中具有更大的意义(我只是计算机科学专业的学生)?
关键字是“几乎”。最坏情况下的行为可能只针对极少数情况。现实生活中的平均行为和渐近行为也相当松散地耦合在一起。Boyer-Moore-Horspool 的 最佳情况 行为与Boyer-Moore相同。Boyer-Moore-Horspool的最坏情况比Boyer- Moore更为糟糕。对于典型用途,Boyer-Moore-Horspool往往与Boyer-Moore大致相同,但是开销(以及更低)和更好的初始化费用。
使用哪一个?这取决于您的目标以及您对搜索模式和文本的期望。两者都不是很难实现的,所以为什么不两者都做并自己比较结果。(看看当您承认自己是学生时会发生什么?得到作业!:))