Изменения

Перейти к: навигация, поиск

Алгоритм Бойера-Мура

479 байт убрано, 21:22, 12 мая 2014
Правило сдвига хорошего суффикса
Если при сравнении текста и шаблона совпало один или больше символов, шаблон сдвигается в зависимости от того, какой суффикс совпал.
Если существуют такие подстроки равные <tex>u</tex>, что они полностью входят в <tex>x</tex> и идут справа от символов, отличных от <tex>x[i]</tex>, то сдвиг происходит к самой правой из них. Ясно, что в таком случае имеет смысл начинать сравнение не с очередного символа отличной от конца <tex>xu </tex>, а перейти к следующей по порядку подстроке равной суффиксу шаблона <tex>x</tex> из-за того. Понятно, что подстрока <tex>y[i+j+1 \dots j+m-1]</tex> уже явно будет содержаться в шаблонетаким образом мы не пропустим никакую строку, так как было уже проверено сдвиг просходит на последних следующую слева подстроку <tex>m - i - 1u </tex> итерациях алгоритмаот суффикса. После выравнивания шаблона по этой подстроке можно начать сравнивать шаблон с текстом в новой позиции. При этом сравнение шаблона опять начнется с его последнего (самого правого) символа. На новом шаге алгоритма будет заново проверена подстрока можно строку <tex>u</tex>. Для улучшения асимптотики её повторную проверку можно пропускать, так как она уже была выравнена на предыдущем шагепо которой был произведён cдвиг, не сравнивать с текстом {{---}} возможность для модификации и дальнейшего ускорения алгоритма.
[[Файл:boyer-moore-algorithm-1.png|450px|thumb|center|'''Сдвиг хорошего суффикса''', вся подстрока <tex>u</tex> полностью встречается справа от символа <tex>c</tex>, отличного от символа <tex>a</tex>.]]

Навигация