सवाल:
क्या कोड उत्पन्न करने के लिए कोई स्थापित प्रक्रिया या सिद्धांत है जो कुशलता से मैट्रिक्स-वेक्टर गुणा को लागू करता है, जब मैट्रिक्स घने और केवल शून्य और लोगों से भरा होता है? आदर्श रूप से, अनुकूलित कोड डुप्लिकेट किए गए काम को कम करने के लिए पहले से गणना की गई जानकारी का व्यवस्थित उपयोग करेगा।
दूसरे शब्दों में, मैं एक मैट्रिक्स है और मैं कुछ पर आधारित precomputation क्या करना चाहते , कि कंप्यूटिंग कर देगा संभव के रूप में कुशल के रूप में जब मैं बाद में वेक्टर प्राप्त ।
एक आयताकार घने बाइनरी मैट्रिक्स है जिसे "संकलन समय" में जाना जाता है, जबकि एक अज्ञात वास्तविक वेक्टर है जो केवल "रन टाइम" में जाना जाता है।
उदाहरण 1: (खिड़की खिसकना)
अपनी बात को स्पष्ट करने के लिए एक आसान छोटे उदाहरण का उपयोग करता हूं। मैट्रिक्स पर विचार करें,
एक मानक मैट्रिक्स-वेक्टर गुणा करना इस तरह से गणना करेगा। हालांकि, इस काम का एक बहुत कुछ बेमानी है। हम "रनिंग टोटल" का ट्रैक रखते हुए कम लागत पर समान मैट्रिक्स की गणना कर सकते हैं, और अगला नंबर प्राप्त करने के लिए जोड़ / घटाना:
उदाहरण 2: (पदानुक्रमित संरचना)
पिछले उदाहरण में, हम केवल एक चालू कुल का ट्रैक रख सकते हैं। हालांकि, आमतौर पर किसी को मध्यवर्ती परिणामों के पेड़ को बनाने और संग्रहीत करने की आवश्यकता होगी। उदाहरण के लिए, कोई व्यक्तिw=Mv कोकुशलतापूर्वक मध्यवर्ती परिणामों के पेड़ का उपयोग करकेगणना कर सकता है:
- और डब्ल्यू 7 की गणना करें , और उन्हें डब्ल्यू 3 पाने के लिए जोड़ें ।
- और डब्ल्यू 6 की गणना करें , और उन्हें डब्ल्यू 2 पाने के लिए जोड़ें ।
- डब्ल्यू 1 पाने के लिए और डब्ल्यू 3 जोड़ें
ऊपर के उदाहरणों में संरचना को देखना आसान है, लेकिन जिन वास्तविक मैट्रिसेस में मेरी दिलचस्पी है, उनके लिए संरचना इतनी सरल नहीं है।
उदाहरण 3: (निम्न रैंक)
कुछ भ्रम को दूर करने के लिए, मैट्रिसेस आम तौर पर विरल नहीं होते हैं। विशेष रूप से, इस समस्या को हल करने के लिए एक विधि को मैट्रिसेस लागू करने के लिए कुशल तरीकों को खोजने में सक्षम होने की आवश्यकता होती है जहां बड़े ब्लॉक लोगों से भरे होते हैं। उदाहरण के लिए, विचार करें
इस मैट्रिक्स को दो रैंक -1 मेट्रिस, एम = [ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ] - के अंतर के रूप में विघटित किया जा सकता है। [
तो एक वेक्टर पर इसकी क्रिया : = M v को कुशलतापूर्वक 1 , w से गणना की जा सकती है
प्रेरणा:
मैं कुछ छवि प्रसंस्करण के लिए एक संख्यात्मक विधि पर काम कर रहा हूं, और कई बड़े घने हैं जो विभिन्न संरचनाओं के साथ होते हैं जो सभी समय के लिए तय किए जाते हैं। बाद में इन मैट्रिक्स कई अज्ञात वैक्टर लिए लागू किया जा करने की आवश्यकता होगी v मैं उस उपयोगकर्ता के इनपुट पर निर्भर करेगा। अभी मैं पेन्सिल के आधार पर कुशल कोड के साथ आने के लिए पेंसिल-एंड-पेपर का उपयोग कर रहा हूं, लेकिन मैं सोच रहा हूं कि क्या प्रक्रिया स्वचालित हो सकती है।
संपादित करें: (पोस्टस्क्रिप्ट)
अब तक के सभी उत्तर (9/5/15 के अनुसार) दिलचस्प हैं, लेकिन किसी ने भी इस सवाल का संतोषजनक जवाब नहीं दिया, जैसा कि मुझे उम्मीद थी। संभवतः यह पता चला है कि यह एक कठिन शोध प्रश्न है, और कोई भी एक अच्छा जवाब नहीं जानता है।
जब से समय समाप्त हुआ है, मैं ईविलजेस के उत्तर का इनाम दे रहा हूं क्योंकि यह सही प्रश्न है। हालाँकि, मैं चाहता हूं कि उत्तर में अधिक स्पष्ट और विस्तृत स्पष्टीकरण हो।
tranisstor का जवाब इस सवाल और ऑनलाइन बूलियन मैट्रिक्स-वेक्टर गुणन (ओएमवी) समस्या के बीच एक संबंध बनाता है, लेकिन कनेक्शन वास्तव में यह सवाल नहीं पूछ रहा है। विशेष रूप से, निम्नलिखित धारणा वास्तव में फिट नहीं है (बोल्ड जोर मेरा),
अब लगता है कि सभी के लिए और सभी मैट्रिक्स एम हम एक एल्गोरिथ्म पता , वह सब वैक्टर के लिए वी गणना करता है एम वी सही मायने में subquadratic समय में, यानी समय में हे ( एन 2 - ε ) कुछ के लिए ε > ० ।
सभी मेट्रिसेस के लिए सबक्वैड्रैटिक एल्गोरिदम मौजूद हैं या नहीं, एक विशिष्ट मैट्रिक्स के लिए एक एल्गोरिथ्म खोजने का सवाल है जो कि जितनी जल्दी हो सके। अधिकांश 0-1 मेट्रिक्स यादृच्छिक शोर की तरह दिखते हैं और (अगर मुझे लगता है) शायद सबक्वैड्रिक एल्गोरिदम नहीं है। हालांकि, यह तथ्य कि वास्तव में खराब मैट्रिस हैं, मुझे एक अच्छे मैट्रिक्स पर तेजी से एल्गोरिथ्म खोजने से नहीं रोकते हैं, उदाहरण के लिए, एक "स्लाइडिंग विंडो" मैट्रिक्स।
vzn के उत्तर, पहला उत्तर , दूसरा उत्तर दिलचस्प है (और मेरी राय में इतने सारे डाउनवोट के लायक नहीं हैं), लेकिन वे वहाँ टिप्पणियों में चर्चा किए गए कारणों के लिए सवाल पर लागू नहीं होते हैं।