공간 / 시간적 성능 등에서 옥트리의 장점은 무엇이며, 어떤 상황에서 가장 적용 가능합니까 (3D 그래픽 프로그래밍을 들었습니다)?
kD 트리는 균형 잡힌 이진 트리이고 옥트리는 시도 이므로 장점과 단점은 더 일반적인 데이터 구조에서 상속됩니다. 구체적으로 :
- 재조정은 비용이 많이들 수 있습니다 (octree는 재조정이 필요하지 않습니다).
- 균형 조정은 이기종이 적응성이 뛰어 나기 때문에 더 잘 처리합니다.
- 옥트리에서 더 높은 분기 계수는 균질 분포에 대해 더 얕은 트리 (간접 및 할당 수가 적음)를 의미합니다.
또한, (섹 트리에서와 같이) 이분법은 비트 트위들 링 측면에서 사소한 구현에 적합합니다. 마찬가지로, 범위 조회를 수행 할 때 옥트리가 미리 계산 된 거리에서 큰 이점을 얻을 수 있다고 생각합니다.
편집하다
분명히 시도와 동질성에 대한 언급은 명확해야합니다.
Tries 는 딕셔너리 트리로 표현되는 데이터 구조의 패밀리이며 시퀀스 인 키 (대부분은 문자열이지만 DNA 시퀀스 및 해시 시도에 대한 해시 값의 비트)에 대한 딕셔너리로 사용됩니다. 각 사전이 x, y 및 z 좌표 각각의 한 비트 (트리의 첫 번째 레벨에서 가장 중요한 비트, 두 번째 레벨의 다음 중요한 비트 등)를 매핑하는 경우 트리는 3D 공간을 균일하게 세분화하는 옥트리입니다. 따라서 옥트리는 일반적으로 시도의 특성을 상속합니다.
- 높은 분기 계수는 얕은 트리가 거의 없다는 것을 의미하므로 검색 속도가 빠릅니다. 예를 들어 분기 수준이 256 인 4 단계 트리에 20 단계의 이진 트리를 저장할 수 있습니다.
- 삽입 및 삭제 중에 시도가 재조정되지 않으므로 균형 잡힌 이진 트리에 필요한 값 비싼 작업이 줄어 듭니다.
단점은 이종성이 불균형 한 시도 / 옥트리를 초래할 수 있으므로 검색에 많은 간접적 인 지시가 필요할 수 있다는 것입니다. 시도에서 동등한 문제는 여러 수준의 간접 지향을 단일 수준으로 축소하기 위해 에지 압축을 사용하여 해결됩니다. Octrees는 이것을하지 않지만 octree를 압축하는 것을 막을 수있는 것은 없습니다 (그러나 결과를 octree라고 부를 수는 없다고 생각합니다!).
비교를 위해 trie로 표시되는 문자열 키에 대한 특수 사전을 고려하십시오. 트라이의 첫 번째 레벨은 키의 첫 번째 문자에서 분기됩니다. 두 번째 캐릭터의 두 번째 레벨 등. 사전의 키에서 첫 번째 문자를 검색하여 키에서 두 번째 문자를 찾는 데 사용되는 두 번째 사전을 가져 와서 모든 문자열을 조회 할 수 있습니다. 임의의 키 문자열 세트는 동종 분포입니다. 모든 접두사를 공유하는 키 문자열 세트 (예 : "anti"로 시작하는 모든 단어)는 이기종입니다.분포. 후자의 경우, 첫 번째 사전에는 "a"에 대한 바인딩 하나, "n"에 대한 두 번째 바인딩 만 포함합니다. 동일한 4 개의 키를 사용하여 동일한 4 개의 사전을 검색하여 항상 트리에서 매핑을 검색합니다. 이것은 비효율적이며, 예를 들어 대다수의 입자가 벡터 공간 내에서 작은 부피로 존재하는 이종 입자 분포를 저장하는 데 사용되는 경우 옥트리가 수행하는 작업입니다.