Сходство строк :Как именно работает Bitap?

Я пытаюсь разобраться в алгоритме 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].

Чего я не понимаю, так это реализации сдвига бита -. Официальный документ, подробно описывающий этот алгоритм, в основном излагает его , но я не могу представить себе, что должно происходить. Спецификация алгоритма — это только первые 2 страницы статьи , но я выделю важные части:

Вот битовая -сдвигающая версия концепции:

enter image description here

Вот T[text] для примера строки поиска:

enter image description here

А вот и след алгоритма.

enter image description here

В частности, я не понимаю, что означает таблица T, и причину ORдобавления в нее записи с текущим состоянием.

Буду признателен, если кто-нибудь поможет мне понять, что именно происходит

18
задан Kevin 3 July 2012 в 19:38
поделиться