[英]Pattern prefix-function computation in Knuth-Morris-Pratt Algorithm
给定模式的前缀功能中是否可能有类似这样的内容,
0 0 1 2 3 0 1 2 3 4 5 3 4 5
6 7 0 1 2
在上述前缀函数中,4 5之后只有6还是0? 如果像上一个那样在4 5之后有例如3(小于5且大于0)的可能性,那么模式应该如何。
我可以想到的模式仅与此相似,
a b a b a b a b c a
0 0 1 2 3 4 5 6 0 1
谢谢。
这是一个示例模式,其中6之后的链接4失败:
a b c a b c d a b c a b c a
0 0 0 1 2 3 0 1 2 3 4 5 6 4
您的特定示例是不可能的。 从所需的前缀表开始构造字符串时,您将获得
0 0 1 2 3 0 1 2 3 4 5 3 4 5 6 7 0 1 2
a b a b a c a b a b a
表中与长度p
的前缀相对应的条目给出了该前缀的最宽边界b
的宽度,即w
。 下一个条目只能是w+1
(如果b
是可扩展的),0(如果没有前缀匹配)或比b
的某些边框的宽度大一个。
因此,如果table[p]
包含length-p前缀的最宽边框的宽度( table[0] = -1
),则table[p+1]
是1+table[p]
, 1+table[table[p]]
,..., 1+table[table[...[table[p]]]] = 1 + table[0] = 0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.