स्वीप लाइन द्वारा आयत कवरेज


9

मुझे एक अभ्यास दिया जाता है दुर्भाग्य से मैं खुद सफल नहीं हुआ।

आयतों का एक सेट और एक आयत । यदि प्लेन स्वीपिंग एल्गोरिथ्म का उपयोग यह निर्धारित करता है कि पूरी तरह से के सेट द्वारा कवर किया गया है ।R1..RnR0R0R1..Rn

स्वीप लाइन एल्गोरिदम के सिद्धांत के बारे में अधिक जानकारी के लिए यहां देखें ।

हमें शुरू से करना चाहिए। प्रारंभ में हम स्वीप लाइन एल्गोरिथ्म को लाइन सेगमेंट चौराहों को खोजने के लिए एल्गोरिदम के रूप में जानते हैं जिसके लिए दो डेटा संरचनाओं की आवश्यकता होती है:

  • ईवेंट पॉइंट्स का एक सेट (यह सेगमेंट और चौराहों के पॉइंट पॉइंट्स को स्टोर करता है)Q
  • एक स्थिति (सेगमेंट के सेट के लिए गतिशील संरचना स्वीप लाइन इंटरसेप्टिंग)T

सामान्य विचार: मान लें कि स्वीप लाइन एक ऊर्ध्वाधर रेखा है जो बाईं ओर से आयतों के सेट के पास पहुंचना शुरू कर देती है। आयतों के सभी निर्देशांक को क्रमबद्ध करें और उन्हें बढ़ते क्रम में में संग्रहीत करें - लेना चाहिए । पहले घटना बिंदु से शुरू करें, हर बिंदु के लिए आयतों के सेट को निर्धारित करें जो दिए गए निर्देशांक पर प्रतिच्छेद करते हैं, चौराहे के आयताकारों के निरंतर खंडों की पहचान करें और जांचें कि क्या वे पूरी तरह से वर्तमान समन्वय में कवर करते हैं। साथ एक द्विआधारी पेड़ के रूप में इसे लेने वाला है । यदि का कोई भी भाग खुला रहता हैlxQO(nlogn)xR0xTO(logn)R0R0 पूरी तरह से कवर नहीं है।

विवरण: खंड चौराहे एल्गोरिथ्म का विचार था कि केवल निकटवर्ती खंड प्रतिच्छेद। इस तथ्य के आधार पर हमने स्टेटस बनाया और इसे एल्गोरिथम में बनाए रखा। मैंने इस मामले में एक समान विचार खोजने की कोशिश की और अब तक कोई सफलता नहीं मिली है, केवल एक ही चीज मैं कह सकता हूं कि दो आयतें प्रतिच्छेद हैं यदि उनका संगत और निर्देशांक ओवरलैप है।Txy

समस्या का निर्माण कैसे करने के लिए और बनाए रखने के है , और क्या इमारत की जटिलता और बनाए रखने के है। मुझे लगता है कि आर पेड़ इस मामले में बहुत उपयोगी हो सकते हैं, लेकिन जैसा कि मैंने पाया कि आर पेड़ों का उपयोग करके न्यूनतम बाउंडिंग आयत निर्धारित करना बहुत मुश्किल है।TT

क्या आपके पास इस समस्या को हल करने के बारे में कोई विचार है, और विशेष रूप से कैसे ?T


1
ये अक्ष-संरेखित आयतें हैं या नहीं? (आप इसे किसी भी तरह से कर सकते हैं, लेकिन यह आसान है अगर वे हैं।)
लुई

@ लुईस, चलो इसे थोड़ा सरल करें, मान लें कि अक्ष-संरेखित आयताकार हैं, लेकिन निश्चित रूप से सामान्य मामला अधिक दिलचस्प है
कॉम

आयत के कौन से बिंदु घटना बिंदु हैं? सभी कोनों, शीर्ष एक छोड़ दिया ...?
राफेल

@ राफेल, केवल एक्स इवेंट पॉइंट हैं
कॉम

जवाबों:


6

चलो साथ - साथ शुरू करते हैं nअक्ष-संरेखित आयतें, क्योंकि एक प्रकार का आसान प्रत्यक्ष तर्क है। हम एक वर्टिकल लाइन स्वीप करेंगे। आयतें क्षैतिज किनारों के समापन बिंदु हैं। जैसा कि हम स्वीप करते हैं हम स्वीप लाइन पर अंतराल का एक सेट बनाए रखते हैं जो "खुला" होता हैRi, i1:

  • आयत द्वारा कवर ऊर्ध्वाधर अंतराल जोड़ें Ri जब हम पहली बार मुठभेड़ करते हैं तो स्वीप लाइन में Ri
  • आयत द्वारा कवर ऊर्ध्वाधर अंतराल निकालें Ri जब यह चलता है तो स्वीप लाइन से Ri

