Изменения
→Более быстрый поиск
* <tex> M = (L + R) / 2 </tex>.
* <tex> l = </tex><tex>\mathtt {lcp}</tex><tex>(array[L], p) } </tex>.* <tex> r = </tex><tex>\mathtt {lcp}</tex><tex>(array[R], p) } </tex>.
В самом начале просто посчитаем <tex> l </tex> и <tex> r </tex> за линейное время, а во время выполнения алгоритма прямой пересчет производиться не будет, изменения будут происходить за <tex> O(1) </tex>.
* <tex> m_l = </tex><tex>\mathtt {lcp}</tex><tex>(array[L], array[M]) } </tex>.* <tex> m_r = </tex><tex>\mathtt {lcp}</tex><tex>(array[M], array[R]) } </tex>.
Подсчет <tex> m_l </tex> и <tex> m_r </tex> можно производить за <tex> O(1) </tex>, если применять [[Алгоритм Фарака-Колтона и Бендера|алгоритм Фарака-Колтона и Бендера]]. Любая пара суффиксов <tex> array </tex> из диапазона <tex> [L, M] </tex> имеет хотя бы <tex> m_l </tex> совпадений в префиксах. Аналогично любая пара суффиксов <tex> array </tex> из диапазона <tex> [M, R] </tex> имеет хотя бы <tex> m_r </tex> совпадений в префиксах.
Сравнения <tex>< , > , == , \leqslant , \geqslant </tex> при применении к строкам означают полное лексикографическое сравнение строк.
Функция <tex>\mathtt {lcp_z}</tex><tex>(s, p)}</tex> ищет количество совпадений символов строк <tex>s</tex> и <tex>p</tex> начиная с позиции <tex>z</tex>.
<tex>n</tex> {{---}} длина строки <tex>s</tex>, <tex>w</tex> {{---}} длина строки <tex>p</tex>.