KMP模式匹配算法是什么?KMP模式匹配算法是一种改进算法,是由D.E.Knuth、J.H.Morris和v.R.Pratt提出来的,因此人们称它为“克努特-莫里斯-普拉特操作”,简称KMP算法 。此算法可以在O(n+m)的时间数量级上完成串的模式匹配操作 。其改进在于:每当一趟匹配过程出现字符不相等时,主串指针i不用回溯,而是利用已经得到的“部分匹配”结果,将模式串的指针j向右“滑动”尽可能远的一段距离后,继续进行比较 。
1.KMP模式匹配算法分析回顾图4-5所示的匹配过程示例,在第三趟匹配中,当i=7、j=5字符比较不等时,又从i=4、j=1重新开始比较 。然而,经仔细观察发现,i=4和j=1、i=5和j=1以及i=6和j=1这三次比较都是不必进行的 。因为从第三趟部分匹配的结果就可得出,主串中的第4、5和6个字符必然是b、c和a(即模式串第2、第2和第4个字符) 。因为模式中的第一个字符是a,因此它无须再和这三个字符进行比较,而仅需将模式向右滑动2个字符的位置进行i=7、j=2时的字符比较即可 。同理,在第一趟匹配中出现字符不等时,仅需将模式串向右移动两个字符的位置继续进行i=2、j=1时的字符比较 。由此,在整个匹配过程中,i指针没有回溯,如图1所示 。
图1改进算法的模式匹配过程示意
文章插图
KMP是什么意思一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人设计的线性时间字符串匹配算法 。这个算法不用计算变迁函数δ,匹配时间为Θ(n),只用到辅助函数π[1,m],它是在Θ(m)时间内,根据模式预先计算出来的 。数组π使得我们可以按需要,“现场”有效的计算(在平摊意义上来说)变迁函数δ 。粗略地说,对任意状态q=0,1,…,m和任意字符a∈Σ,π[q]的值包含了与a无关但在计算δ(q,a)时需要的信息 。由于数组π只有m个元素,而δ有Θ(m∣Σ∣)个值,所以通过预先计算π而不是δ,使得时间减少了一个Σ因子 。
kmp算法什么意思?KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字 。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n) 。
在KMP算法中,为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀 。
对于next[]数组的定义如下:
1) next[j] = -1j = 0
2) next[j] = max(k): 0kjP[0...k-1]=P[j-k,j-1]
3) next[j] = 0其他
如:
Pababa
j01234
【kmplayer安卓 kmp】 next-10012
即next[j]=k0时,表示P[0...k-1]=P[j-k,j-1]
因此KMP算法的思想就是:在匹配过程称,若发生不匹配的情况,如果next[j]=0,则目标串的指针i不变,将模式串的指针j移动到next[j]的位置继续进行匹配;若next[j]=-1,则将i右移1位,并将j置0,继续进行比较 。
秒懂生活扩展阅读
- 安卓蓝牙耳机丢了怎么定位
- 怎么查看安卓系统手机的硬件信息
- 安卓播放器推荐 安卓播放器
- 安卓手机怎么刷机解锁
- m3u8视频下载器安卓 m3u
- 如何刷平板电脑安卓系统
- 安卓手机不能更换壁纸怎么解决
- 苹果是安卓系统的吗
- oppo手机用了一年为什么好卡
- 安卓光晕战争游戏推荐 安卓光晕战争游戏