Изменения

Перейти к: навигация, поиск
Алгоритм за O(N^2\log(N)) (наивно)
Согласно [[Суффиксный массив|определению]] суффиксного массива, для его построения достаточно отсортировать все суффиксы строки. Заменим сортировку суффиксов строки <tex>\alpha</tex> на сортировку циклических сдвигов строки <tex>\alpha\$</tex>, где символ <tex>\$</tex> строго меньше любого символа из <tex>\alpha</tex>. Тогда если в упорядоченных циклических сдвигах отбросить суффикс, начинающийся на <tex>\$</tex>, то получатся упорядоченные суффиксы исходной строки <tex>\alpha</tex>. В дальнейшем положим <tex>|\alpha\$| = n </tex> (заметим, что все циклические сдвиги также имеют длину <tex>n</tex>), а также <tex>\alpha\$ = s</tex>.
== Алгоритм за <tex>O(N^2\log(N))</tex> (наивно) Наивный алгоритм ==
Данный алгоритм достаточно тривиален. Отсортируем все циклические сдвиги строки <tex>\alpha\$</tex>, воспользовавшись любым известным методом логарифмической сортировки (например "сортировка слиянием"). Тогда сравнение любых двух циклических сдвигов будет осуществляться за <tex>O(Nn)</tex> и суммарная сложность алгоритма составит <tex>O(Nn^2\log(Nn))</tex>.
=== Псевдокод ===
Анонимный участник

Навигация