c - Finding complete rectangles enclosing 0 -
दी गई 1000 x 1000 arrays में विविध आयतें हैं I कम से कम एक '' 0 '' होना चाहिए ? आयत के अंदर। लेकिन, इस सरणी में, वहां कोई आकार या सीधे रेखा पैटर्न भी नहीं है। (सरणी का प्रारंभिक मान" ???? "0 है, और पैटर्न एक श्रृंखला की एक श्रृंखला का प्रतिनिधित्व करते हैं? "1 ए"। वे एक-दूसरे को ओवरलैप नहीं करते हैं या एक-दूसरे को शामिल नहीं करते हैं।) अपरिवर्तित आकार या सीधी रेखा को छोड़कर सरणी में पूर्ण रेगटेंल्स को ढूंढने के लिए एक कुशल एल्गोरिथ्म क्या हो सकता है? उदाहरण के लिए, संपूर्ण आयतों की संख्या के ऊपर स्थित आंकड़ा 3 है यह बहुत सरल है यदि आपके पास मान्यताओं: प्रत्येक वैध आयत की सीमाएं एक गैर-मान्य पथ के साथ किसी भी सेल को साझा नहीं करती हैं। आइए पहले एक सहायक फ़ंक्शन का निर्माण करें: यह फ़ंक्शन मूलतः दायां-डाउन-बाएं-अप के निर्देशों में 1 एस का पता लगाता है और अगर शर्तों को पूरा किया जाता है (कम से कम 3 की लंबाई और प्रारंभिक स्थिति तक पहुंचने पर)। यह विज़िट किए गए वर्गों को भी चिह्नित करता है। इस फ़ंक्शन के बारे में नोटिस करना महत्वपूर्ण बात यह है कि यह सही ढंग से काम करता है, यदि प्रारंभिक वर्ग शीर्ष-बायां कोने में है। अब, समस्या का हल आसान है: एल्गोरिथ्म कैसे कार्यान्वित होता है: & lt; चित्रा 1 & gt; में, धारावाहिक ???? 1a ???? पीला सेल के रूप में प्रदर्शित आयताकार का पैटर्न है
& lt; चित्रा 1 & gt; में आयत का न्यूनतम आकार 3 x 3 को हरे रंग की कक्ष के रूप में प्रदर्शित किया जाता है।
n वर्ग हैं, तो आप
O (n) में आयतों की गणना कर सकते हैं।
पर जाएं को कॉल करें और 0 से प्रारंभ करें।
is_rectangle (वर्ग s) s से, सही जब आप 1 एस देखते हैं और विज़िट किए हैं तो इन्हें 1 के रूप में चिह्नित किया जाता है, यदि 3 से कम चरण 0 से कम है, तो नीचे जाकर आप 1 एस देखते हैं और दौरा किया जाता है 0 में उन्हें 1 के रूप में चिह्नित किया जाता है अगर 3 से कम चरण में 0 लौटाते हैं, तो छोड़ें जब आप 1 एस देखते हैं और विज़िट किया जाता है तो उन्हें 1 के रूप में देखा जाता है, अगर 3 से कम चरण में 0 से वापसी की जाती है, तो जब आप 1 एस देखते हैं, तो ऊपर जाते हैं और विज़िट किए गए 0 उन्हें 1 के रूप में चिह्नित करते हैं, यदि एक ऊपर की वापसी नहीं है तो 0 वापसी 1
num_rectangles = 0 initialize 0 (पंक्तियाँ x स्तंभ) के लिए पंक्तियों में r के लिए कॉलम में कॉलम के लिए अगर r [c] या छवि [r] [सी] == 0 जारी रखें num_rectangles + = is_rectangle (& lt; r, c & gt;) वापस num_rectangles
1. एक खराब आयत का असफल (और चिह्नित) भाग
2. एक आयत मिला (और चिह्नित)।
3. एक एकल वर्ग (एक ऊर्ध्वाधर पंक्ति के) में विफल
4. एक एकल वर्ग (एक ऊर्ध्वाधर पंक्ति) में विफल
5. एक एकल वर्ग (एक ऊर्ध्वाधर पंक्ति) में विफल
6. कई समान चरणों के बाद, अगले आयत को मिला।
7. और अगले आयत
8. एल्गोरिथम अंत
Comments
Post a Comment