Изменения

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

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

6 байт убрано, 23:52, 9 мая 2014
м
Алгоритм
Предположим, что в процессе сравнения возникает несовпадение между символом <tex>x[i]=a</tex> шаблона и символом <tex>y[i+j]=b</tex> исходного текста при проверке в позиции <tex>j</tex>. Тогда <tex>x[i+1 .. m-1]=y[i+j+1 .. j+m-1]=u</tex> и <tex>x[i] \neq y[i+j]</tex>, т.е. <tex>m - i - 1</tex> символов паттерна уже совпало.
Операция '''сдвига хорошего суффикса''' состоит в выравнивании подстроки <tex>u</tex> с его её самым правым вхождением в <tex>x</tex>, что идет впереди идущим справа от символа, отличного от <tex>x[i]</tex>.
[[Файл:boyer-moore-algorithm-1.gif|450px|thumb|center|'''Сдвиг хорошего суффикса''', вся подстрока <tex>u</tex> полностью встречается повторно до справа от символа <tex>c</tex>, отличного от символа <tex>a</tex>.]]
Если не существует такого сегмента, то смещение состоит в выравнивании самого длинного суффикса <tex>v</tex> подстроки <tex>y[i+j+1 .. j+m-1]</tex> с соответствующим префиксом <tex>x</tex>.
418
правок

Навигация