微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

字符串模式匹配的KMP和Z算法有什么区别?

如何解决字符串模式匹配的KMP和Z算法有什么区别?

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

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

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

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

解决方法

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

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

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

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

Z 算法:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。