当前位置: 首页 > 面试题库 >

哪个是更好的字符串搜索算法?博耶·摩尔(Boyer-Moore)还是博耶·摩尔(Boyer Moore Horspool)?[关闭]

红砚文
2023-03-14
问题内容

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大致相同,但是开销(以及更低)和更好的初始化费用。

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



 类似资料:
  • 本文向大家介绍python转换字符串为摩尔斯电码的方法,包括了python转换字符串为摩尔斯电码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python转换字符串为摩尔斯电码的方法。分享给大家供大家参考。具体实现方法如下: 运行结果如下: ... --- ... 希望本文所述对大家的Python程序设计有所帮助。

  • C++软件开发 一面(1h37min) 自我介绍 面试官问到深度学习的项目,说应该写在简历上的,但是自己没有写。 聊了一些家常,读研痛不痛苦 讲一下static关键字在c和c++中的使用 说说栈和队列这两种数据结构 讲一下mmap内存映射 讲一下项目中定义了哪些类? 接触过设计模式吗,项目中有运用到吗,展开讲一讲 讲一讲一个程序的运行过程 讲一下虚函数的作用 讲一下纯虚函数 手撕:两个链表相加 为

  • 机器学习研究员-系统架构方向 9月28日 面试了1h20min左右

  • 想改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。 我在玩Java*流API,在Lagecy系统中有以下代码: 我编写了与上述代码等价的流,如下所示: 无论哪种方式,我都得到了想要的结果。我的问题是,在这种情况下,哪种性能方面是更好的写作方式?如果我选择其中任何一个而不是另一个,我实际上是否获得了任何价值?地图中包含大约 1000 个值。

  • 1、自我介绍 2、项目介绍 3、主要做了什么,为什么这样做 4、模型结构 5、与原算法比较,优势和不足 6、在学校有没有学过机器学习深度学习相关课程 7、滤波器(不会) 8、怎样部署(不会) 9、评价指标 10、倾向于做什么方向 11、线性回归与逻辑回归 12、朴素贝叶斯 13、代码题:单位园随机采样 #摩尔线程##摩尔线程智能科技(北京)有限责任公司#

  • 说到Boyer-Moore算法,它是一个字符串算法,这个算法追求的就是每次匹配,一般发现失败了,要往前移动尽可能多的距离,少算一点是一点。为了实现这个目标,首先算法选择的就是从pattern的尾部开始算。这个时候就会出现若干种情况。 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了