접미사 트리에서 접미사 배열을 구축합니다.노드가 두 명 이상의 자녀가있을 때의 정렬기 방문
-
29-09-2020 - |
문제
노트에서 :
접미사 배열 $ \ texttt {sa} $ 을 관찰하는 것은 어렵지 않습니다. $ \ texttt {t} $ \ texttt {T} $ \ texttt {t} $ 은 접미사 트리에서 얻을 수 있습니다 $ \ texttt {st} $ \ span> 잎을 마시면 매번 발생한이 잎에 저장된 접미사 색인은 접미어 배열 $ \ texttt {sa} $ ; 내부 노드 u가 매번 발생한 관련 값이 배열에 기록됩니다. $ \ texttt {lcp} $ .
노드가 두 개 이상의 자녀가있을 때 어떻게 지내기를합니까?
가장 왼쪽 자식을 방문한 다음 노드, 다른 가장 왼쪽 아이를 방문하십시오. 그런 다음 노드를 다시 방문합니까?
sa 라는 조명 조명으로 명령 된 접미사의 배열에서.
LCP 은 2 개의 연속 접미사 $ \ text {suff} _ {sa [i]} \ text {and} \ text 사이의 가장 긴 공통 접두사가 포함되어 있습니다. {부탁} _ _} $
\ $는 다른 모든 char보다 작은 char를 나타냅니다.
각 노드와 관련된 값은 지금까지 철자가 철자 된 접두사의 길이입니다.
잎은 접미사의 지표를 나타냅니다. t= 바나나 \ $ 인 경우 잎 3은 나나 \ $ (t [3,7])
을 나타냅니다.이미지의 접미사 트리가되어야합니다. 그러나 가장자리에 따라 가장자리가 "\ $"라고 표시된 가장자리가 가장 왼쪽 잎이어야하며 잎 7이 왼쪽 잎이어야합니다. 가장자리.
알고리즘을 시뮬레이션 할 때 먼저 노드 7 (트리의 고정 버전 사용)을 방문한 다음 루트를 방문합니다. 그래서
가 있습니다.SA = [7, ...]
lcp = [0, ...]
.
그런 다음 u가 계속해서 계속 진행하고 있습니다. 루트로 돌아가면 LCP 에 값을 다시 삽입합니까? 또는 루트를 처음 방문한 시간 만 수행합니까?
해결책
노드에 $ l $ 어린이, $ l \ geq 2 $ 첫 번째 $ l-1 $ 어린이를 왼쪽 노드로 취급해야하며, 상위 복수 () 시간, 접두사의 길이가 LCP 배열 내부에 철자가있는 접두사의 길이를 씁니다.
이미지의 트리에 적용된이 문제는 올바른 것을 생성합니다 :
SA = [7, 6, 4, 2, 1, 5, 3]
lcp = [0, 1, 3, 0, 0, 2]
.
잎 7과 "$"라는 가장자리가 가장 왼쪽이어야한다는 것을 명심하십시오.