Изменения

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

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

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

Навигация