繁体   English   中英

Knuth-Morris-Pratt算法中的模式前缀函数计算

[英]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
  1. 第一个符号任意,说一个
  2. 第二个符号必须与第一个符号不同,否则前缀长度将为1
  3. 第三必须与第一相同
  4. 第四必须与第二相同
  5. 第五必须与第三相同
  6. 不能是到目前为止使用的两个符号中的任何一个,a的前缀长度为1,b为4
  7. 第七必须是第一
  8. 必须是第二
  9. 必须是第三
  10. 必须是第四
  11. 必须是第五
  12. a会给前缀长度1,b会给4,c会给6,其他都给0

表中与长度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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM