2010-03-03 6 views
7

मेरे पास फ्लोट निर्देशांक के साथ 2 डी-पॉइंट (x, y) है, जब मैं उन्हें खींचता हूं, तो मुझे एक दूसरे के करीब होने पर समूह को समूह करने की आवश्यकता होती है, और उन्हें iwith समूहीकृत किया जाना चाहिए निश्चित आकार के साथ आयताकार की मदद। और समस्या यह है कि इन आयतों को अंतर नहीं करना चाहिए, और सभी बिंदु-पड़ोसियों को समूहीकृत किया जाना चाहिए।
यदि आपके पास पास एक पेपर है, तो आप एक बड़ा आयत खींच सकते हैं, उदाहरण के लिए 4 * 5 सेमी - क्षेत्र जहां सभी बिंदु स्थित हैं। अब यादृच्छिक रूप से अंक डालें, और मान लें, यदि ऐसे बिंदु हैं जिनकी दूरी 1 सेमी है - उन्हें आयताकार 2 * 3 में समूहीकृत किया जाना चाहिए।समूहांकन बिंदु एक दूसरे के करीब होने पर

मुझे एल्गोरिदम नहीं मिल रहा है कि इसे कैसे बनाया जाए, और प्रदर्शन भी मायने रखता है ... मैंने घोंसले, क्लस्टरिंग की तलाश की लेकिन मुझे जो चाहिए वह थोड़ा अलग है। और वैसे, अगर कुछ समूह आयताकारों को परिस्थितियों के अनुरूप सामान्य क्षेत्र से बाहर होना है, तो यह होना चाहिए, यह कोई समस्या नहीं है। जैसे आप इस क्षेत्र 4 * 5 है, और कहते हैं

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

तो परिणाम rectangles (0,0 - 3,2) & (3,1 - 6,3) and one point left (2,4) चाहते चाहिए, क्योंकि अन्य सभी बिंदु बांटा गया और इस बात के लिए किसी भी पड़ोसियों अब जरूरत नहीं है।
मेरे अंक 'निर्देशांक पूर्णांक नहीं हैं लेकिन फ्लोट हैं, और अंक की गणना कुछ सौ (500 तक) हो सकती है। और मैं एक ही आयत पर क्षेत्र को तोड़ना नहीं चाहता हूं और बस गणना करें कि कितने बिंदु हैं, मेरा मतलब है ऊपर उदाहरण के लिए मैं प्रतिक्रियाएं (0,0 - 3,2), (3,0 - 6,2) कर सकता हूं , (0,3 - 3,6), (3,3 - 6,6) और केवल पहले रेक्ट के लिए अंक 2 को सारांशित करें, 1 (!) दूसरे के लिए इसका मतलब है कि इसे छोड़ दें, 1 के लिए 1 और चौथाई के लिए 1 => कार्य के अनुसार एक आयत तैयार की जाएगी और अन्य सभी बिंदु => गलत परिणाम होगा। कोई विचार? कम से कम कौन से एल्गोरिदम सहायक हो सकते हैं, जहां देखने के लिए ...

पीएस अब परिणामस्वरूप समूह/अंक की संख्या कोई फर्क नहीं पड़ता, ई.आई. ऊपर उदाहरण के लिए एक और अनुमत परिणाम (1,0-4,2) और (2,2-5,4) आयताकार हो सकता है, और कोई अंक

+0

तो आयत के आयामों का उपयोग करने की अनुमति है और यह धुरी-गठबंधन है? और मुझे लगता है कि आप छोड़े गए अंकों की संख्या को कम करना चाहते हैं .. सही? – Jacob

+0

हां, आयाम ठीक हैं (x * y), मैं उन्हें घुमा नहीं सकता (x * y का मतलब x * y है और मैं उन्हें y * x स्विच नहीं करता), और वे अक्ष गठबंधन करते हैं। कम से कम के बारे में, अभी के लिए नहीं। नतीजे में केवल अंक नहीं होना चाहिए, जिसमें दूरी से दूरी के करीब एक और बिंदु है, और यह सब – Maxym

+0

है क्या इसे आयताकार और सटीक होना चाहिए? आप कुछ का उपयोग कर सकते हैं जैसे कि क्लस्टरिंग: http://jsfiddle.net/8NpNp/2/ – david

उत्तर

1

सामान्य समस्या "nearest neighbor" खोज है। समाधान कम्प्यूटेशनल रूप से कठिन (समय जटिलता) हैं। जो मनुष्यों के लिए एक बहुत ही आसान काम है, वह कम्प्यूटेशनल रूप से इतना आसान नहीं है।

+0

अब के लिए मुझे आयताकार बिंदुओं के साथ और अधिक समस्याएं हैं :) मान लीजिए कि मुझे उन सभी बिंदुओं के बारे में पता है जिन्हें समूहित किया जाना है, उन पर आयत कैसे डालें, जिस तरह से सभी आयत परिणामस्वरूप एक-दूसरे को अलग नहीं करते हैं। .. – Maxym

+1

मैं अंतरिक्ष विभाजन एल्गोरिदम के अपने ज्ञान की सीमाओं को दबा रहा हूं, लेकिन ऐसा प्रतीत होता है कि केडी-पेड़ ओवरलैप की खोज के ओ (एन^2) दर्द को कम करने के लिए डिज़ाइन किए गए हैं। दरअसल, यदि आप अंक के मूल सेट को विभाजित करने के लिए केडी-पेड़ का उपयोग करते हैं, तो गैर-ओवरलैपिंग आयत परिणाम की एक परिवर्तनीय संपत्ति होगी। http://en.wikipedia.org/wiki/Kd_tree – msw

+0

शायद, शायद ... लेकिन मुझे डर है कि जब हमारे पास विकी से उदाहरण के मुकाबले अधिक डेटा है, और आयत के आकार के आकार को ध्यान में रखते हुए जिसे मैं कवर करने के लिए उपयोग करता हूं उन्हें, तो यह काम नहीं करेगा। मुझे इसके बारे में और सोचना है। हां, अपघटन पर ओवरलैपिंग की परवाह है, लेकिन सामान्य अपघटन में आयताकारों के आकार की परवाह नहीं है - यही कारण है कि मुझे यकीन नहीं है। लेकिन इसके बारे में सोचना लायक है। पॉइंटिंग के लिए धन्यवाद – Maxym

संबंधित मुद्दे