A'daki bir nokta ile B'deki bir nokta arasındaki en kısa mesafe


9

Her biri düzlemde ayrık nokta içeren iki ve kümesi verildiğinde , bir nokta ile bir nokta arasındaki en kısa mesafeyi hesaplayın , yani .ABnABmin { dist(p,q) | pAqB }

Haklı olup olmadığımdan emin değilim, ancak bu problem hesaplama geometrisinde doğrusal programlama ile çözülebilecek sorunlara çok benziyor. Bununla birlikte, LP'ye indirgeme kolay değildir. Benim sorunum 2 nokta uzayda O (n) LP tarafından açıkça çözülebilir iki nokta kümesi arasındaki en ince stip bulmak ile ilgili görünüyor O(n).


4
Burada soru nedir?
Raphael


Uzman değilim ama genellikle bu noktaların veri olduğu makine öğreniminde, kümeler çoğu zaman iyi davranıyor ve birlikte gruplanıyor, bu yüzden @Pedro tarafından önerilen algoritma gibi iyi çalışıyor.
chazisop

3
"Açıkçası O (n) LP tarafından 2 boyutlu uzayda çözülebilir" - Bu ifade neyin yol açtığını merak ediyorum. "Doğrusal programlama" genel olarak doğrusal zamanda çözülemez; "doğrusal" başka bir şeyi ifade eder. LP'nin özel bir formu var mı?
Raphael

Yanıtlar:


5

Biraz kıvrık görünebilir, ancak naif kaba kuvvet arama daha verimli olmalıdır bir çözüm var :O(n2)

  1. , ve kütle merkezleri arasındaki eksen olsun .vAB
  2. Sıralama noktaları ve azalan ve sıralara yol açan, sırasıyla, artan düzende bu eksen boyunca , , ..., ve , , ..., .ABa0a1anb0b1bn

Gerisi daha açık hale getirmek için sözde koddadır:

d = infinity.
for j from 1 to n
    if (b_1 - a_j) along v > d then break endif
    for k from 1 to n
        if (b_k - a_j) along v > d then
            break
        else
            d = min( d , ||b_k - a_j|| )
        endif
    enddo
enddo

Yani tarafından, ilerlediğini noktaları öncesi-sıralama , sen içinde asla çiftleri filtreleyebilirsiniz beri birbirinden boyunca hep olacak.vdbkajvbkaj

Kötü durumda bu hala eğer, ancak ve de ayrılır, çok daha hızlı daha değil daha iyi olmalıdır , gerekli olan sıralama için.O(n2)ABO(nlogn)

Güncelleme

Bu çözüm hiçbir şekilde şapkadan çıkarılmaz. Uzamsal binning ile etkileşen tüm parçacık çiftlerini bulmak için parçacık simülasyonlarında kullandığım özel bir durum. Daha genel sorunu açıklayan kendi çalışmam burada .

Değiştirilmiş bir hat süpürme algoritması kullanma önerisine gelince, sezgisel olarak basit olsa da, ayrık kümeler dikkate alındığında bunun olduğuna ikna olmadım . Aynı şey Rabin'in rastgele algoritması için de geçerli.O(nlogn)

Orada ayrık setlerde yakın çifti sorunla ilgilenen çok literatür olmak görünmüyor, ama buldum bu altında olmanın iddiası yok ki, ve bu , görünmüyor hangi herhangi bir şey hakkında iddiada bulunmak.O(n2)

Yukarıdaki algoritma, ilk makalede (Shan, Zhang ve Salzberg) önerilen düzlem taramasının bir varyantı olarak görülebilir, ancak ekseni kullanmak ve sıralama yapmak yerine, kümeler arasındaki eksen kullanılır ve kümeler çaprazlanır azalan / artan sırada.x


