我正在尝试围绕Bitap算法进行思考,但无法理解算法步骤背后的原因。
我了解算法的基本前提,即(如果我错了,请纠正我):
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)
如果前一个子字符串PATTERN.substring(0, i-1)
成功匹配并且字符 at 与字符 atPATTERN[i]
相同,则匹配 TEXT 的子字符串TEXT[j]
。
我不明白的是这个的位移实现。详细介绍该算法的官方论文基本上已经列出,但我似乎无法想象应该发生什么。 算法规范只是论文的前 2 页,但我会强调重要的部分:
这是该概念的位移版本:
这是示例搜索字符串的 T[text]:
这是算法的痕迹。
具体来说,我不明白 T 表的含义,以及OR
使用当前状态在其中添加条目的原因。
如果有人能帮助我了解到底发生了什么,我将不胜感激