बुलियन मैट्रिस में द्वीपों की गिनती


9

दिया गया n×m बूलियन मैट्रिक्स X, चलो 0 प्रविष्टियाँ समुद्र और 1प्रविष्टियाँ भूमि का प्रतिनिधित्व करती हैं। एक द्वीप को लंबवत या क्षैतिज रूप से परिभाषित करें (लेकिन तिरछे नहीं) आसन्न1 प्रविष्टियों।

मूल प्रश्न किसी दिए गए मैट्रिक्स में द्वीपों की संख्या की गणना करना था। लेखक ने एक पुनरावर्ती समाधान का वर्णन किया (O(nm) याद)।

लेकिन मैं असफलता के साथ एक स्ट्रीमिंग (बाएं से दाएं, और फिर अगली पंक्ति में नीचे) खोजने की कोशिश कर रहा था O(m) या O(n) या O(n+m)स्मृति (वहाँ समय जटिलता के लिए कोई सीमा नहीं कर रहे हैं)। क्या यह संभव है? यदि नहीं, तो मैं इसे कैसे साबित कर सकता हूं?


countफ़ंक्शन के लिए कुछ इनपुट के लिए अपेक्षित आउटपुट के कुछ उदाहरण :

सीयूnटी(010111010)=1;सीयूnटी(101010101)=5;सीयूnटी(111101111)=1;

सीयूnटी(1111100100010110100011011111)=2

सीयूnटी(101111)=1


1
1. "ऑर्थोगोनल" से आपका क्या तात्पर्य है? क्या आपका मतलब जुड़ा हुआ घटक है? 2. हम क्या मान सकते हैं कि मैट्रिक्स कैसे संग्रहीत किया जाता है? क्या हम यह मान सकते हैं कि यह बाहरी स्टोरेज (उदाहरण के लिए, एक हार्ड हार्ड डिस्क) पर संग्रहीत है, इसलिए आप अपने इच्छित किसी भी हिस्से को पढ़ सकते हैं, लेकिन इसे एक बार में एक ब्लॉक पढ़ने के लिए तेज़ होगा? या क्या हम मैट्रिक्स को एक स्ट्रीमिंग फैशन में प्राप्त करते हैं, जहां एक बार हमें इनपुट मैट्रिक्स प्राप्त हो जाने के बाद हम उस बिट इनपुट को फिर कभी नहीं देख सकते हैं?
डीडब्ल्यू

1
अच्छा है धन्यवाद। मैं आपको उन बिंदुओं को स्पष्ट करने के लिए प्रश्न को संपादित करने के लिए प्रोत्साहित करता हूं। यदि यह स्ट्रीमिंग है, तो मैट्रिक्स के बिट्स किस क्रम में आते हैं? एक पंक्ति के बीच दाईं ओर बाईं ओर स्कैनिंग, फिर अगली पंक्ति के लिए नीचे?
DW

1
कृपया इन सभी विवरणों को शामिल करने के लिए प्रश्न को संपादित करें। टिप्पणियाँ अल्पकालिक हैं।
युवल फिल्मस

2
टिप्पणियों में दी गई सभी जानकारी पोस्ट में ही नहीं मिल सकती है। इस जानकारी में से कुछ बल्कि महत्वपूर्ण है, अपने स्ट्रीमिंग मॉडल की तरह। टिप्पणियां गायब हो सकती हैं, और इसलिए (और सामुदायिक मानकों के कारण), सभी आवश्यक विवरण मुख्य पोस्ट का हिस्सा बनना चाहिए।
युवल फिल्मस

1
आवश्यक समय जटिलता क्या है?
hengxin

जवाबों:


4

यहाँ एक एल्गोरिथ्म का एक स्केच है जो केवल एक समय में दो पंक्तियों को स्मृति में रखता है, इसलिए हे()याद। लेकिन जब से आप इस एल्गोरिथ्म को मुद्दों के बिना मैट्रिक्स के हस्तांतरण पर चला सकते हैं, वास्तविक जटिलता हैहे(मिनट(,n))याद। प्रसंस्करण समय ।हे(n)

  1. प्रारंभ। पहली पंक्ति पर स्कैन करें और उस पंक्ति के सभी कनेक्टेड सबस्ट्रिंग ढूंढें। प्रत्येक पॉजिटिव को असाइन करें एक अद्वितीय पॉजिटिव आईडी का विकल्प दें और इसे एक वेक्टर के रूप में सहेजें जो शून्य है जहां शून्य है और यूनीक पॉजिटिव आईडी अन्यथा।एक्स

  2. प्रत्येक शेष पंक्ति के लिए अनूठे आईडी असाइन करें (पिछले अद्वितीय आईडी को फिर से असाइन न करें, सुनिश्चित करें कि उस पंक्ति में फिर से सबस्ट्रिंग करने के लिए आपकी आईडी सख्ती से बढ़ रही हैं)। पिछली पंक्ति और वर्तमान पंक्ति को मैट्रिक्स द्वारा रूप में देखें , और किसी भी जुड़े हुए क्षेत्रों को उनके न्यूनतम को सौंपा जाना चाहिए। उदहारण के लिए:2

    010402220333300506607080009990010402220333300504402020003330

    इस एल्गोरिथ्म की शुद्धता के लिए पिछली पंक्ति को अपडेट करने की आवश्यकता नहीं है, केवल वर्तमान एक है।

    ऐसा करने के बाद, पिछली पंक्ति में सभी आईडी का सेट खोजें, जो अगली पंक्ति से कनेक्ट न हों, डुप्लिकेट को छोड़ दें । द्वीपों के अपने चल रहे काउंटर में इस सेट का आकार जोड़ें।

    अब आप पिछली पंक्ति को छोड़ सकते हैं और वर्तमान पंक्ति को पिछली पंक्ति में असाइन कर सकते हैं और आगे बढ़ सकते हैं।

  3. पिछली पंक्ति को सही ढंग से संभालने के लिए के निचले भाग में शून्य की एक और पंक्ति है और चरण 2 को फिर से चलाएं।एक्स


6

ओर्लप अंतरिक्ष के शब्दों का उपयोग करके एक समाधान देता है , जो अंतरिक्ष के बिट्स हैं (सरलता के लिए मान लेते हैं कि )। इसके विपरीत, यह दिखाना आसान है कि आपकी समस्या के लिए असहमति को कम करके अंतरिक्ष के बिट्स की आवश्यकता है।हे(n)हे(nलॉगn)n=Ω(n)

मान लीजिए कि ऐलिस एक द्विआधारी वेक्टर रखती और बॉब एक द्विआधारी वेक्टर रखती , और वे जानते हैं कि करने के लिए एक सूचकांक वहाँ मौजूद है या नहीं चाहते ऐसा है कि । वे आपके एल्गोरिथ्म को मैट्रिक्स के लिए हैं जिनकी पंक्तियाँ और । पहली पंक्ति पढ़ने के बाद, ऐलिस बॉब साथ-साथ मेमोरी सामग्री भी भेजता है , ताकि बॉब एल्गोरिथ्म को पूरा कर सके और जुड़े हुए घटकों की संख्या के लिए तुलना कर सके। यदि दो संख्याएं मेल खाती हैं, तो दो वैक्टर असंतुष्ट हैं (कोई सूचकांक नहीं हैएक्स1,...,एक्सny1,...,ynमैंएक्समैं=yमैं=12×(2n-1)एक्स1,0,एक्स2,0,...,0,एक्सny1,0,y2,0,...,0,ynΣमैंएक्समैंΣमैं(एक्समैं+yमैं)मैं), और इसके विपरीत। चूंकि असंबद्धता के लिए किसी भी प्रोटोकॉल की जरूरत है बिट्स (भले ही यह एक छोटे से निरंतर संभावना के साथ गलत हो सकता है), हम एक कम बाध्य करते हैं, जो यादृच्छिक प्रोटोकॉल के लिए भी धारण करता है जिसे कुछ के साथ गलत करने की अनुमति होती है छोटी निरंतर संभावना।Ω(n)Ω(n)

हम नॉनक्रॉसिंग विभाजन का उपयोग करके ओर्लप के समाधान में सुधार कर सकते हैं । हम पंक्ति द्वारा मैट्रिक्स पंक्ति पढ़ते हैं। प्रत्येक पंक्ति के लिए, हमें याद है कि 1s पूर्ववर्ती पंक्तियों से गुजरने वाले रास्तों से जुड़े हैं। संबंधित विभाजन नॉनक्रॉसिंग है, और इसलिए बिट्स का उपयोग करके एन्कोड किया जा सकता है (क्योंकि नॉनक्रॉसिंग विभाजन कैटलन संख्याओं द्वारा गिने जाते हैं, जिनकी वृद्धि दर फैक्टरियल के बजाय घातीय है)। निम्नलिखित पंक्ति को पढ़ते समय, हम इसे प्रदर्शित करते हैं, और एक काउंटर बढ़ाते हैं जब भी कुछ भाग के सभी छोर वर्तमान पंक्ति से जुड़े नहीं होते हैं (काउंटर अतिरिक्त बिट्स लेता है )। जैसा कि ओर्लप के समाधान में, हम मैट्रिक्स को संसाधित करने के लिए शून्य की एक अंतिम डमी पंक्ति जोड़ते हैं। यह समाधान का उपयोग करता हैहे(n)हे(लॉगn)हे(n) बिट्स, जो कि asymptotically इष्टतम है, हमारी निचली सीमा को दर्शाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.