Массив суффикса здания от дерева суффикса.Inforder Посещение, когда у узела более двух детей
-
29-09-2020 - |
Вопрос
из примечаний:
Нетрудно соблюдать, чтобы массив суффикса $ \ texttt {sa} $ Текст $ \ texttt {t} $ может быть получен из дерева суффикса $ \ texttt {st} $ , выполняя посещение в заказа: каждый раз, когда лист встречаются, суффикс-индекс, хранящийся в этом листе, записывается в Массив суффикса $ \ texttt {sa} $ ; Каждый раз, когда внутренний узел U столкнулся, его связанное значение записано в массив $ \ texttt {lcp} $ .
Позвольте сказать, что вы посещаете левый ребенок, затем узел, то другой левый ребенок. Тогда вы снова посещаете узел?
SA в массиве указателя на суффиксы, упорядоченный лексикографически.
LCP содержит самый длинный общий префикс между двумя последовательными суффиксами $ \ Text {Shaft} _ {SA [I]} \ Text {и} \ text} {shart} _ {sa [i + 1]} $ .
\ $ представляет собой символ, которая меньше, чем у каждого другого char.
Значение, связанное с каждым узлом, - это длина префикса, написанного до сих пор.
Листья представляет индексы суффиксов. Если t= Banana \ $, лист 3 представляет нана \ $ (t [3,7])
На рисунке есть то, что должно быть деревом суффикса, но я думаю, что есть ошибка, поскольку края должны быть отсортированы в соответствии с их меткой, а листья 7 с краем с надписью «\ $» должен быть крайне левым листом и край.
При моделировании алгоритма сначала вы посещаете узел 7 (используя фиксированную версию дерева), затем корню, поэтому у вас есть
SA = [7, ...]
lcp = [0, ...]
.
Тогда давайте скажем, вы продолжаете продолжаться с поиском визита U. Когда вы вернетесь к корню, вы снова вставляете значение 0 в LCP ? Или вы делаете это только в первый раз, когда вы посетили рут?
Решение
Если узел имеет $ l $ детей, с $ l \ geq 2 $ во времяВам необходимо лечить первый $ L-1 $ Детям в виде левых узлов, и вам нужно посетить родительский (Время $ l-1 $ ), написание несколько раз длина префикса, написанного в массиве LCP.
Это, примененное к дереву на изображении, даст правильный:
SA = [7, 6, 4, 2, 1, 5, 3]
lcp = [0, 1, 3, 0, 0, 2]
.
Иметь в виду, что край, помеченный «$» с листом 7, должен быть левым.