쿼드 트리를 구현하고 있습니다. 이 데이터 구조를 모르는 사람들을 위해 다음과 같은 작은 설명을 포함시킵니다.
쿼드 트리를 데이터 구조 및 팔진은 3 차원 공간에서 무엇 유클리드 평면이다. 쿼드 트리의 일반적인 용도는 공간 인덱싱입니다.
그것들의 작동 방식을 요약하기 위해 쿼드 트리는 최대 용량과 초기 경계 상자가있는 컬렉션입니다 (여기서 사각형이라고합시다). 최대 용량에 도달 한 쿼드 트리에 요소를 삽입하려고 할 때 쿼드 트리는 4 개의 쿼드 트리로 세분화됩니다 (기하학적 표현은 삽입하기 전에 트리보다 4 배 더 작은 면적을 갖습니다). 각 요소는 위치에 따라 하위 트리에 재배포됩니다. 사각형으로 작업 할 때 왼쪽 상단 경계.
따라서 쿼드 트리는 잎이고 그 용량보다 적은 요소를 갖거나 4 개의 쿼드 트리를 자식으로하는 나무 (보통 북서, 북동, 남서, 남동)입니다.
내 관심사는 중복을 추가하려고하면 같은 요소가 여러 번 같은 위치이거나 같은 위치에 여러 요소가있을 수 있지만 쿼드 트리는 가장자리를 처리하는 데 근본적인 문제가 있다는 것입니다.
예를 들어, 용량이 1 인 쿼드 트리와 단위 사각형을 경계 상자로 사용하는 경우 :
[(0,0),(0,1),(1,1),(1,0)]
그리고 왼쪽 상단 경계가 원점 인 사각형을 두 번 삽입하십시오 (또는 용량이 N> 1 인 쿼드 트리에서 N + 1 번 삽입하려고하는 경우)
quadtree->insert(0.0, 0.0, 0.1, 0.1)
quadtree->insert(0.0, 0.0, 0.1, 0.1)
첫 번째 인서트는 문제가되지 않습니다 :
그러나 첫 번째 인서트는 용량이 1이기 때문에 세분화를 트리거합니다.
따라서 두 직사각형 모두 동일한 하위 트리에 배치됩니다.
그런 다음 두 요소가 동일한 쿼드 트리에 도착하고 하위 분할을 트리거합니다.
그리고 등 (0, 0)은 항상 생성 된 4 개 중 동일한 하위 트리에 있기 때문에 하위 재분할 방법이 무한정 실행됩니다. 즉 무한 재귀 문제가 발생합니다.
복제본이있는 쿼드 트리를 사용할 수 있습니까? (그렇지 않으면 그것을로 구현할 수 있습니다 Set
)
쿼드 트리의 아키텍처를 완전히 손상시키지 않고이 문제를 어떻게 해결할 수 있습니까?