hyt*_*ucx 5 string algorithm knuth-morris-pratt
我已经尽力阅读了大部分关于此的文献,但仍然没有理解KMP算法中使用的失效函数是如何构建的.我一直指的是http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=stringSearching教程,大多数人都认为这很好.但是,我还是不明白.如果你能给我一个简单易懂的解释,我会感激不尽.
小智 9
失败函数实际告诉我们:如果匹配字符串的X个字符,那么这个字符串的最长后缀是什么,这样它也是搜索字符串的前缀.
你问它是如何构建的,这种方法非常简单.
如果你在一个字符串的末尾添加一个新字符,那就是你正在构建f [x],如果它与位置f [x-1]的字符匹配,那么f [x]就是f [x-1] ] +1.
在其他不匹配的情况下,您尝试查找越来越小的后缀并检查它们是否匹配.
例如,您有一个单词"accadaccac",您正在构建一个失败函数,并且您刚刚添加了该字母'c'.假设你正在为最后一个字母 - 字母构建一个失败函数'c'.
"acca"与前缀匹配"acca",现在添加字母'c',它与字母'd'后续前缀不匹配"acca"."acca"也是前缀"accadaccac",但小于"acca".该问题的答案是f [length("acca") - 1]或f [3],即f [3] = 1,因为长度为1的后缀(只是字母'a')也是搜索的前缀串.'c'匹配位置1上的角色,瞧,它匹配,所以现在你知道f [9] = f [f [8] -1] +1 = 2.我希望这能帮到您.祝好运!:)