【发布时间】:2011-09-29 11:02:55
【问题描述】:
我最近学习了 KMP 字符串匹配算法,我几乎都学会了。但我没有得到的是如何在 O( length_of_pattern ) 中构建失败函数。我不需要代码,如果可能的话,我需要一个清晰的解释。提前致谢!
【问题讨论】:
标签: string algorithm function performance pattern-matching
我最近学习了 KMP 字符串匹配算法,我几乎都学会了。但我没有得到的是如何在 O( length_of_pattern ) 中构建失败函数。我不需要代码,如果可能的话,我需要一个清晰的解释。提前致谢!
【问题讨论】:
标签: string algorithm function performance pattern-matching
来自this site:
KMP 算法通过使用先前执行的比较计算指示最大可能偏移 s 的失效函数 f 来预处理模式 P。
具体而言,失效函数 f(j) 定义为 P 的最长前缀的长度,即 P[i 的后缀。 . j]。
这是一个伪代码,我想你可以在网站上得到详细的解释
KNUTH-MORRIS-PRATT FAILURE (P)
Input: Pattern with m characters
Output: Failure function f for P[i . . j]
i ← 1
j ← 0
f(0) ← 0
while i < m do /// your complexity will be O(length of pattern)
if P[j] = P[i]
f(i) ← j +1
i ← i +1
j← j + 1
else if (j != 0)
j ← f(j - 1)
else
f(i) ← 0
i ← i +1
希望它能回答你的问题
【讨论】: