博客
关于我
模式匹配(第二篇KMP算法
阅读量:754 次
发布时间:2019-03-22

本文共 686 字,大约阅读时间需要 2 分钟。

KMP算法是由D.E.Knuth、J.H.Morris和V.R.Pratt等人共同提出的通用字符串匹配算法,由此名称源于其发明者。KMP算法通过预处理模式串所包含的前缀函数信息,显著提升了字符串匹配效率。这项技术首先定义了一个名为next[j]的数组,该数组记录在主串中某个位置之前的最大前缀长度,用于确定后续匹配操作的起点。

next[j]数组的定义可以分为三种情况:

  • 当一个非空集合存在(即存在某些k使得前缀和后缀相等)时,next[j]等于最大满足条件的k值。
  • 当j等于0时,next[j]值为-1。
  • 其他情况下,next[j]值为0。
  • 此外,还存在另一种定义方式,但与原定义在逻辑上是等价的,只是起点不同。例如,对于j从1开始而言,next[1]值为0,而对于j从0开始则为-1。如图(1)所示,两种定义方式展示了其等价性。

    KMP算法的两个版本可以进一步说明其工作原理。第一个版本通过从头开始计算next[j]数组的设定方式,而第二个版本对next[j]进行了优化,减少了在匹配过程中的多余比较次数。

    KMP算法的时间复杂度在预处理阶段为O(m),其中m为模式串的长度。这是因为在构建next[j]数组时,其所需的时间复杂度与模式串的长度成正比。主算法执行时,由于无需回溯主串索引,字符串匹配过程中所需的比较次数为n(主串的长度),因此总体时间复杂度为O(n + m)。

    这种算法的优势在于其预处理的时间复杂度较低,且在匹配阶段所需的时间仅与打算匹配的内容相关,显著提高了大规模文本中的字符串匹配效率。在实际应用中,KMP算法被广泛用于文本搜索、数据压缩等领域。

    转载地址:http://jcgwk.baihongyu.com/

    你可能感兴趣的文章
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>