(이미 기본 사이트 에서 요청했지만 더 나은 적용 범위를 요청하려면 죄송합니다.)
간결한 데이터 구조 에 대해 알고 있었기 때문에 해당 분야의 최신 개발에 대한 훌륭한 개요가 절실히 필요합니다.
나는 구글에서 내 머리 위로 요청에 대한 구글 결과 상단에서 볼 수있는 많은 기사를 읽었습니다. 나는 여전히 내가 여기서 중요한 것을 놓친 것 같다.
나에게 특히 관심있는 주제는 다음과 같습니다.
부모, 왼쪽 / 오른쪽 자식, 하위 트리의 요소 수를 효율적으로 가져 오는 이진 트리의 간결한 인코딩
여기서 주요 질문은 다음과 같습니다. 내가 아는 모든 접근법은 호흡 우선 순서대로 열거 된 트리 노드를 가정합니다 (이 분야의 개척자 작업과 마찬가지로 Jacobson, G. J (1988). 간결한 정적 데이터 구조). 내 작업에 적합한 것 같습니다. 나는 깊이 우선 레이아웃에 주어진 거대한 이진 트리를 다루고 깊이 우선 노드 인덱스는 다른 노드 속성의 핵심이므로 트리 레이아웃을 변경하면 비용을 최소화해야합니다. 따라서 BF 트리 레이아웃 이외의 다른 것을 고려하여 작품에 대한 참조를 얻는 데 관심이 있습니다.
외부 메모리에 큰 가변 길이 항목 배열. 배열은 변경할 수 없습니다 : 항목을 추가 / 삭제 / 편집 할 필요가 없습니다. 유일한 요구 사항은 O (1) 요소 액세스 시간과 가능한 적은 오버 헤드로, 간단한 오프셋 및 크기 접근 방식보다 낫습니다. 내 작업의 일반적인 데이터에 대해 수집 한 통계는 다음과 같습니다.
전형적인 품목 수-수억, 최대 수백만;
아이템의 약 30 %는 1 비트 이하의 길이를 가지며 ;
40 % -60 % 항목의 길이는 8 비트보다 작습니다.
항목의 몇 퍼센트 만이 32에서 255 비트 사이의 길이를가집니다 (255 비트가 한계 임)
평균 항목 길이 ~ 4 비트 +/- 1 비트.
항목 길이의 다른 분포는 이론적으로 가능하지만 실제로 모든 흥미로운 사례는 위에서 설명한 통계와 비슷합니다.
복잡한 기사, 모호한 튜토리얼, 다소 문서화 된 C / C ++ 라이브러리에 대한 링크-유사한 작업에 유용하거나 교육받은 추측에 의해 그와 비슷한 것-그러한 모든 것들에 감사드립니다.
업데이트 : 나는 질문 1을 추가하는 것을 잊었다. 나는 그것들을 변경하기위한 요구 사항이 없으며, 필요한 모든 것은 노드에서 자식 또는 부모로 항상 이동하는 다양한 방식으로 만 순회하기 때문에 그러한 작업의 평균 비용은 O (1)이었습니다.
또한 일반적인 트리에는 수백만 개의 노드가 있으며 RAM에 완전히 저장해서는 안됩니다.