Uploaded by Эльдар Сакаев

КМП

advertisement
Алгоритм Кнута-МоррисаПратта
История
Алгоритм был разработан Д.Кнутом и В.Праттом и,
независимо от них, Д.Моррисом для эффективного поиска
подстроки в строке.
Результаты своей работы они опубликовали совместно
в 1977 году.
Д. Кнут
Д. Моррис
В. Пратт
Принцип работы
Алгоритм можно разделить на два этапа:
• Создание префикс функции для образа(подстроки)
• Поиск
Префикс-функция
Префикс-функция позволяет отбрасывать ненужные сравнения во
время работы алгоритма.
Префикс-функция для i-го символа образа возвращает значение,
равное максимальной длине совпадающий префикса и суффикса
подстроки в образе, которая заканчивается i-м символом.
0
1
2
3
4
5
a
b
a
a
b
d
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
2
3
4
5
a
b
a
a
b
d
0
0
0
1
2
3
4
5
a
b
a
a
b
d
0
0
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
1
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
1
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
1
2
0
1
2
3
4
5
a
b
a
a
b
d
0
0
1
1
2
0
Пример работы
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
abcabbaabcabd
abcabd
0
1
2
3
4
5
a
b
c
a
b
d
0
0
1
1
2
0
Сложность
Из примера видно, что главный текст размера n мы
проходим всего один раз. Также расходуется время для создания
префикс-функции подстроки размера m. Соответственно
временная сложность алгоритма
O(n + m)
Вывод
Алгоритм эффективно и быстро работает, когда образец и
строка поиска содержат повторяющиеся
последовательности(Алгоритм Бойера-Мура в этом случае слегка
уступает). Поэтому алгоритм широко применяется в олимпиадных
задачах.
Download