首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KMP预处理功能

KMP预处理功能
EN

Stack Overflow用户
提问于 2013-08-05 18:20:25
回答 1查看 1.2K关注 0票数 1

这是我在ItoA中看到的伪代码:

代码语言:javascript
复制
1 m = P.length
2 let pi[1...m] be a new array
3 pi[1] = 0
4 k=0
5 for q=2 to m
6    while k > 0 and P[k+1] != P[q]
7       k = pi[k]    
8    if P[k+1] == P[q]
9       k = k+1    
10   pi[q] = k
11 return pi

我怀疑为什么在第6行我们使用k = pi[k]而不是k-- --在我看来,这应该是检查长度k的前缀的方法(因为如果P[k+1] != P[q]意味着不能实现也是后缀的长k+1的前缀),这也可以是后缀,也就是说,与P[q]相比,我还认为如果我们这样做,运行时间将保持不变。

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 08:21:18

递归调用k = pi[k]搜索p[1..q]的较小边框;因为pi[k]P[0..k]的最大边界,比pi[q]小。它将搜索直到找到p[1..q]的边框,其中下一个字符p[k+1]不等于P[q+1]

您可以在这里找到更多详细信息:http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm

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

https://stackoverflow.com/questions/18065002

复制
相关文章

相似问题

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