Префикс-функция — различия между версиями
Vasin (обсуждение | вклад) |
Vasin (обсуждение | вклад) |
||
Строка 22: | Строка 22: | ||
| <tex>7</tex> || abcabcd || 0 | | <tex>7</tex> || abcabcd || 0 | ||
|} | |} | ||
+ | ==Псевдокод== | ||
+ | '''Prefix_function''' (<tex>s</tex>) | ||
+ | '''for''' <tex>i \leftarrow 1</tex> '''to''' <tex>n</tex> | ||
+ | '''for''' <tex>j \leftarrow 1</tex> '''to''' <tex>i - 1</tex> | ||
+ | '''if''' <tex>s[1..j] = s[i - j + 1, i]</tex> | ||
+ | <tex> pi[i] \leftarrow j</tex> | ||
+ | '''return''' <tex>pi</tex> |
Версия 22:53, 24 марта 2012
Префикс-функция строки
— функция .Алгоритм
Наивный алгоритм вычисляет префикс функцию непосредственно по определению, сравнивая префиксы и суффиксы строк.
Пример
Рассмотрим строку abcabcd, для которой префикс-функции равно
.Шаг | Строка | Значение функции |
---|---|---|
a | 0 | |
ab | 0 | |
abc | 0 | |
abca | 1 | |
abcab | 2 | |
abcabc | 3 | |
abcabcd | 0 |
Псевдокод
Prefix_function () for to for to if return