बाइनरी ट्री के साथ ऐसा करना आसान है ताकि अपडेट ले सकें O(logn)समय। (समस्या, अनिवार्य रूप से, 1-आयामी है। आप यह पता लगाते हैं कि एंडपॉइंट एक खुला अंतराल में हैं और जोड़ते समय उचित रूप से जोड़ते और बढ़ाते हैं / निकालते समय।)

तो फिर तुम बस की जाँच करें, की अवधि में R0खुला अंतराल में से कोई भी कभी के ऊर्ध्वाधर अवधि को नहीं काटता है R0। पूरी बात हैO(nlogn) समय ए O(n) अंतरिक्ष।

सामान्य मामले के लिए, स्पष्ट चाल काफी तेज नहीं है। आयतों से प्रेरित पूरे प्लानर उपखंड की गणना करने के लिए मानक स्वीप लाइन एल्गोरिथ्म का उपयोग करें।

स्पष्ट रूप से कुछ डिस्क-जैसा सेट F चेहरे को ढंकता है R0। अपने आप से, यह हमें पर्याप्त नहीं बताता है, क्योंकि हम जिस चीज में रुचि रखते हैं, क्या इनमें से कोई भी चेहरा अंदर हैR0और अन्य आयतों के बाहर। ऐसा करने के लिए, हम निर्माण को थोड़ा संशोधित करते हैं, ताकि जब हम एक किनारे जोड़ते हैं, तो हम एक तरफ को अंदर आयत की पहचान के साथ टैग करते हैं। यह जोड़ता हैO(1) ओवरहेड, इसलिए निर्माण है O(n2logn)समय; आयतों पर कोई धारणा नहीं होने के कारण, आउटपुट हो सकता हैΩ(n2) आकार में, इसलिए हम सबसे खराब स्थिति में उस स्थान का उपयोग कर रहे हैं, इसलिए समय "अस्तित्वगत इष्टतम" है, हालांकि "आउटपुट संवेदनशील" नहीं है।

आखिरकार, R0 इतने लंबे समय तक कवर किया गया है कि कोई भी चेहरा अंदर नहीं है F केवल किनारों में से एक के रूप में टैग नहीं किया गया है Ri। मुद्दा यह है कि अगर एक बढ़तf में है Ri, फिर पूरा का पूरा fसाथ ही है। एक लाइन पर व्यापक कल्पना करेंf इस किनारे के साथ orthogonally: यह केवल छोड़ सकता है Ri या तो बाहर f या f के एक से अधिक किनारों से घिरा है Ri

तो निष्कर्ष यह है कि विशेष मामला है O(nlogn) और सामान्य एक है O(n2logn) कम से कम, लेकिन मुझे संदेह है कि इसमें सुधार किया जा सकता है।


आपके उत्तर के लिए बहुत - बहुत धन्यवाद। सामान्य मामले के बारे में कुछ बातें स्पष्ट करना चाहता हूं।Q - घटना बिंदु हैं x प्रस्तुत समन्वय, T - स्थिति - "खुला" अंतराल, जैसा कि मैंने समझा कि यह अंतराल के अनुरूप है xi इनमें से एक Rजो किसी अन्य द्वारा खुला है Ri,i1। के साथ हिस्सा हैR0मुझे समझ नहीं आया। मुझे लगता है कि यदि प्रत्येक अंतराल (अंतराशि) को जाँचना चाहिए कि अंतराल अंतराल को काटता है या नहींR0, क्या यह सही है?
कॉम

सामान्य मामले के लिए, मूल रूप से मैं यह मान रहा हूं कि आप जानते हैं कि आयतों से प्रेरित पूरे प्लानर के नक्शे का निर्माण कैसे किया जाता है, और फिर मैं तर्क दे रहा हूं कि इसका एक चेहरा पूरी तरह से है Ri यदि इसका एक बाउंडिंग किनारा "अंदर" का है Ri। आप सामान्य स्वीप एल्गोरिदम (जैसे, "मार्क्स" पुस्तक से) को ट्रैक कर सकते हैं, जब वे स्वीप लाइन में जुड़ जाते हैं तो खंडों के "अंदर" और "बाहर" दिशाओं को रिकॉर्ड करके।
लुइस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.