Да.
Смотри также
В качестве крайнего примера рассмотрим, нужно ли нам найти шаблон ABCD
в тексте 12345678
.
Самое раннее возможное совпадение, конечно, начинается в начале текста. Мы пытаемся сопоставить шаблон в обратном направлении, поэтому мы видим, можем ли мы сопоставить D
с 4-м символом текста.
?
12345678
ABCD
Это не совпадение, поэтому мы знаем, что нет смысла пытаться сопоставить ABC
с первыми 3 символами. Мы также знаем (после предварительной обработки линейного времени), что символ, который мы находим, 4
, вообще не появляется в шаблоне, поэтому самое раннее возможное совпадение, которое мы можем найти, должно начинаться со следующей позиции, то есть с 5-го символа.
Снова мы пытаемся сопоставить в обратном направлении, поэтому мы видим, можем ли мы сопоставить D
с восьмым символом.
?
12345678
ABCD
Находим 8
; это не совпадение. Поэтому шаблон не появляется в тексте. Нам нужно было только увидеть 2 символа из текста.
Это одна из важных характеристик алгоритма Бойера-Мура: для текста длиной N
и фиксированного шаблона длины M
средняя производительность в случае сравнения N/M
. То есть, возможно, сначала несколько нелогично, чем длиннее шаблон, который мы ищем, тем быстрее мы обычно можем его найти .