다음 작업을 수행 할 수 있는 문자 집합 위에 문자열 집합을 저장하는 데이터 구조를 찾고 있습니다. 우리 나타내고 문자열 집합 데이터 저장 구조로서 .
Add-Prefix-Set
에 : 일부 설정 주어진 크기 상수에 의해 제한되고, 그 문자열의 길이 상수에 의해 제한되는 문자열 (비어)의, 반환 . 이 경계 상수는 모두 전역입니다. 모든 입력 대해 동일합니다 .Get-Prefixes
에 : 리턴 입니다. 시간에 내용을 열거 할 수 있다면이 세트에 어떤 구조가 사용되는지는 신경 쓰지 않습니다 .Remove-Prefixes
에 : 리턴 .Merge
: 및 이면 반환하십시오 .
이제 시간 에 모든 작업을 수행하고 싶지만 시간 에 모든 작업을 수행하는 구조는 괜찮습니다. 여기서 은 가장 긴 문자열의 길이입니다. 구조. 병합의 경우에, I는 원하는 실행 시간, 있다 처음과 번째 구조를.
추가 요구 사항은 구조가 변경 불가능하거나 적어도 위의 작업이 '새로운'구조를 반환하여 이전 구조에 대한 포인터가 여전히 이전과 같이 작동해야한다는 것입니다.
할부 상환에 대한 참고 사항 : 괜찮습니다. 그러나 지속성을 조심해야합니다. 항상 오래된 구조를 재사용 할 때 같은 구조에서 특정 작업 집합으로 최악의 경우를 겪으면 문제가 생길 수 있습니다 (따라서 생성하는 새 구조는 무시).
작업중 인 파싱 알고리즘에서 이러한 구조를 사용하고 싶습니다. 위의 구조는 알고리즘에 필요한 미리보기를 유지합니다.
나는 이미 trie 사용을 고려 했지만 주요 문제는 효율적으로 병합하는 방법을 모른다는 것입니다. 문자열 집합이 Add-Prefix-Set
단일 문자 문자열로만 구성된 경우 이러한 집합을 스택에 저장 하면 처음 세 작업의 실행 시간 이 제공 됩니다. 그러나이 방법은 병합에도 효과가 없습니다.
마지막으로, 요인 관심이 없습니다. : 이것은 내가 돌보는 모든 것에 대해 일정합니다.
Add-Prefix-Set
)
Add-Prefix-Set
되거나 임의의 문자열 세트로 시작합니까?