2017-03-19 12 views
6

मेरे पास MxN सरणी है, जहां M अवलोकनों की संख्या है और N प्रत्येक वेक्टर की आयामता है। वैक्टरों की इस सरणी से, मुझे mean और minimum वैक्टरों के बीच यूक्लिडियन दूरी की गणना करने की आवश्यकता है।यूक्लिडियन दूरी की कुशल गणना

मेरे मन में, यह एम सी दूरी है, जो एक O (n मिनट (k, एन-ट)) एल्गोरिथ्म है की गणना करने के लिए मुझे आवश्यकता है। मेरा M ~ 10,000 है और मेरा N ~ 1,000 है, और यह गणना ~ 45 सेकंड लेती है।

mean और min दूरी की गणना करने के लिए कोई और अधिक प्रभावी तरीका है? शायद एक संभाव्य विधि? मुझे सटीक होने की आवश्यकता नहीं है, बस बंद करें।

+1

http://stackoverflow.com/questions/12108181/calculate-the-maximum-distance-betsween-vectors-in-an-array –

+1

क्या आप अपना वर्तमान कोड पोस्ट कर सकते हैं?मेरे सिर में, मैं केवल ओ (एम^2 * एन) देख रहा हूं, शायद मैं कुछ गलत समझ रहा हूं। – pgreen2

+0

दिलचस्प सवाल। हालांकि, मुझे यकीन नहीं है कि आपको कहां से C_2 और के चर मिल गए हैं। जैसा कि pgreen2 ने उल्लेख किया है, मैं एक ओ (एन * एम^2) एल्गोरिदम को सबसे सीधे आगे दृष्टिकोण के रूप में देखता हूं। –

उत्तर

0

आपने यह नहीं बताया कि आपके वैक्टर कहां से आते हैं, न ही आप mean और median पर क्या उपयोग करेंगे। सामान्य मामले के बारे में कुछ अवलोकन यहां दिए गए हैं। सीमित श्रेणियां, त्रुटि सहनशीलता, और अलग-अलग मान अधिक कुशल दृष्टिकोण स्वीकार कर सकते हैं।

एम अंक के बीच mean दूरी क्वाड्रैटिक, ओ (एम^2) लगता है। लेकिन एम/एन 10 है, काफी छोटा है, और एन बहुत बड़ा है, इसलिए डेटा शायद 1e3-space में एक बालों वाले क्षेत्र जैसा दिखता है। एम बिंदुओं का कंप्यूटिंग सेंट्रॉइड, और उसके बाद एम दूरी को सेंट्रॉइड पर कंप्यूटिंग करना, आपके समस्या डोमेन में उपयोगी हो सकता है, बताना मुश्किल है।

एम अंक के बीच minimum दूरी अधिक दिलचस्प है। यादृच्छिक रूप से जोड़े की एक छोटी संख्या चुनें, 100 कहें, उनकी दूरी की गणना करें, और न्यूनतम न्यूनतम दूरी के अनुमान के रूप में न्यूनतम आधा लें। (वांछित होने पर, अगले कुछ छोटी दूरीों की तुलना करके मान्य करें।) अब प्रत्येक बिंदु को सकारात्मक पूर्णांक के रूप में मॉडल करने के लिए स्थानिक UB-tree का उपयोग करें। इसमें एम एक्स एन मानों के लिए एन मिनीमा शामिल है, स्थिरांक जोड़ना इतना छोटा हो जाता है, अनुमानित वैश्विक न्यूनतम दूरी स्केलिंग कम से कम 1.0 से मेल खाती है, और उसके बाद पूर्णांक को छोटा कर देती है।

हाथ में इन परिवर्तनीय वैक्टरों के साथ, हम उन्हें एक यूबी-पेड़ प्रतिनिधित्व में बदलने के लिए तैयार हैं जिसे हम क्रमबद्ध कर सकते हैं, और फिर क्रमबद्ध मूल्यों पर निकटतम पड़ोसी स्थानिक प्रश्नों को कर सकते हैं। प्रत्येक बिंदु के लिए एक पूर्णांक गणना। परिणाम में प्रत्येक आयाम के मान के निम्न-क्रम बिट को शिफ्ट करें, फिर पुनरावृत्त करें। सभी आयामों पर पुनरावृत्ति जारी रखें जब तक कि शून्य-शून्य बिट्स का उपभोग नहीं किया जाता है और परिणामस्वरूप दिखाई देता है, और अगले बिंदु पर आगे बढ़ता है। संख्यात्मक रूप से पूर्णांक परिणाम मानों को क्रमबद्ध करें, एक पोस्टजीआईएस इंडेक्स के समान डेटा संरचना प्रदान करना।

अब आपके पास एक विघटित प्रतिनिधित्व है जो निकटतम पड़ोसियों के लिए उचित कुशल प्रश्नों का समर्थन करता है (हालांकि स्वीकार्य रूप से एन = 1e3 असुविधाजनक रूप से बड़ा है)। दो या दो से अधिक मोटे अनाज वाले पड़ोसियों को ढूंढने के बाद, आप बेहतर भेदभाव के लिए, उनके बीच उच्च-रिज़ॉल्यूशन दूरी प्राप्त करने के लिए मूल वेक्टर प्रतिनिधित्व से पूछ सकते हैं। यदि आपका डेटा वितरण बिंदुओं का एक बड़ा अंश है जो निकटतम पड़ोसी से एकल बिट से अलग होने के लिए विघटित हो जाता है, उदाहरण के लिए ऑक्सीजन परमाणुओं का स्थान जहां प्रत्येक के पास एक दोस्त है, फिर वैश्विक न्यूनतम दूरी अनुमान बढ़ाएं ताकि निम्न आदेश बिट्स पर्याप्त भेदभाव प्रदान कर सकें।

एक समान विघटनकारी दृष्टिकोण उचित रूप से स्केलिंग करेगा उदा। 2-आयामी इनपुट और प्रारंभिक खाली ग्रिड को चिह्नित करना, फिर तत्काल पड़ोस स्कैन करना। उचित स्केलिंग के कारण यह वैश्विक "मिनी" पड़ोस के भीतर वैश्विक मिनट पर निर्भर करता है। आपके मामले में आप एक एन-आयामी ग्रिड को चिह्नित करेंगे।

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