2
@Pedro: Üzgünüm, daha önce yorum yapmadım (o zaman yok). Cevabınızı reddetmemizin nedeni, bunun kötü bir yanıt olması ve en üstte olmaması gerektiğiydi. Bu aslında en kötü durum O (n log n) ile hesaplama geometrisinde iyi bilinen bir sorundur. İyi bir cevap, bilinen problemi (belki bir referansla) ve aşağıdakileri içeren ortak çözümleri işaret ederdi: kd ağaçlarını kullanma ve element test etme, tarama algoritmaları, vb. Genel fikir, düzenli bir yapıda önişleme yapmak ve bunu kullanmak olmalıdır. . 1D durumuna bakın - orada daha belirgin O (n log n).
ex0du5

2
@ ex0du5: Bu, kendi cevabınızı göndermeniz gerektiği gibi geliyor! "Daha iyi bir cevap var" genellikle aşağı oy için iyi bir neden değildir; bu önlem yanlış, spam ve çok kötü biçimlendirilmiş yanıtlar için ayrılmalıdır. Pedro'nun ikisi de değil. Ayrıca, bazı insanların bir aşağı oylamadan önce ne kadar düşünülmesi gerektiğini düşündüğü hakkında bir izlenim için buraya bakın .
Raphael

1
@Raphael: Cevap vermedim çünkü adil bir cevap vardı ve referansları arayacak zamanım yoktu. Nasıl düşürüleceğine dair referansınıza gelince, bu siteler için korkunç bir algoritma! CS öğrencileri özellikle biçimcilik hedefini kaybetmemenin önemini anlamalıdır. Oylamanın amacı, cevapları aynı sorunun daha sonraki öğrencilerine en faydalı cevaplara yönlendirecek bir sıralamaya taşımaktır. Oylama algoritmam bunu yapıyor. Bu algo: açıkçası hayır. İsterseniz bu bir meta üzerinde tartışılabilir, ancak yetişkinler olarak, güçlerimizi iyilik için kullanmalıyız bence.
ex0du5

1
@ ex0du5: Artık ellerinde biraz zaman var gibi görünüyor. Bu örneğin aslında "en kötü durum ile iyi bilinen bir sorun" olduğunu gösterebilir misiniz ? O(nlogn)
Pedro

1
@ ex0du5: Aslında, en yakın komşu araması, örneğin kd ağaçları kullanarak , sadece ortalama karmaşıklığı O (logn) vardır . Yani kareye geri döndük.
Pedro

4

Sen "En yakın çifti" uyarlayabilirsiniz linesweep algoritması olan .O(nlogn)

Yapmanız gereken tek değişiklik, aynı sete ait olan çiftleri göz ardı etmektir.

Düzenleme: Bu aslında tarif ettiğim gibi basit (hatta mümkün) değildir. Tartışma için yorumlara bakın.


2
Sadece bir açıklama, klasik bölme ve fethetme algoritmasını da içinde çalışan en yakın çiftler için uyarlayabilir ; ayrıca bkz . Wikipedia . O(nlogn)
rizwanhudda

1
Rasgele doğrusal bir algoritma için bkz. Örneğin Rabin Lipton'un blogunda bozuk para çevirir .
Juho

3
Ayrık kümeler için bunu nasıl uygulayacağınız konusunda biraz daha açık olabilir misiniz, özellikle de bağlı ilgili olarak ? O(nlogn)
Pedro

-1 yanlışlık için. Bağladığınız en yakın çift satır tarama algoritması, öğeleri içeren sıralı kümeye dayanır , ancak ayrık kümeler söz konusu olduğunda, bu küme öğelerini içermeye başlar , bu nedenle artık , en kötü durumda değil. O(1)nO(nlogn)
Pedro

1
@Pedro: Neden daha büyük olsun ki? Eğer bir şey varsa, mevcut aday puan kümesi küçülmelidir.
Raphael

4

Bunun gibi problemler fikri, En Yakın Komşunun verimli sorgulamalarını sağlayan setlerden birinden düzenli bir yapı oluşturmaktır. Rasgele boyut için bir O (log n) sorgu yapısı sunan klasik makale:

Voronoi çözümlerinde Shamos ve Hoey

