Pertanyaannya bisa dibaca dalam beberapa cara. Saya menafsirkannya berarti Anda memiliki sejumlah besar poin dan Anda berniat untuk menyelidikinya berulang kali dengan titik arbitrer, diberikan sebagai pasangan koordinat, dan berharap untuk mendapatkan n poin terdekat ke penyelidikan, dengan n diperbaiki sebelumnya. (Pada prinsipnya, jika n akan bervariasi, Anda dapat mengatur struktur data untuk setiap kemungkinan n dan memilihnya dalam waktu O (1) dengan setiap probe: ini bisa memakan waktu setup yang sangat lama dan membutuhkan banyak RAM, tetapi kami diberitahu untuk mengabaikan masalah tersebut.)
Buatlah diagram urutan-n Voronoi dari semua poin. Ini mempartisi pesawat menjadi wilayah yang terhubung, yang masing-masing memiliki n tetangga yang sama. Ini mengurangi situasi menjadi masalah point-in-polygon, yang memiliki banyak solusi efisien.
Menggunakan struktur data vektor untuk diagram Voronoi, pencarian titik-dalam-poligon akan memakan waktu O (log (n)) waktu. Untuk tujuan praktis, Anda dapat membuat O (1) ini dengan koefisien implisit yang sangat kecil hanya dengan membuat versi diagram raster. Nilai sel dalam raster dapat berupa (i) penunjuk ke daftar n titik terdekat atau (ii) indikasi bahwa sel ini mengangkangi dua atau lebih daerah dalam diagram. Tes untuk titik arbitrer di (x, y) menjadi:
Fetch the cell value for (x,y).
If the value is a list of points, return it.
Else apply a vector point-in-polygon algorithm to (x,y).
Untuk mencapai kinerja O (1), mesh raster harus cukup baik sehingga titik probe yang relatif sedikit akan jatuh dalam sel yang mengangkangi beberapa wilayah Voronoi. Ini selalu dapat dicapai, dengan potensi biaya yang besar dalam penyimpanan untuk grid.