Я пытаюсь понять реализацию алгоритма создания массива суффиксов линейного времени Карккайненом, П. Сандерсом. Подробности алгоритма можно найти здесь.
Мне удалось понять общую концепцию, но я не смог сопоставить ее с предоставленной реализацией и, следовательно, не смог четко ее понять.
Вот начальные пути кода, которые меня смущают.
Согласно статье: n0, n1, n2 представляют количество троек, начиная с i mod 3 = (0,1,2)
По коду: n0 = (n + 2)/3, n1 = (n + 1)/3, n2 = n/3; => Как были получены эти инициализации?
Согласно статье: нам нужно создать T`, который представляет собой конкатенацию триплетов в i mod 3! = 0
По коду: n02 = n0 + n2; s12 = [n02] ==> Как появился n02? Должно быть n12, т.е. n1 + n2.
В соответствии с кодом: for (int i = 0, j = 0; i ‹ n + (n0 - n1); i++) заполните s12 такими тройками, что i%3 != 0; => Почему цикл for выполняется n + (n0 - n1) раз? Это должно быть просто n1 + n2. Не должно быть?
Я не могу продолжить из-за этого :( Пожалуйста, помогите.