Bu soru birkaç şekilde okunabilir. Çok sayıda puanınız olduğu ve bunları defalarca koordinat çifti olarak verilen rasgele puanlarla sorgulama niyetinde olduğunuzu ve önceden sabit olarak n ile tespit edildiğinde sondaya en yakın noktaları elde etmek istediğinizi söylüyorum. (Prensip olarak, eğer n değişecek olursa, mümkün olan her n için bir veri yapısı oluşturabilir ve her prob için O (1) zaman içinde seçebilirsiniz: bu çok uzun bir kurulum süresi alabilir ve çok fazla RAM gerektirir, ancak biz Bu tür endişeleri görmezden gelmeleri söylenir.)
Yapı düzeni-n Voronoi diyagram tüm noktaları. Bu, düzlemi, her biri aynı komşu olan bağlı bölgelere ayırır. Bu durum, birçok verimli çözüme sahip olan poligon noktası problemine durumu azaltır.
Voronoi diyagramı için bir vektör veri yapısı kullanarak, poligondaki nokta aramaları O (log (n)) zaman alacaktır. Pratik amaçlar için, bu O (1) basitçe diyagramın raster versiyonunu oluşturarak son derece küçük bir katsayılı katsayı ile yapabilirsiniz. Rasterdeki hücrelerin değerleri, (i) en yakın n noktalarının bir listesine bir gösterici veya (ii) bu hücrenin diyagramda iki veya daha fazla bölgeye oturduğunun bir göstergesidir. (X, y) konumundaki rastgele bir nokta için test:
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).
O (1) performansını elde etmek için, raster ağ gözü, çok az Voronoi bölgesini barındıran hücrelere nispeten az sayıda prob noktasının düşeceği kadar iyi olmalıdır. Bu her zaman, şebekeler için depolama potansiyel olarak büyük bir masrafla gerçekleştirilebilir.