İ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,ts∈St∈Ts,tO(nlog⁡n)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,s′∈SO(nlog⁡n)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.Tks∈STsO(n2)TO(log⁡n)O(nlog⁡n) 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(nlog⁡n)Ts∈St∈Ts

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(nlog⁡n)sO(log⁡n)O(nlog⁡n)


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(log⁡n)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(nlogd−1⁡n)

O(nlog⁡n)O(nlog2⁡n)

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.