2012-02-13 24 views
12

यहाँ एक दिलचस्प समस्या यह है कि मैं एक प्रोग्रामिंग प्रतियोगिता में सामना करना पड़ा है:का पता लगाने जब आव्यूह गुणन संभव है

समस्या बयान:n मैट्रिक्स के आयामों को देखते हुए, यह निर्धारित करता है, तो वहां मौजूद एक आदेश ऐसी है कि मैट्रिक्स हो सकता है गुणा किया हुआ। यदि कोई मौजूद है, परिणामी मैट्रिक्स के आकार (आयामों का उत्पाद) प्रिंट करें।

मेरे टिप्पणियों: इस एन पी-सम्पूर्ण Hamiltonian पथ समस्या को कम कर देता है अगर आप एक शीर्ष के रूप में प्रत्येक मैट्रिक्स पर विचार करने और मैट्रिक्स कि गुणा किया जा सकता जो निर्देश दिया किनारे आकर्षित। मैंने समस्या को मजबूती से मजबूर कर हल किया लेकिन यह स्पष्ट रूप से बहुत धीमा है। मैं सोच रहा था कि समस्या के इस विशेष उदाहरण के लिए कोई चालाक अनुकूलन है या नहीं।

+3

सभी कुशलतापूर्वक सुलभ (और जांच योग्य) समस्याएं एनपी-पूर्ण समस्याओं को कम करती हैं। यह एनपी-पूर्ण समस्या से आपकी समस्या में कमी है जो परेशान होना चाहिए। – aelguindy

+0

@ElKamina के रूप में, यह एक यूलेरियन निशान समस्या है, मेरा जवाब भी देखें [यहां] (http://stackoverflow.com/a/9046177/1011995)। –

उत्तर

14
  1. प्रत्येक आयाम लंबाई के लिए एक नोड बनाएं। यही है, यदि आयाम (एम, एन) का मैट्रिक्स है, तो ग्राफ़ में एम और एन शिखर होंगे।

  2. आकार के प्रत्येक मैट्रिक्स (एम, एन) के लिए निर्देशित किनारे के साथ नोड्स एम और एन कनेक्ट करें (दो नोड्स के बीच कई किनारों हो सकते हैं)।

  3. अब एक ईरियरियन ट्रेल ढूंढने से गुणा आदेश दिया जाएगा।

Eularian ट्रेल्स खोजने के लिए http://en.wikipedia.org/wiki/Euler_path देखें। जटिलता रैखिक के करीब है (ओ (nlog^3n loglogn) जहां n किनारों की संख्या = matrices की संख्या है)।

+0

+1 ब्रावो! काश मैं इसे खुद का आविष्कार करूंगा। – Gangnus

0

एक संगतता मैट्रिक्स बनाएं (चलिए इसे सीएम कहते हैं) जैसे कि सीएम [एक्स, वाई] = 1 यदि मैट्रिक्स एक्स को वाई, 0 द्वारा मल्टीप्लाइड किया जा सकता है। अगर निर्धारक (सीएम) <> 0 एक आदेश है।

यह सिर्फ एक अंतर्ज्ञान है, अगर मैं गलत हूं तो क्षमा चाहता हूं (दुर्भाग्य से मुझे ठोस प्रमाण नहीं मिला)।

+0

निश्चित रूप से असत्य। दो 2x2 matrices के मामले पर विचार करें। फिर आपका मैट्रिक्स [[1,1] [1,1]] है, जिसमें 0. –

+0

का निर्धारक है, यह सच है, लेकिन इसका यह भी अर्थ है कि आप मानते हैं कि एक मैट्रिक्स को स्वयं से गुणा किया जा सकता है। स्क्वायर मैट्रिक्स के मामले में, यह बिल्कुल सही है, लेकिन इस विशेष परिदृश्य में हम एक-दूसरे द्वारा गुणा किए गए मैट्रिक्स के अनुक्रम की तलाश कर रहे हैं, जिसका अर्थ है कि हमें एक मैट्रिक्स को अपने साथ संगत नहीं मानना ​​चाहिए। यह स्पष्ट रूप से एक सबूत नहीं है कि मैं सही हूं, सिर्फ एक विचार। धन्यवाद हालांकि टिप्पणी के लिए, यदि आपको एक और counterexample मिल जाए, तो मैं सराहना करूंगा। – loscuropresagio

+0

अच्छा बिंदु। एक 1x2 और 2x3 मैट्रिक्स के बारे में कैसे। तब मुझे लगता है कि आपका मैट्रिक्स [[0,1] [0,0]] है, जिसमें 0 का निर्धारक भी है, भले ही आप इन तत्वों को एक साथ गुणा कर सकें। –