İki set arasında 2B olarak en yakın nokta çifti


11

2 boyutlu düzlemde iki nokta noktam var. I noktası en yakın çifti bulmak istiyoruz s , t böyle s S , T T arasında ve Öklit mesafesi s , t mümkün olduğu kadar küçük olmalıdır. Bu ne kadar verimli bir şekilde yapılabilir? Bunun içinde yapılabilir O ( n log n ) zaman, n = | S | + | T | ?S,Ts,tsStTs,tO(nlogn)n=|S|+|T|

Ben tek bir set tanýrsanýz biliyoruz , o zaman noktaları en yakın çifti bulmak mümkündür s , s 'S içinde Ç ( n log n ) saati kullanarak standart bir böl ve fethet algoritması . Bununla birlikte, bu algoritma iki küme için genelleştirilmiş görünmemektedir, çünkü S veya T içindeki en yakın iki nokta arasındaki mesafe ile bu setler arasındaki en yakın iki nokta arasındaki mesafe arasında bir bağlantı yoktur .Ss,sSO(nlogn)ST

Ben seti depolamak düşünce bir de k her biri için, sonra -d ağacın s adlı S en yakın noktayı bulmak için, en yakındaki sorgu kullanarak, T için s . Ancak, bunun en kötü çalışma süresi O ( n 2 ) süresi kadar kötü olabilir . T noktaları rasgele dağıtılırsa, her sorgu için beklenen çalışma süresinin O ( log n ) olduğunu , bu nedenle beklenen çalışma süresine O ( n log n ) sahip bir algoritma elde edeceğimizi söyleyen sonuçlar vardır.TksSTsO(n2)TO(logn)O(nlogn) Eğer noktaların rastgele dağıtıldığını garanti edersek - ancak herhangi bir nokta koleksiyonu için çalışacak bir algoritma arıyorum (mutlaka rastgele dağıtılmaz).

Motivasyon: Bu diğer soru için etkili bir algoritma yararlı olacaktır .

Yanıtlar:


10

Evet, bu süresi olabilir. T için bir Voronoi diyagramı oluşturun . Daha sonra her s S noktası için Voronoi diyagramının hangi hücresinde bulunduğunu bulun. Bu hücrenin merkezi, s'ye en yakın t T noktasıdır .O(nlogn)TsStTs

zamanında bir Voronoi diyagramı oluşturabilirsiniz ve her sorgu ( s içeren hücreyi bulun ) O ( log n ) zamanında yapılabilir, böylece toplam çalışma süresi O ( n log n ) süresidir.O(nlogn)sO(logn)O(nlogn)


Güzel, ben gelebilir ne çok daha basit :).
aelguindy

Güzel yaklaşım! Bağlantılar yardımcı olabilir, özellikle de şeylerin sorgu tarafı için. Genel nokta konum sorununun zamanında çözülebileceğini gösteren bir Wikipedia sayfası bulabilirim , ancak özel Voronoi hücreleri için güzel bir yol var mı? Aradığım sadece O ( n ) yolunu yapan bu cevabı ortaya çıkardı . O(logn)O(n)
j_random_hacker

Tn=|S|+|T|O(n)

1
nO(n)6n

Bu soru math.stackexchange ile ilgili olarak doğru görünüyor .
Albjenow

5

L1

dO(nlogd1n)

O(nlogn)O(nlog2n)

S,TSδzTδzzδzδz


P2pmPPqmQQ

1
l

Bağlantı koptu :(
Keerthana Gopalakrishnan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.