关于KMP算法求next值的问题

问题描述:

关于KMP算法求next值的问题
严的数据结构第83页关于KMP算法模式串next值,原文如下:
若Pk=Pj,则表明在模式串中 'P1.Pk' = 'Pj-k+1.Pj'
并且不可能存在k‘>k满足以上等式,也就是说 next[j+1]=k+1
即:
next[j+1]=next[j]+1
请问这个 next[j+1]=k+1是怎么得来的?这里纠结了好久都看不懂,还有那个 k‘是什么
1个回答 分类:综合 2014-10-13

问题解答:

我来补答
唉,这题说实话确实搞哭了一代人,这里有我以前回答过的关于KMP的问题,看看有木有帮助吧.
http://zhidao.baidu.com/question/539900670?&oldq=1
再问: 能简单解释一下 next[j+1]=k+1 这个式子是怎么推导出来的吗? 后面那个怎么算模式串的例子可以看懂,就是(abaabc -》011223)这个,只是上面这个式子实在不知道是怎么搞出来的
再答: 严版P83——(4-11) 这部分还是求Next值的啊。 数组Next中是回朔值,这个你好像已经知道了。 那么,当任意一个模式串被用来算next值的时候: 1.next[1]=0 4-6 2.注意, 设next[j]=k 此处 查看4-2部分:'p1p2...pk-1'='si-k+1...si-1' 再看看4-3部分,可推出4-4:'p1 p2...pk-1'='pj-k+1 pj-k+2..pj-1‘ 3.这里next是存放回朔值的!由2.可知4-10是成立的。 'p1...pk'='pj-k+1...pi‘ (4-10) 4.好了,之前你都没问题的,对吧。 到了这里已经明明白白说了 next[j+1]=k'+1 → next[j+1]=next[k]+1 即:回朔值可以再往前推一个位置! 我强烈建议你明天早上别背英语了,早起把这部分读两遍,直接解决问题,真心的!
再问: 就是说 Pj-k+1...Pi (模式串) P1.........Pk (模式串每个元素对应的回溯值指向的元素) 这两列相等了的话,Pi回溯时回到Pk,Pj-k+1回溯时回到P1,那么往后推可得Pi+1回溯时回到Pk+1,是这样吗?
再答: p1....pk pj-k+1...pi都是模式串; 这里的问题是不匹配则向右滑动,滑动多少才是主要问题。 因此,匹配的时候前边若是匹配,则后边对应有一个相等的序列。这两个式子指的是这个意思。 后边你说对了...
 
 
展开全文阅读
剩余:2000
上一页:求补英语