İçinde yatan puan sayısını en üst düzeye çıkaran bir top bulmak için karmaşıklık


10

bir dizi ve bir yarıçap . Hangi daha küçük bir mesafede nokta sayısının daha fazla nokta bulma karmaşıklığı r . Örneğin, \ sum_ {i = 1} ^ n \ mathbb {1} _ {\ | x - x_i \ | \ leq r} ?x1,,xnR2rri=1n1xxir

Bir kaba kuvvet algoritma her noktaya gidip mesafede daha küçük nokta sayısını saymak olacaktır r . Bu \ mathcal {O} (n ^ 2) karmaşıklığına neden olur O(n2).

Daha iyi bir yaklaşım var mı?


Dörtlü ve ikili uzay bölümleme ağaçlarına baktınız mı? Pratikte daha verimli bir algoritma verebileceklerini tahmin ediyorum, ancak en kötü durum asimptotik çalışma süresinin ne olabileceğini bilmiyorum.
DW

( ballBaşlıktan merkezin setten olması gerekir mi?) Bir fikir, yarıçapın en yakın komşuya olan ortalama mesafeye veya çap sırasına göre küçük olup olmadığını tahmin etmek olabilir (ve bu uçlar için yaklaşımları düşünün) (küçük için düzlem taraması ) ve aradaki geniş alan). r
greybeard

Topun merkezi bir olmalıdır, ancak bu durumla daha iyi bir algoritma varsa, ben de ilgileniyorum. xben
Manuel

Top Aralığı Sayma Sorunu için algoritmasından daha hızlı olduğu bilinmemektedir. Ancak, kesin olmayan bir yanıtı kabul edebilseydiniz, diski farklı yöne sahip bir dizi kareyle yaklaşık olarak tahmin edebilirsiniz. Her yön için saatinde (k kare içindeki tüm noktaları saymanıza izin veren bir Aralık Ağacı ( en.wikipedia.org/wiki/Range_tree ) oluşturmanız gerekir. - bir takım sonuç noktaları). O ( l o g 2 ( n ) +O(n)O(log2(n)+k)
HEKTO

@HEKTO Bir noktanın maliyet bir dikdörtgenin içinde olup olmadığını sorgulamak için bir maliyet yapısı oluşturmayı öneriyor musunuz ? Daha sonra, yaklaşık topa kaç puan daha yaklaştığını saymak için tüm puanları gözden geçirin. Bu işe yarayabilir, ancak bu tür veri yapısı için gereken bellek ne olurdu? den daha düşük olur mu? Ö(ngünlük(n))Ö(lÖg2(n)+k)O(n2))
Manuel

Yanıtlar:


5

Top Aralığı Sayma Problemi için şu an için bilinmeyen bir alt doğrusal algoritma gibi görünüyor .

Ancak, kesin olmayan bir yanıtı kabul edebilseydiniz, diski farklı yöne sahip bir dizi kareyle yaklaşık olarak tahmin edebilirsiniz. Her yönlendirme için , zamanında bir kare içindeki tüm noktaları saymanıza izin veren bir Aralık Ağacı oluşturmanız gerekir (k - bir dizi sonuç noktası).Ö(lÖg2(n)+k)

Her aralık ağacı bellek gerektirir, ne kadar iyi bir yaklaşım istiyorsanız o kadar fazla yönelimi kullanmalısınız. Örneğin, iki yön size % 6'dan daha az alan hatası olan bir diske yaklaşan bir sekizgen verecektir .Ö(nlÖg(n))


3

Cevap o kadar basit değil, karmaşıklık teorisinde bu sorunun ileri bir çalışması var; hızlı "küresel aralık sayma" sorgularına odaklanan aşağıdaki sorun olarak incelenmiş gibi görünmektedir. Evet, geliştirilmiş teorik sınırlar mümkündür, ancak bunlar hiç kimse tarafından uygulanmayan soyut algoritmalar gibi görünmektedir. Gerçek uygulamalar istiyorsanız, bu farklı bir soru.

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.