쿼드트리 공간 분할 계산기
점이 몰린 곳만 사분면으로 거듭 쪼개는 쿼드트리를 만들어 칸이 어떻게 갈리는지 그려 줍니다. 사각형 영역 질의에서 몇 개를 건너뛰고 몇 개만 검사했는지 세어 전수 탐색과 나란히 놓습니다.
x와 y를 짝지어 넣습니다. 400개까지 다룹니다.
찾을 사각형
사각형 안의 점
59개
점 140개 중 좌표를 하나하나 검사한 것은 25개뿐이고, 40개는 칸이 통째로 사각형 안에 들어가 검사 없이 담았습니다. 노드 59개는 겹치지 않아 통째로 건너뛰었습니다.
쪼개진 모습
칸이 촘촘한 곳이 점이 몰린 곳입니다. 텅 빈 곳은 쪼갤 이유가 없어 큰 칸 하나로 남아 있습니다 — 같은 해상도를 균등 격자로 내려면 가장 깊은 곳에 맞춰 전체를 쪼개야 해서 칸이 4,096개 필요합니다. 파란 사각형이 찾는 영역, 파란 점이 그 안에 든 점입니다.
깊이별 칸 수
| 깊이 | 칸 | 점이 든 칸 | 담긴 점 |
|---|---|---|---|
| 1 | 2 | 2 | 7 |
| 2 | 4 | 3 | 7 |
| 3 | 7 | 1 | 2 |
| 4 | 24 | 22 | 51 |
| 5 | 47 | 40 | 68 |
| 6 | 4 | 2 | 5 |
깊이가 고르지 않은 것이 쿼드트리의 값어치입니다. 점이 없는 구역은 얕은 채로 남고, 몰린 구역만 깊이 내려갑니다.
사용 방법
- 1점 목록을 넣습니다. 예제 버튼으로 몰린 분포와 고른 분포를 견줘 볼 수 있습니다.
- 2칸 하나의 용량과 최대 깊이를 정합니다.
- 3「쪼개진 모습」에서 점이 몰린 곳만 칸이 촘촘해지는 것을 확인합니다.
- 4찾을 사각형의 네 좌표를 넣습니다.
- 5검사한 점 수와 건너뛴 노드 수를 확인하고, 전수 탐색과 결과가 같은지 봅니다.
자주 묻는 질문
사각 구역에 점을 담다가 정해진 개수를 넘으면 사분면 넷으로 쪼개고, 쪼갠 칸이 또 넘치면 또 쪼개는 자료구조입니다. 그래서 점이 촘촘한 곳은 깊고 텅 빈 곳은 얕은, 분포에 맞춘 울퉁불퉁한 격자가 만들어집니다. 지도·게임 충돌 검사·이미지 압축에 널리 쓰입니다.
빈 칸을 만들지 않습니다. 같은 해상도를 균등 격자로 내려면 가장 깊은 곳에 맞춰 전체를 쪼개야 해서 깊이 d일 때 칸이 4^d개 필요하고, 그 대부분이 텅 빕니다. 쿼드트리는 점이 있는 곳만 쪼개므로 칸 수가 점 개수에 비례합니다. 이 계산기가 「점이 든 칸」과 「같은 해상도의 균등 격자였다면」을 나란히 보여 주니 차이를 바로 볼 수 있습니다.
두 가지 지름길이 있습니다. 노드의 구역이 찾는 사각형과 아예 겹치지 않으면 그 아래를 통째로 건너뛰고(가지치기), 반대로 구역이 사각형에 통째로 들어가면 그 아래 점을 하나도 검사하지 않고 전부 담습니다(싹쓸이). 부분적으로 걸치는 노드만 내려가 점 하나하나를 봅니다. 둘 중 하나만 있으면 이득이 절반입니다.
같은 자리에 점이 여럿이면 아무리 쪼개도 갈라지지 않기 때문입니다. 사분면 중 한 칸에 전부 몰리고 그 칸을 또 쪼개도 마찬가지라 무한 재귀에 빠집니다. 깊이가 한계에 닿으면 용량을 넘겨도 더 쪼개지 않고 그냥 담아야 합니다. 편의를 위한 장치가 아니라 정확성을 위해 반드시 있어야 하는 장치입니다. 예제의 「같은 자리에 겹친 점」으로 확인할 수 있습니다.
가르는 방식이 다릅니다. k-d 트리는 점 하나를 골라 그 점을 지나는 선으로 한 번에 둘로 나누고 축을 번갈아 씁니다. 쿼드트리는 구역 한가운데를 기준으로 한 번에 넷으로 나눕니다. k-d 트리는 중앙값으로 갈라 균형이 잡히지만 점을 넣고 빼면 균형이 깨지고, 쿼드트리는 칸의 위치가 좌표만으로 정해져 삽입·삭제가 쉽습니다.
작게 잡으면 칸이 잘게 갈려 질의에서 걸러 내는 힘이 세지지만 노드가 많아져 메모리와 순회 비용이 늘고, 크게 잡으면 반대입니다. 실무에서는 4~16 사이를 흔히 씁니다. 이 계산기에서 용량을 바꿔 가며 노드 수와 검사한 점 수가 어떻게 맞바뀌는지 직접 볼 수 있습니다.
전송되지 않습니다. 트리를 쌓고 질의하는 일이 모두 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 정답지는 가지치기를 전혀 하지 않는 전수 탐색입니다. 무작위 점 1~80개, 무작위 사각형, 무작위 용량으로 1,500번 돌려 결과가 모두 같은지 확인했습니다. 화면에도 매번 대조 결과를 함께 보여 줍니다.
- 구조도 검사합니다. 모든 점이 정확히 한 잎에 한 번씩 들어가는지, 노드가 기록한 개수가 실제 아래 점 수와 같은지, 사분면 넷의 넓이 합이 부모와 같은지(겹치지도 비지도 않는지), 용량을 넘긴 잎이 최대 깊이에 닿은 것뿐인지를 봅니다.
- 최대 깊이가 없으면 터지는 경우를 실제로 만들어 확인했습니다. 같은 좌표의 점 50개를 넣으면 깊이 한계까지 내려가 한 잎에 50개가 그대로 남습니다. 깊이 한계를 올리면 그만큼 더 깊어질 뿐 끝내 갈라지지 않습니다.
- 가지치기와 싹쓸이의 이득도 값으로 확인했습니다. 점 400개에서 좁은 사각형을 물으면 검사한 점이 전체의 절반 아래로 떨어지고, 사각형이 넓어질수록 검사 없이 담는 점이 늘어납니다.
- 경계 위의 점은 큰 쪽 사분면에 넣어 어느 점도 두 칸에 걸치거나 어느 칸에도 안 들어가는 일이 없게 했습니다. 영역 질의에서는 사각형의 경계 위에 있는 점도 포함합니다.
- 루트 구역은 모든 점을 담는 정사각형으로 잡습니다. 정사각형이라야 쪼갤 때마다 칸이 계속 정사각형으로 남습니다.
- 점은 400개까지, 최대 깊이는 12까지 다룹니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.