최근 트리를 사용하여 가장 긴 공통 부분 문자열 문제를 해결하는 방법을 배우고 있습니다. Wiki 및 기타 온라인 리소스를 통해 배우면 접미사 트리를 사용하여 가장 긴 공통 부분 문자열을 찾아야합니다. 위키로우리가 접두어 트리 (trie)를 사용하여 가장 긴 공통 부분 문자열을 찾는 이유는 무엇입니까?
는 말했다 :
문자열의 집합의 가장 긴 일반적인 문자열
가 잎 노드가 가장 깊은 내부 노드를 문자열에 대한 일반화 된 접미사 트리를 구축하고 을 찾는 찾을 수 있습니다 Justin로
아래의 하위 트리에있는 모든 문자열 에서 말했다 :
String = ABCDE$XABCZ$
End of word character 1 = $
└── (0)
├── (20) $
├── (22) ABC
│ ├── (15) DE$
│ └── (23) Z$
├── (24) BC
│ ├── (16) DE$
│ └── (25) Z$
├── (26) C
│ ├── (17) DE$
│ └── (27) Z$
├── (18) DE$
├── (19) E$
├── (21) XABCZ$
└── (28) Z$
접미사 트리에서는 모든 문자열에서 리프 노드가있는 가장 깊은 내부 노드를 찾아야합니다. 같은 깊이에 여러 개의 노드가있는 경우 해당 노드가 나타내는 문자열의 길이를 비교해야합니다. 즉 ABC, BC 및 C는 모두 동일한 깊이이므로 ABC, BC 및 C 문자열의 길이를 비교하여 어느 것이 더 길어야하는지 비교해야합니다. 분명히 ABC 다.
모든 문자열에서 리프 노드가있는 가장 깊은 내부 노드를 찾는 과정은 실제로 모든 문자열의 모든 접미사 중에서 가장 긴 공통 접두사를 찾는 과정입니다.
여기에 질문이 있습니다. 모든 문자열에서 모든 접미사를 저장하는 접두사 트리를 만드는 이유는 무엇입니까? 그런 다음 접미사 트리를 검색하여이 접미사 중 가장 긴 공통 접두어를 찾을 수 있습니다. 나는이 둘의 차이점을 말할 수 없다. 아무도 내게이 문제를 해결하기 위해 접미사 트리 대신 접미어 트리를 사용하는 몇 가지 실마리를 줄 수 있습니까?
하지만 모든 문자열의 모든 접미어로 트라이를 작성할 수 있습니다. 그것은 모든 접미사가있는 모든 트리 문자열이 마치 접미사 트리와 같은 의미입니까? – JoJo
내가 명확히하자. 트라이의 맨 위에 접미사 트리를 만들 수 있습니다. 순진하지만 작동합니다. ukkonen 알고리즘이 빠릅니다. 일반적으로 trie에는 접미사가 없습니다. http : //stackoverflow.com/questions/13893950/suffix-tree-and-tries-what-is-the-difference. – Bytemain