Sử dụng phương pháp phân vùng không gian để tìm kiếm hàng xóm gần nhất .
Ví dụ, một cách tiếp cận là sử dụng cây -d trên bề mặt của hình cầu. Bạn có thể biểu thị mọi điểm trên mặt cầu bằng tọa độ hình cầu : mọi điểm trên mặt cầu đều có tọa độ . Do đó, chúng ta có một không gian 2 chiều với tọa độ . Bây giờ hãy sắp xếp các điểm của bạn bằng cây -d, ở đây chúng tôi có chiều. Có các thuật toán tiêu chuẩn cho tìm kiếm hàng xóm gần nhất trong cây -d; theo kinh nghiệm, thời gian chạy dự kiến là .k(1,θ,ϕ)(θ,ϕ)kk=2kO(lgN)
Bạn sẽ phải thực hiện các sửa đổi nhỏ cho cấu trúc dữ liệu để phản ánh rằng tọa độ "bao quanh" modulo , nhưng điều này không khó. Các chương trình con chính được sử dụng trong việc tìm kiếm người hàng xóm gần nhất trong một cây -d là: cho một điểm và "hình chữ nhật" khu vực , tìm khoảng cách từ đến điểm gần nhất trong . Trong trường hợp của bạn, vùng là , tức là tập hợp các điểm . Thật dễ dàng để tính khoảng cách từ đến điểm gần nhất trong2πkPRPRR[θℓ,θu]×[ϕℓ,ϕu]{(1,θ,ϕ):θℓ≤θ≤θu,ϕℓ≤ϕ≤ϕu}PR . Điều này sau đó sẽ cho phép bạn sử dụng thuật toán tiêu chuẩn cho tìm kiếm hàng xóm gần nhất trong cây -d.k
Ngoài ra, thay vì cây -d, bạn có thể sử dụng bất kỳ cây phân vùng không gian nhị phân nào khác hoặc bạn có thể xem các cây số liệu , mặc dù tôi không có bất kỳ lý do nào để hy vọng chúng sẽ tốt hơn đáng kể.k