Я пытаюсь обвести голову вокруг алгоритма Bitap, но у меня возникли проблемы с пониманием причин шагов алгоритма.String сходство: как именно работает 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)
соответствует подстроку TEXT, если предыдущий подстрока PATTERN.substring(0, i-1)
был успешно сравнен и символ в PATTERN[i]
совпадает с символом в TEXT[j]
.
То, что я не понимаю, является реализацией бит-сдвига. The official paper detailing this algorithm basically lays it out, но я не могу представить, что должно продолжаться. Спецификация алгоритма только первые 2 страницы бумаги, но я выделю важные части:
Вот бит смены версии концепции:
Вот T [текст] для поиска образца строки:
А вот след алгоритма.
В частности, я не понимаю, что табличные T, Значит и причина OR
ИНГ запись в него с текущим состоянием.
Я был бы признателен, если кто-нибудь может помочь мне понять, что именно происходит
Извините, что столкнулся с таким старым вопросом, но как бы расширить этот алгоритм, чтобы он мог обрабатывать поиск с ошибками? –