O zamandan beri Delauney tesselasyonlarından gelen fikirlere dayanan bir dizi başka uzay bölümü yaratıldı ve bunlar da çeşitli alt uzay süpürme açıklamalarına dönüştü. Voronoi yönteminin, inşaat adımını O (n log n) yapan düzlem bölümlemesi nedeniyle genel bir bölme ve fethetme açıklaması altına gireceğini unutmayın.

Yani, bu sorunun temel çözümü:

  1. A kümesini alın ve seçtiğiniz verimli En Yakın Komşu sorgu yapısını oluşturun. Bu yapım adımı O (n log n) 'dir [bakınız teorem 4].
  2. B'deki her eleman için, en yakın komşu için A yapısını sorgulayın. Her sorgu O (log n) 'dir [bkz. Teorem 15, sabit boyut], bu nedenle B'deki tüm noktalar için toplam sorgu süresi O (n log n)' dir.
  3. Her B'ye en yakın A noktasının sonucu alındığında, mesafeye göre sıralanmış bir yapıya koyun. Bu, her sonucu O (log n) veya herkes için O (n log n) ekler.
  4. Tüm B'ye bakıldığında, sipariş edilen yapıdaki B noktasını A'daki bir noktaya en küçük komşu mesafeyle hızlı bir şekilde (O (1)) alabilirsiniz.

Her adımın karmaşıklığına bakıldığında görüldüğü gibi, toplam karmaşıklık O (n log n) 'dir. Klasik okuyuculara bakmayan modern okuyucu için bu, birçok algoritma kitabında, örneğin Skiena'nın “Algoritma Tasarım Kılavuzu” nda ele alınmıştır.


1
"Örneğin, Artium'un çözümü bu formda yazılabilir ve tamamen geçerlidir." - Peki, burada önerdiğin şey artık (saf) bir süpürme çizgisi algoritması değil, bu yüzden bunu bilmiyorum.
Raphael

@ Raphael: Elbette öyle. Tarama çizgisi algoritmaları noktaları burada açıklandığı gibi sıralı bir yapıya önceden işler. Hatta, süpürme çizgisi algoritmasının Voronoi algoritmasının sadece bir örneği olduğunu gösteren cevabı altında Fortune Algoritması ile bağlantı kurdum. Çözümü sorgu yapısına genel tutmamın nedeni, bunun için geliştirilmiş çok sayıda geometrik mekanizmanın olmasıdır.
ex0du5

üzerinde yineleme yaparken belirli bir sıraya ihtiyacınız yoktur , oysa sıra (birçok / hepsi?) Tarama çizgisi algoritmaları için gereklidir (bu yüzden isim, sanırım). B
Raphael

1

Haklı olup olmadığımdan emin değilim, ancak bu problem hesaplama geometrisinde doğrusal programlama ile çözülebilecek sorunlara çok benziyor. Bununla birlikte, LP'ye indirgeme kolay değildir. Ayrıca benim sorunum LP tarafından 2 boyutlu uzayda çözülebilen iki nokta kümesi arasındaki en ince stip'i bulmakla ilgili görünüyor.

Bu problemin alt sınırı cebirsel karar ağacı modeli altında . Burada ispatının kabaca bir taslağını vereceğim.O(nlogn)

Eleman belirsizlik sorunu E'nin örneğini C'ye indireceğiz.

  • E'ye giriş: S={a1,a2,a3,...,an}
  • Let > 0 aa küçük kesirliϵ
  • A = ,{(ai,0):1in}B={(ai+ϵ):1in}
  • Şimdi A ve B kümeleri arasındaki en kısa mesafeyi (d) bulabilirsek, ek süresinde eleman farklılığı problemine aşağıdaki şekilde karar verebiliriz.O(n)
    • setinin sadece ve sadece d =Sϵ

Öğe ayırt etme problemine karar vermek için çalışma zamanında alt sınırın olduğunu biliyoruz . Bu nedenle, alt sınır azaltılarak sorunumuz için de geçerlidir.O(nlogn)

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.