2010-03-03 21 views
7

Şamandıralı koordinatlarla 2d nokta (x, y) var, onları çizdiğimde, birbirlerine yakın olmaları durumunda puanları gruplandırmalıyım ve gruplandırılmalıdırlar. sabit boyutlu dikdörtgen yardımı. Ve sorun şu ki bu dikdörtgenler kesişmemeli ve tüm nokta-komşuları gruplandırılmalıdır.
Yakında bir kağıt varsa, tüm noktaların bulunduğu 4 * 5 cm gibi büyük bir dikdörtgen çizebilirsiniz. Şimdi rastgele bir şekilde puan verin ve diyelim ki, mesafesi 1 cm olan noktalar varsa, dikdörtgen 2 * 3'te gruplandırılmalıdır.Birbirlerine yakın olduklarında gruplama noktaları

Algoritmanın nasıl yapılacağını ve performans sorununu bulamıyorum ... Yuvalama, kümeleme için aradım ama ihtiyacım olan şey biraz farklı. Ve bu arada, bazı gruplama dikdörtgenlerinin koşullara uyması için ortak alanlardan uzak olması gerekiyorsa, bırakın, sorun değil. Örneğin. Eğer bölgeyi 4 * 5 var ve tüm diğer nokta gruplandırıldı çünkü

(1,0), (2,1), (4,1), (4,3), (2,4) 

sonra rectangles (0,0 - 3,2) & (3,1 - 6,3) and one point left (2,4) isterim neden işaret ve bu nokta artık herhangi komşuları yoktur.
Puanımın koordinatları tamsayı değil, yüzer ve nokta sayısı birkaç yüz (500'e kadar) olabilir. Ve aynı dikdörtgensel alanları kırmak istemiyorum ve sadece kaç noktanın var olduğunu hesaplamak istiyorum, örneğin yukarıdaki gibi (0,0 - 3,2), (3,0 - 6,2) , (0,3 - 3,6), (3,3 - 6,6) ve sadece ilk rect için noktaları 2, 1 (!) Için ikinci olarak özetleyin ne demek olduğu gibi bırakın, 1 için üçüncü ve 1 için 4 => bir rect çekilecek ve diğer tüm noktalar => göreve göre yanlış sonuç. Herhangi bir fikrin var mı? En azından hangi algoritmalar yardımcı olabilir, nerede arayabiliriz ...

P.S. Şu an için sonuç olarak grup/puan sayısı önemli değil, e.i. Örneğin yukarıdaki gibi bir başka sonuç, (1,0-4,2) ve (2,2-5,4) dikdörtgenler olabilir ve

+0

Bu yüzden kullanmanıza izin verilen dikdörtgenin boyutları sabit ve ekseni hizalanmış mı? Ve sanırım dışarıda kalan puan sayısını en aza indirmek istersiniz… doğru mu? – Jacob

+0

evet, boyutlar sabittir (x * y), onları döndüremiyorum (x * y, x * y anlamına gelir ve ben onları x * y) ve eksenleri hizalanır. Minimizasyon hakkında, şimdilik hayır. sonuç sadece verilen mesafeden daha yakın bir noktaya sahip olan noktaları içermemelidir ve hepsi – Maxym

+0

Dikdörtgen ve doğru olmak zorunda mı? K gibi bir şeyi kullanabilirsiniz: http://jsfiddle.net/8NpNp/2/ – david

cevap

1

hiçbir nokta bırakılamaz. Genel sorun "nearest neighbor" araştırmasıdır. Çözümler hesaplama açısından zor (zaman karmaşıklığı). İnsanlar için oldukça kolay olan bir iş, hesaplama açısından o kadar kolay değildir.

+0

Şimdilik kapama noktaları ile dikdörtgenler arasında daha fazla sorunum var :) diyebilirim ki, gruplanması gereken tüm noktalar kümesini, dikdörtgenlerin her birinin dikdörtgenin birbiriyle kesişme şeklini "nasıl" koyduğunu biliyorum. .. – Maxym

+1

Uzay bölümleme algoritmaları hakkındaki bilgimin sınırlarını zorluyorum, fakat kd-ağaçlarının O (n^2) örtüşmeleri aramayı kolaylaştırmak için tasarlandıkları anlaşılıyor. Aslında, orijinal noktaları ayarlamak için kd ağaçlarını kullanırsanız, örtüşmeyen dikdörtgenler sonucun değişmez bir özelliği olacaktır. http://en.wikipedia.org/wiki/Kd_tree – msw

+0

belki, belki ... ama korkarım ki, örnek wiki'den daha fazla veriye sahip olduğumuzda ve örtmek için kullandığım dikdörtgen boyutunu dikkate alarak Onları işe yaramaz. Daha fazla düşünmeliyim. Evet, ayrışma üstüste binmeyi önemser, ama genel olarak ayrışma dikdörtgenlerin büyüklüğünü umursamaz - bu yüzden emin değilim. Ama düşünmeye değer. işaret ettiğin için teşekkürler – Maxym