问答题
在模试匹配KMP算法中所用失败函数f的定义中,为何要求P
1
P
2
…P
f(f)
为P
1
P
2
……P
i
两头匹配的真子串且为最大真子串?【东南大学1996一、3(7分)】
【正确答案】正确答案:失败函数(即next)的值只取决于模式串自身,若第j个字符与主串第i个字符失配时,假定主串不回溯,模式串用第k(即next[j])个字符与第i个相比,有i个相比,有‘p
1
…p
k-1
’=‘p
1
…p
j-1
’,为了不因模式串右移与主串第i个字符比较而丢失可能的匹配,对于上式中可能存在的多个k值,应取其中最大的一个。这样,因j-k最小,即模式串向右滑动的位数最小,避免因右移造成可能的匹配的丢失。
【答案解析】