题目内容
(请给出正确答案)
[主观题]
KMP算法通过模式串的前缀函数,较好地利用了搜索过程中的部分匹配信息,从而提高了效率.然而在某
些情况下,还可以更好地利用部分匹配信息.例如,考察图9-2中,KMP算法对主串aabaaaab和模式串aaaab的搜索过程.
在图9-2(a)中匹配失败后,按前缀函数指示继续作了图(b)~(d)的比较后,最后在图(e)找到一个匹配.事实上,图(b)~(d)的比较都是多余的.因为模式串在位置0、1、2处的字符和位置3处的字符都相等,因此不需要再和主串中位置3处的字符比较,而可以将模式一次向右滑动4个字符,直接进入图(e)的比较.这就是说,在KMP算法中遇到p[j+1]≠t[i],且p[j+1]=p[next[j]+1]时,可一次向右滑动j-next[next[j]]个字符,而不是j-next[j]个字符.根据此观察,设计一个改进的前缀函数,使得遇到上述特殊情况时效率更高.
如搜索结果不匹配,请 联系老师 获取答案