diff --git a/string-searching.md b/string-searching.md index 2325ca8..29ee6e5 100644 --- a/string-searching.md +++ b/string-searching.md @@ -10,7 +10,7 @@ ## Префикс-функция -**Определение**. Префикс-функцией от строки $s$ называется массив $p$, где $p_i$ равно длине самого большого префикса строки $s_0 s_1 s_2 \ldots s_i$, который также является и суффиксом $i$-того префика (не считая весь $i$-й префикс). +**Определение**. Префикс-функцией от строки $s$ называется массив $p$, где $p_i$ равно длине самого большого префикса строки $s_0 s_1 s_2 \ldots s_i$, который также является и суффиксом $i$-того префикса (не считая весь $i$-й префикс). Например, самый большой префикс, который равен суффиксу для строки «aataataa» — это «aataa»; префикс-функция для этой строки равна $[0, 1, 0, 1, 2, 3, 4, 5]$. @@ -31,9 +31,9 @@ vector slow_prefix_function(string s) { ### Как это поможет решить исходную задачу? -Давайте пока поверим, что мы умеем считать префикс-функцию за линейное от размера строки, и научимся с помощью нее искать подстроку в строке. +Давайте пока поверим, что мы умеем считать префикс-функцию за линейное от размера строки время, и научимся с помощью нее искать подстроку в строке. -Соединим подстроки $s$ и $t$ каким-нибудь символом, который не встречается ни там, ни там — обозначим пусть этот символ #. Посмотрим на префикс-функцию получившейся строки $s\#t$. +Соединим строки $s$ и $t$ каким-нибудь символом, который не встречается ни там, ни там — обозначим пусть этот символ #. Посмотрим на префикс-функцию получившейся строки $s\#t$. ```c++ string s = "choose"; @@ -181,7 +181,7 @@ vector z_function (string s) { ### Сравнение -В целом они зет- и префикс-функции очень похожи, но алгоритм Кнута-Морриса-Пратта есть во всех классических учебниках по программированию, а про z-функцию почему-то мало кто знает кроме олимпиадных программистов. +В целом зет- и префикс-функции очень похожи, но алгоритм Кнута-Морриса-Пратта есть во всех классических учебниках по программированию, а про z-функцию почему-то мало кто знает, кроме олимпиадных программистов. Про префикс-функцию важно ещё знать, что она онлайновая — достаточно считать следующий символ, и сразу можно узнать значение.