Префикс-функция — различия между версиями
Vasin (обсуждение | вклад) |
(→Псевдокод) |
||
Строка 25: | Строка 25: | ||
==Псевдокод== | ==Псевдокод== | ||
'''Prefix_function''' (<tex>s</tex>) | '''Prefix_function''' (<tex>s</tex>) | ||
− | + | pi = 0 | |
− | '''for''' | + | '''for''' i = 1 '''to''' n |
− | '''for''' | + | '''for''' j = 1 '''to''' i - 1 |
− | '''if''' | + | '''if''' s[1..j] == s[i - j + 1..i] |
− | + | pi[i] = j | |
− | '''return''' | + | '''return''' pi |
==Время работы== | ==Время работы== |
Версия 13:41, 4 апреля 2012
Префикс-функция строки
— функция .Содержание
Алгоритм
Наивный алгоритм вычисляет префикс функцию непосредственно по определению, сравнивая префиксы и суффиксы строк.
Пример
Рассмотрим строку abcabcd, для которой значение префикс-функции равно
.Шаг | Строка | Значение функции |
---|---|---|
a | 0 | |
ab | 0 | |
abc | 0 | |
abca | 1 | |
abcab | 2 | |
abcabc | 3 | |
abcabcd | 0 |
Псевдокод
Prefix_function (
)
pi = 0
for i = 1 to n
for j = 1 to i - 1
if s[1..j] == s[i - j + 1..i]
pi[i] = j
return pi
Время работы
Всего
итераций цикла, на каждой из который происходит сравнение строк за , что дает в итоге .Литература
Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. — 2-е изд. — М.: Издательский дом «Вильямс», 2007. — С. 1296.