【问题标题】:What is the difference between KMP and Z algorithm of string pattern matching?字符串模式匹配的KMP和Z算法有什么区别?
【发布时间】:2021-07-21 20:17:51
【问题描述】:

在 KMP 算法中,我们对模式进行预处理,以找到我们在匹配时用来跳过字符的最长前缀。

在Z-算法中,我们首先创建一个新字符串
new_string = 模式 + 'x' + 字符串
其中 x = 模式和字符串中都不存在的字符
在创建 new_string 之后,我们对 new_string 进行预处理以找到最长的前缀,如果前缀的借出等于模式长度,那么我们找到了模式

两者的时间复杂度都是 O(m+n)。

那么这两种算法有什么区别,哪一种最好用呢?

【问题讨论】:

    标签: string algorithm matching


    【解决方案1】:

    并不总是与时间复杂度有关,存储复杂度在这里起着重要作用:

    克努斯·莫里斯·普拉特:

    最坏情况下的性能:Θ(m) 预处理 + Θ(n) 匹配

    最坏情况空间复杂度:Θ(m)

    Z算法:

    最坏情况下的性能:Θ(m+n) 预处理和匹配

    最坏情况空间复杂度:Θ(n+m)

    此外,除了搜索模式之外,您还可以将搜索前缀和后缀的想​​法用于其他用途,因此您可能有其他理由对特定信息进行分析

    另外我会推荐一些任务的其他匹配算法,即使它们的时间复杂度更差,比如 Boyer-moore,这完全取决于具体情况

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      相关资源
      最近更新 更多