Алгоритм Бойера - Мура Применяется для поиска подстроки в строке

advertisement
Алгоритм Бойера - Мура
Применяется для поиска
подстроки в строке
Оценка сложности алгоритма
• На непереодических шаблонах
O(|haystack|+|needle|+|Σ|), на
переодических O(|haystack|·|needle|+|Σ|)
haystack – исходная строка, needle –
шаблон поиска, Σ – алфавит, на
котором производится сравнение
Основные идеи алгоритма
• Сканирование слева направо,
сравнение справа налево
• Поиск стоп - символа
• Поиск совпавшего суффикса
Сканирование и сравнение
• Совмещается начало строки и начало
шаблона, проверка идет с последнего
символа шаблона
• Если символы совпадают, то
производится сравнение
предпоследнего символа шаблона и т.д.
• Если все символы совпали, то образец
найден
Стоп - символ
• Если с шаблоном не совпала первая
сравниваемая буква, то сдвигаем
шаблон вправо до последней такой же
буквы
• Если в шаблоне нет стоп – символа, то
сдвигаем шаблон за стоп – символ.
Суффикс
• Если при сравнении строки и шаблона
совпало 1 или больше символов, то
шаблон сдвигается в зависимости от
того, какой суффикс совпал
Таблица стоп - символов
• В таблице указывается последняя
позиция элемента в шаблоне (за
исключением последней буквы)
• Если в шаблоне нет такого элемента то
в таблицу записывается ноль
Таблица суффиксов
• Для каждого возможного суффикса в
таблицу записывается наименьшая
величина, на которую надо сдвинуть
шаблон чтобы он снова совпал с
суффиксом
Достоинства алгоритма
• Оптимален при отсутствии возможности
провести предварительную обработку
текста
• Достаточно быстрый в большинстве
случаев
Недостатки алгоритма
• На больших алфавитах таблица стоп –
символов может занимать много памяти
• На некоторых “неудачных” текстах его
скорость сильно снижается
Конец
• Спасибо за внимание!
Download