(a) 포인트 세트의 가장 동쪽 절반과 (b) 포인트 세트의 최 북쪽 절반을 요청하는 방법을 알아 냈다고 가정하면 거기에 갈 수 있습니다. 이것들로부터, 물론, (c) 가장 서쪽의 절반 또는 (d) 가장 남쪽의 절반을 쉽게 얻을 수 있습니다. (QGIS는 모르지만 일반적으로 (a)를 수행하는 한 가지 방법은 중간 x 좌표를 요청한 다음 x 좌표가이를 초과하는 모든 포인트를 가져 오는 것입니다. (b)-(d)에 대한 솔루션은 유사합니다 .)
이 기능을 사용하면 쉬운 재귀로 솔루션을 얻을 수 있습니다. 이를 설명하기 위해, Half
앞의 연산을 구현 하는 프로 시저가 있다고 가정 해 봅시다 . 앞의 연산은 두 개의 인수를 취합니다. 첫 번째는 포인트 세트이고 두 번째는 true
동서 파티셔닝이 필요한 경우와 같고 false
그렇지 않으면 같은 코드 입니다. 요청에 따라 파티션을 분할하는 입력의 두 서브 세트를 리턴합니다.
Procedure Box(P: set of points, i: boolean, n: integer)
Begin
If (Count(P) > 2*n) then
{R,S} = Half(P,i)
Q = Box(R,!i,n) + Box(S,!i,n)
Else
Q = {P}
Endif
Return Q
End
이 의사 코드에서, R 및 S 파티션 P; Box (R,! i, n)은 직교 방향으로 R의 구획이고 , Box (S,! i, n)은 직교 방향으로의 S의 구획이며, "+"는 집합 이론적 결합을 형성하고, {}는 세트를 지정합니다. (분할 방향을 바꾸면 스트립 대신 상자가 만들어집니다.) 매개 변수 n 은 파티션에서 그룹의 최소 크기를 지정합니다. 최대 크기는 2 n 입니다.
여기서, 예시로서, Box(P,true,100)
100에서 200 사이의 그룹으로 분할 된 12,891 개의 랜덤 포인트의 세트 P가있다 . 이 알고리즘은 128 개의 상자 중 37 개의 상자에 100 개의 점이 있고 91 개의 상자에 101 개의 점이있는 128 개의 상자를 만듭니다.