我理解算法的基本原理,即(如果我错了,请纠正我):
Two strings: PATTERN (the desired string)
TEXT (the String to be perused for the presence of PATTERN)
Two indices: i (currently processing index in PATTERN), 1 <= i < PATTERN.SIZE
j (arbitrary index in TEXT)
Match state S(x): S(PATTERN(i)) = S(PATTERN(i-1)) && PATTERN[i] == TEXT[j], S(0) = 1
在英文中,“
PATTERN.substring(0,i)
”匹配TEXT的子字符串,如果先前的子字符串“PATTERN.substring(0, i-1)
”已经成功匹配,并且PATTERN[i]
处的字符与TEXT[j]
处的字符相同。
我不理解的是这个算法的位移实现。官方论文详细介绍了这个算法的基本原理,但我似乎无法想象出应该发生什么。 算法规范只有论文的前两页,但我会强调重要的部分:
这是概念的位移版本:
如果有人能帮助我理解正在发生的事情,我将不胜感激。