Создание суффиксного массива nlogn
Я изучал создание массивов суффиксов, и я понимаю, что сначала мы сортируем все суффиксы по первому символу, затем по первым 2 символам, затем по первым 4 символам и т. Д., В то время как количество символов, которые нужно рассмотреть, меньше, чем 2n.
Но я сомневаюсь, почему бы нам не выбрать первые 3 символа, затем 9... и так далее. Почему учитываются только 2 символа, поскольку строки являются частью одинаковых строк, а не разных случайных строк?
3 ответа
Я не проанализировал алгоритм построения массива суффиксов полностью, но все же хотел бы поделиться своими мыслями.
По моему скромному мнению, ваш вопрос похож на следующие:
Почему компьютеры используют двоичное кодирование информации вместо троичного?
Почему бинарный поиск делит диапазон на части, а не разделяет его?
Почему существует два пола, а не три?
Причина в том, что число 2 особенное - это наименьшее число во множественном числе. Разница между 1 и 2 является качественной, тогда как разница между 2 и 3 (как и любое другое положительное целое число) является количественной и, следовательно, не такой существенной.
В результате двоичная формулировка многих алгоритмов и структур данных оказывается самой простой, хотя некоторые из них могут быть обобщены с различной степенью сложности для произвольной базы.
Я думаю, что вы рассматриваете только скорость 2^x
против 3^x
где вы, очевидно, предпочли бы последнее. Но вы должны учитывать усилие, необходимое для каждого шага. поскольку 3^x
нужно примерно на 1,58 меньше шагов, чем 2^x
Вы должны быть в состоянии рассчитать один шаг для 3^x
рост менее чем в 1,58 раза, что вам нужно для одного шага в 2^x
рост, чтобы работать лучше. Как правило, проблемы станут намного сложнее, когда вам придется обрабатывать три элемента на каждом шаге вместо двух. Также, если бы вы могли расширить его до 3^x
Вы также можете сделать это для большего n^x
а потом с большой n
ваш алгоритм вдруг не экспоненциальный, а эффективно линейный.
Ответ дается с поста, который вы связали. И как @Leon ответил, алгоритм работает, потому что он использует дихотомический подход для решения проблемы сортировки. если вы правильно прочитали ответ, основная цель - разделить слово на маленькие 2-х символьные фрагменты. Таким образом, 4 символа могут быть легко отсортированы в зависимости от расположения 2 пар символов, 6 символов с 4-2 или 2-4 или 2-2-2 и так далее. Таким образом, иметь слово из 3 букв в таблице не имеет смысла, так как слово из 3 символов можно увидеть имеет 2 символа + позиция в алфавите последнего символа.