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