首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KMP模式匹配算法背后的理论是什么?

KMP模式匹配算法背后的理论是什么?
EN

Stack Overflow用户
提问于 2011-12-10 13:24:26
回答 2查看 3.9K关注 0票数 17

KMP模式匹配算法的理论基础是什么?

我理解算法本身,但是,不知道Knuth,Morris和Pratt是如何发明这个算法的。

有没有什么数学证明?

你能给我一个链接吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 13:28:43

KMP匹配算法基于finite automata,其工作原理是隐式地为匹配字符串的自动机构建转换表。使用对要搜索的字符串进行非常巧妙的线性时间预处理,可以构建匹配自动机,然后可以在线性时间内对要搜索的字符串模拟该自动机。最终结果是用于字符串匹配的线性时间算法。

构建的自动机的工作原理是,到目前为止,每个匹配的字符串都有一个状态。默认情况下,转换是这样的:匹配下一个字符前进到机器中的下一个状态,并读取无效字符转换回到开头。然而,要搜索的字符串的某些部分可能共享一些重叠的结构,因此添加了一些新的转换,使自动机在读取字符时返回到较早的(但不是第一个)状态。

该算法由Aho-Corasick算法推广而来,该算法构建了一个更复杂的自动机,以便一次搜索多个字符串。

我的包含了对算法如何工作的实际细节的广泛讨论,包括正确性证明,算法背后更正式的直觉,以及如何从第一原理推导算法的解释。我花了一段时间来整理,但我希望这可能是一个很好的资源,可以学习更多关于算法的知识。

希望这能有所帮助!

票数 24
EN

Stack Overflow用户

发布于 2011-12-10 23:23:40

Morris从第一原理中发现了该算法,但Knuth独立地了解到了Stephen A.库克的一个定理,即确定性的双向下推自动机可以在线性时间内模拟,并通过将模拟专门用于字符串匹配自动机来提取"KMP“的早期版本。普拉特对效率的提高做出了贡献。参见Knuth's retelling

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8454625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档