2013-02-23 33 views
7

के बीच कोसाइन समानता की कुशलतापूर्वक गणना कैसे करें मुझे सूची में तारों के बीच कोसाइन समानता की गणना करने की आवश्यकता है। उदाहरण के लिए, मेरे पास 10 मिलियन से अधिक तारों की एक सूची है, प्रत्येक स्ट्रिंग को सूची में स्वयं और हर दूसरे स्ट्रिंग के बीच समानता निर्धारित करना है। इस तरह के कार्य को कुशलतापूर्वक और तेज़ी से करने के लिए मैं सबसे अच्छा एल्गोरिदम क्या उपयोग कर सकता हूं? विभाजन और एल्गोरिदम जीत लागू है?लाखों तारों

संपादित

मैं जो निर्धारित तार एक दिया स्ट्रिंग के लिए सबसे समान हैं और समानता के साथ जुड़े एक उपाय/स्कोर करने में सक्षम होना चाहता हूँ। मुझे लगता है कि मैं जो करना चाहता हूं वह क्लस्टरिंग के साथ आता है जहां क्लस्टर की संख्या शुरू में नहीं जाती है।

+1

आपकी समस्या की परिभाषा के अनुसार, आपके पास कोसाइन समानता गणना के ओ (एन²) निष्पादन की जटिलता होगी। – Xion345

+0

@ Xion345 हां, क्या यह इतना बड़ा डेटा के लिए स्वीकार्य है? मुझे नहीं लगता कि यह – Kennedy

+0

है जिसके लिए आपको गतिशील प्रोग्रामिंग नियोजित करना है। देखें *** [यह] (http://en.wikipedia.org/wiki/Approximate_string_matching) *** लिंक –

उत्तर

0

ट्रांसपोज़ड मैट्रिक्स के साथ काम करें। महोत्सव हाडोप पर इस तरह के कार्य को तेजी से करने के लिए करता है (या सिर्फ महाउट का उपयोग करें)।

अनिवार्य रूप से, कोसाइन समानता की गणना करना मूर्खतापूर्ण तरीका खराब है। क्योंकि आप बहुत सारे 0 * कंप्यूटिंग को समाप्त करते हैं। इसके बजाय, आप कॉलम में बेहतर काम करते हैं, और पर सभी 0s को छोड़ दें।

0

आप SimString को आजमा सकते हैं।

अनुमानित स्ट्रिंग मिलान के लिए यह एक सी ++ लाइब्रेरी (पायथन या रूबी बाइंडिंग के साथ) है।

यह 13 मिलियन तारों के डेटाबेस के लिए 1 मिलीसेकंड के तहत उच्च कोसाइन समानता वाले स्ट्रिंग को खोजने का दावा करता है।

उलटा सूचियों के छंटनी के आधार पर उपयोग किए गए एल्गोरिदम का वर्णन here है।

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

  • कोई संबंधित समस्या नहीं^_^