Изменения

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

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

533 байта добавлено, 14:18, 17 ноября 2018
Псевдокод: неправильный код, пусть пересмотрят нормальные программисты, бред написан
'''Алгоритм Бойера-Мура''', разработанный двумя учеными {{---}} Бойером (Robert S. Boyer) и Муром (J. Strother Moore), считается наиболее быстрым среди алгоритмов общего назначения, предназначенных для поиска подстроки в строке. Важной особенностью алгоритма является то, что он выполняет сравнения в шаблоне справа налево в отличии отличие от многих других алгоритмов.
Алгоритм Бойера-Мура считается наиболее эффективным алгоритмом поиска шаблонов в стандартных приложениях и командах, таких как Ctrl+F в браузерах и текстовых редакторах.
'''return''' true
Функция, возвращающая для позиции <tex>p</tex> длину максимальной подстроки, которая является суффиксом шаблона <tex>x</tex>. Требует <tex>O(m - p)</tex> времени.//здесь неправильно, нет смысла сравнивать элементы ШАБЛОНА С САМИМ СОБОЙ
'''int''' suffixLength('''char'''[m] x, '''int''' p):
'''int''' len = 0
Основная функция алгоритма Бойера-Мура
'''function''' BM('''char'''[n] y, '''char'''[m] x): '''vector <int>''' '''vector <int>''' answer <font color=green>// вектор, содержащий все вхождения подстроки в строку</font>
'''if''' m == 0
'''return''' answer.pushBack(-1 ) <font color=green>// Искомая подстрока является пустой</font> '''return''' answer
<font color=green>// Предварительные вычисления</font>
'''while''' x[j] == y[i]
'''if''' j == 0
'''return''' answer.pushBack(i ) <font color=green>// Найдена подстрока в позиции i</font>
--i
--j
i += max(bmGs[m - 1 - j], bmBc[y[i]])
'''if''' (answer == <tex> \varnothing </tex>)
answer.pushBack(-1) <font color=green>// Искомая подстрока не найдена</font>
'''return''' answer
==Пример==
|[[Файл:BMexample1.png|550px]]
|<tex>(7, 1)</tex>
|Сравниванием последние символы, они неравны, поэтому сдвигаемся на <tex> bmGs[y[j]]</tex>, где <tex>y[j]</tex> {{- --}} это не совпавший символ. В данном случае <tex>y[j]=7</tex>, а <tex> bmGs[7]= 1</tex>.
|-align="center"
|[[Файл:BMexample2.png|550px]]
Анонимный участник

Навигация