首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knuth-Morris-Pratt算法:边界数组

Knuth-Morris-Pratt算法:边界数组
EN

Stack Overflow用户
提问于 2017-02-19 01:50:52
回答 1查看 1.5K关注 0票数 1

下面是在KMP中计算边界数组的伪代码。

P是模式

代码语言:javascript
复制
border[1]:=-1
i:=border[1]
for j=2,...,m
    while i >= 0 and p[i+1] != p[j-1] do i = border[i+1]
    i++
    border[j]:=i

我可以执行下面的伪代码来计算边界数组,但我现在遇到的问题是,我并不真正理解边界数组,这意味着如何解释它。

例如,如果模式在位置(i+1)和(j-1)不相等,那么变量i就设置为borderi+1。

当我试图回答边界数组中的三个连续条目不能与其前一个条目相差一个的问题时,我意识到了缺失的理解。例如border10=3、border11=2、border12=1

为了更好地理解,我希望能有一个好的解释。

EN

回答 1

Stack Overflow用户

发布于 2017-02-19 06:26:38

您所称的边界数组是前缀函数。有很多解释,看看StackoverflowWikipedia,或者只是google一个更适合你的解释。

关于问题的第二部分,以下字符串是您请求的属性的示例:

代码语言:javascript
复制
column:  0123456
string:  abcabac
border:  0001210

这里,border[4] = 2是因为ab = abborder[5] = 1是因为a = a,还有border[6] = 0

这三个值是否都可以为非零(例如,3、2、1)是一个有趣的问题。

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

https://stackoverflow.com/questions/42318620

复制
相关文章

相似问题

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