Bir dizi noktadan en dağınık noktaları seçme


15

Bir dizi N noktasından ( ) noktalarının alt kümesini ( en büyük alanı ( boyutundaki tüm olası alt kümelerde ) "kaplayacak şekilde" seçmek için herhangi bir (verimli) algoritma var mı ?MNM<NM

Puanların 2D düzlemde olduğunu varsayıyorum.

Saf algoritma basittir, ancak zaman karmaşıklığı açısından engelleyicidir:

for each subset of N points
    sum distance between each pair of points in the subset
    remember subset with the maximum sum

Daha verimli ve hatta yaklaşık bir yöntem arıyorum.

Örnek, işte içinde rastgele noktalar olan bir uçak:

resim açıklamasını buraya girin

For , hiç böyle bir seçme noktaları bekliyoruz:M=5

resim açıklamasını buraya girin

Seçilen noktaların (kırmızı) düzlemin her tarafına dağıldığını unutmayın.

Bu sorunla ilgili " GÖRSEL İZLEME İÇİN KESİNLİKLE DAĞITILMIŞ ANAHTAR KELİMELERİ SEÇMEK " başlıklı bir makale buldum . Ancak, bu noktaların ağırlıklı olduğunu varsayar.



Ne yazık ki, genellikle 1500-5000 civarında ve M 10-50 civarındadır. NM
Libor

Are ve K , sabit, her ikisi de ya da farklı olan M (en üst düzeye istediğiniz için, örneğin, aynı zamanda , ortalama mesafelerin ve bu durumda artan M ayrıca bir azalma elde edilebilir)? MNMM
Wolfgang Bangerth

1
Bunun NP zor olduğundan şüpheleniyorum. İki köşe arasındaki kenarın ağırlığının aralarındaki Öklid mesafesi olduğu maksimum ağırlıktaki bir klik problemine çok benzemektedir. (Max-clique için bilinen pratik olarak etkili sezgisel
tarama

1
@hardmath Üzgünüm, bu bir yazım hatasıydı. Neyi başarmam gerektiğini göstermeye çalıştım. Sorun, sadece avuç nokta özellikleri almam gereken görüntü dönüşümünden geliyor, ancak dönüşüm tahmini için kullanıldıkları ve uzamsal olarak dağıldıklarında, tahmin daha kararlı. Belki "entropi" daha iyi bir önlemdir - noktalarını seçmek istiyorum , böylece her yerde, maksimum entropi durumunda bir gaz gibi. Öte yandan, seçilen noktaların kümelenmesini önlemeye çalışıyorum. M
Libor

Yanıtlar:


11

İşte yaklaşık bir çözüm. Bu yana , N çok büyük olduğu ve M çok küçük ne aşağıdakilerden hakkında:

  1. N'nin dışbükey gövdesini hesaplayın
  2. Maksimum mesafe kriterlerinizi karşılayan gövdeden en fazla M noktası seçin .
  3. 2. Adım sizi M noktasından daha az nokta bırakırsa , iç kısımdan önceden seçilen noktalara olan mesafesini en üst düzeye çıkaran 1 nokta seçin.
  4. Seçilen nokta sayısı M olana kadar 3. Adımı tekrarlayın

Bunun arkasındaki sezgi, N >> M olduğundan ve birbirlerinden olabildiğince uzakta noktalar istediğinizden, muhtemelen verilerin kenarlarına yakın olacaklardır, bu nedenle gövdeyle başlayıp tekrar tekrar oradan içeri gir.

Ayrıca, gövdeden başlayarak ilk aramanızı N'den N 1/2'ye düşürürsünüz .


GÜNCELLEME

Yukarıdaki 3. ve 4. adımlar çok uzun sürüyorsa (veri kümenizin içini tekrarlı olarak test ettiğiniz için) sorununuzu hızlandırmak için bana iki fikir daha geldi.

  1. Rastgele Arama : 2. Adımda gövdede P noktaları bulduğunuzu varsayalım. Ardından M - P noktalarını içten rastgele çizin . X denemelerinden sonra en iyi seti seçin.
  2. Simüle Tavlama : Veri kümenizi kapsayan en küçük sınırlama kutusunu hesaplayın (eksenlerle hizalanması gerekmez, eğilebilir). Ardından , sınırlayıcı kutuda bir dizi M eşit olarak dağıtılmış ızgara noktaları tanımlayın . Bu noktaların veri kümesi noktalarınızın hiçbiriyle çakışması gerekmez. Sonra her ızgara noktası için veri kümenizdeki en yakın k komşularını bulun. Her M x k kombinasyonundan geçin ve maksimum mesafe kriterlerinizi karşılayanı seçin. Başka bir deyişle, iyi bir başlangıç ​​çözümü bulmak için başlangıç ​​ızgarasını önyükleme olarak kullanıyorsunuz .

Teşekkürler. Belki de soruyu yanlış formüle etti. Ben çoğu alanı "kapsayacak" şekilde noktalar kümesi için hedefliyorum. Sadece mesafe ölçütlerinin yeterli olduğunu düşündüm ama daha fazla bir şey eklenmesi gerekiyor gibi görünüyor.
Libor

M

1
Belki de probleminizi belirtmenin daha resmi bir yolu, N'yi kapsayan ve ortalama mozaikleme faset alanını en aza indiren M boyutunda bir mozaikleme istemenizdir ? Faset alanları en aza indirmek, etraftaki noktaları yaymanın ve bir araya gelmemelerini sağlamanın bir yolu gibi görünüyor.
dpmcmlxxvi

Evet. Kılavuzları kullanmaktan kaçınmak istedim çünkü noktalar yanlışlıkla ızgara çizgileri etrafında kümelenebiliyorsa ve seçimde kümelenecekler.
Libor

Bahsettiğiniz açgözlü algoritmanızla ilgili tek sorun, ilk tohum noktasına çok duyarlı olacağıdır. Tohum yetiştirme algoritmaları (içeriden dışarıya başladığınız yerde) bu problemi yaşarlar. Bahsettiğim gövde yaklaşımı dışardan çalıştığı için muhtemelen daha kararlı olacaktır.
dpmcmlxxvi


1

Tamam, öyleyse Öklid düzlemindeki belirli bir N nokta kümesinden M noktaları seçmek istiyorsunuz, böylece seçilen noktaların çift mesafelerinin toplamı maksimum, doğru mu?

Standart yerel arama algoritması oldukça hızlıdır ve oldukça iyi bir yaklaşım sunar. Çalışma zamanı N'de lineer ve M'de kuadratiktir. Yaklaşık oranı 1 - 4 / M'dir. Bu, M arttıkça oranın daha iyi olacağı anlamına gelir. Örneğin, M = 10 için en uygun değeri% 60, M = 50 için en uygun değeri% 92 alır.

Algoritma ayrıca genel boyuttaki Öklid uzayları için de çalışır. Bu durumda, problem NP-zordur. Ancak uçakta, NP-sert olup olmadığı bilinmemektedir.

Kaynak bu çalışmadır . Bu yardımcı olur umarım! En iyi, Alfonso



1
Bunu, "Görsel İzleme için uzamsal olarak dağıtılmış anahtar noktalarını etkin bir şekilde seçme" 2011 18. IEEE Uluslararası Görüntü İşleme Konferansı'nı kullanarak "Disk Kapatma ile Baskılama" algoritmasını kullanarak çözdüm. IEEE, 2011
Libor

1
Alfonso, lütfen önerilen makale için ilişkinizi açıkça belirtin.
nicoguaro

0

Bir çözüm:

  • O(n)

  • Bu sınırlayıcı dikdörtgenin içinde M yapay bile dağıtılmış noktaları olun , bazı M diğerlerinden daha zordur. Sizin durumunuzda, dikdörtgenin köşelerinde dört, merkezde bir tane

  • O(n(log(n)))

  • O(m(log(n)))

O(n(log(n)))MN

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.