String Knuth-Morris-Pratt算法中的模式前缀函数计算
给定模式的前缀函数中有没有可能有这样的东西 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),则模式应如何 我能想到的模式只有和这个相似String Knuth-Morris-Pratt算法中的模式前缀函数计算,string,algorithm,substring,knuth-morris-pratt,String,Algorithm,Substring,Knuth Morris Pratt,给定模式的前缀函数中有没有可能有这样的东西 0 0 1 2 3 0 1 2 34 5 3 4 56 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
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
下面是一个示例模式,其中在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]
包含长度-p前缀最宽边框的宽度(带有table[0]=-1
),那么table[p+1]
是1+table[p]
,1+table[p]
,1+table[table[…[table[p]]]]]=1+table[0
,你的具体例子是不可能的。当您开始从所需的前缀表构造字符串时,您会得到
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]
包含长度-p前缀最宽边框的宽度(带有table[0]=-1
),那么table[p+1]
是1+table[p]
,1+table[p]
,1+table[table[…[table[p]]]]]=1+table[0]
,你坚持以5为例吗?我可以给你看一个6后有3的例子。我看到了你的答案,这是错误的。你坚持要有一个5的例子吗?我可以给你展示一个6后3的示例模式。我看到了你的答案,这是错误的。我使用了维基百科文章中定义的失败链接:@AnanthaKrishnan 6和7在你的失败链接中肯定是错误的。剩下的只是解释的问题…@阿南塔克里希南·伊索莫菲乌斯已经做到了。唯一的解释问题是你是否像他那样(像你一样)再加上一个0。这两种方法都可以,你只是对故障链接的用法进行了编码,但有一点不同。为什么“abcab”序列有1?“应该是2吗?”阿列克谢·亚历山德罗夫事实上我相信上面有不止1个错误。我真的不记得我当时在想什么。我将修复失败的链接。谢谢。我正在使用维基百科文章中定义的失败链接:@AnanthaKrishnan 6和7在你的失败链接中肯定是错误的。剩下的只是解释的问题…@阿南塔克里希南·伊索莫菲乌斯已经做到了。唯一的解释问题是你是否像他那样(像你一样)再加上一个0。这两种方法都可以,你只是对故障链接的用法进行了编码,但有一点不同。为什么“abcab”序列有1?“应该是2吗?”阿列克谢·亚历山德罗夫事实上我相信上面有不止1个错误。我真的不记得我当时在想什么。我将修复失败的链接。非常感谢。