स्वीप लाइन एल्गोरिथ्म के साथ सर्कल इंटरसेक्शन


15

दुर्भाग्य से मैं स्वीप लाइन एल्गोरिथ्म को समझने में अभी भी इतना मजबूत नहीं हूं । विषय पर सभी कागजात और पाठ्यपुस्तकें पहले ही पढ़ी जा चुकी हैं, हालांकि समझ अभी भी दूर है। बस इसे स्पष्ट करने के लिए मैं जितने अभ्यास कर सकता हूं उतने हल करने की कोशिश करता हूं। लेकिन, वास्तव में दिलचस्प और महत्वपूर्ण कार्य अभी भी मेरे लिए एक चुनौती है।

निम्नलिखित अभ्यास मैंने सर्वव्यापी जेफ एरिकसन द्वारा लाइन सेगमेंट इंटरसेक्शन के व्याख्यान नोट्स में पाया ।

अभ्यास 2. विमान में सर्कल को निर्धारित करने के लिए एक स्वीपलाइन एल्गोरिथ्म का वर्णन और विश्लेषण करें , चाहे कोई भी दो प्रतिच्छेद हो, समय में। प्रत्येक वृत्त अपने केंद्र और उसकी त्रिज्या द्वारा विशिष्ट by एड होता है, इसलिए इनपुट में तीन सरणियाँ , और । निम्न-स्तर की प्राथमिकताओं को सही ढंग से लागू करने के लिए सावधान रहें।nहे(nलॉगn)एक्स[1 ..n],Y[1 ..n]आर[1 ..n]

आइए एक जटिल चीज़ को आसान बनाने की कोशिश करें। हम मंडलियों के प्रतिच्छेदन के बारे में क्या जानते हैं? लाइनों के चौराहे के साथ क्या एनालॉग मिल सकता है। यदि वे निकटवर्ती हों, तो दो रेखाएँ एक दूसरे को काट सकती हैं। आज्ञा देना दूरी बीच की दूरी के बीच, और केंद्रों के केंद्र हैं। कुछ मामलों पर विचार करें:आर0आर1

  • केस 1: यदि तो कोई हल नहीं है, वृत्त अलग हैं।>आर0+आर1

  • केस 2: यदिफिर कोई हल नहीं है क्योंकि एक सर्कल दूसरे के भीतर समाहित है।<|आर0-आर1|

  • केस 3: यदि और तो वृत्त संयोग हैं और अनंत संख्या में समाधान हैं।=0आर0=आर1

इसलिए, ऐसा लगता है कि चौराहे की स्थितियां तैयार हैं, निश्चित रूप से यह गलत परिस्थितियां हो सकती हैं। कृपया सही है अगर ऐसा है।

कलन विधि। अब हमें दो इंटरसेक्टिंग सर्किलों के बीच कुछ खोजने की जरूरत है। लाइन चौराहे के एनालॉग के साथ, हमें घटना कतार में स्थिति सम्मिलित करने और स्थिति को हटाने की आवश्यकता है। मान लें कि घटना बिंदु पहले और अंतिम बिंदुओं का x समन्वय है जो ऊर्ध्वाधर स्वीप लाइन को छूता है। पहले बिंदु पर हम सर्कल को स्टेटस में डालते हैं और चौराहे की जांच करते हैं (चेकिंग के लिए 3 मामलों का उल्लेख ऊपर है) निकटतम सर्कल के साथ, अंतिम बिंदु पर हम स्थिति से सर्कल हटाते हैं ।

ऐसा लगता है कि स्वीप लाइन एल्गोरिथ्म के लिए पर्याप्त है। अगर कुछ गलत है, या हो सकता है कि कुछ अलग हो, तो हमारे साथ अपने विचार साझा करने के लिए स्वतंत्र महसूस करें।

परिशिष्ट :

मैं एक सर्कल सम्मिलित करता हूं जब ऊर्ध्वाधर स्वीप लाइन पहली बार सर्कल को छूती है, और जब पिछली बार स्वीप लाइन इसे छूती है, तो स्थिति से एक सर्कल हटा दें। चौराहे की जांच निकटतम पिछले सर्कल के लिए की जानी चाहिए। यदि हमने एक सर्कल को स्टेटस में जोड़ा है और पहले से ही एक और सर्कल है जिसे हमने पहले जोड़ा था और यह अभी भी था, इसलिए विकृत सर्कल "बंद" नहीं था, इसलिए एक चौराहा हो सकता है।


4
सर्वव्यापी [प्रशस्ति पत्र की जरूरत]
जेफई

@com "निकटतम पिछले सर्कल" से आपका क्या तात्पर्य है?
जो

1
मुझे लगता है कि statusवर्तमान में स्वीप लाइन को काटते हुए सर्कल बनाए रखता है? मान लीजिए कि आपके पास वर्तमान में 100 मंडल हैं status, और आप एक प्रविष्टि घटना की प्रक्रिया करते हैं और 101 वें सर्कल को सम्मिलित करते हैं। चौराहे की जाँच के लिए आप कितने हलकों की तुलना करते हैं? तुलना करने के लिए आप किस मंडल को चुनते हैं?
जो

@ ठीक है, यह वही है जो मुझे चाहिए, जैसे कि शास्त्रीय स्वीप लाइन एल्गोरिथ्म में, जहां "दो रेखाओं के प्रतिच्छेदन का मतलब कुछ बिंदु पर इन दो लाइनों के आसन्न होता है", मुझे हलकों के साथ इसी तरह के एनालॉग को खोजने की आवश्यकता है। सबसे सरल बात मैं साथ सबसे कम समन्वय और उच्चतम सर्कल का समन्वय है, अगर सर्कल सबसे कम से उच्चतम तक अंतराल के उनके प्रक्षेपण को प्रतिच्छेद करता है। तो शायद अब मैं अर्धवृत्त के आपके विचार के करीब आ रहा हूं। ऊपर अर्धवृत्त में उच्चतम , और नीचे में सबसे कम । yyyyyy
कॉम

जवाबों:


5

आप निश्चित रूप से सही रास्ते पर हैं। बड़ा सवाल यह है: जब आप एक सर्कल डालते हैं, तो आप किन अन्य सर्कल को चौराहे की जांच करते हैं? आप इस जाँच को कैसे करते हैं?

लाइन सेगमेंट चौराहे के मामले में, किसी भी दिए गए x निर्देशांक पर लाइन सेगमेंट पूरी तरह से ऑर्डर किए जाते हैं। (आप उन्हें निम्नतम से उच्चतम Y समन्वय के लिए सूचीबद्ध कर सकते हैं)। इस प्रकार, आप एक बाइनरी सर्च ट्री में लाइन सेगमेंट को बनाए रख सकते हैं, और जब आप एक नया सेगमेंट जोड़ते हैं, तो आपको केवल यह पता लगाना होगा कि यह बाइनरी सर्च ट्री में कहां है, और चौराहे की घटनाओं के लिए अपने पड़ोसियों की जांच करें।

सर्कल के मामले में, यह तुरंत स्पष्ट नहीं है कि कौन से सर्कल की जांच करनी है। यदि आपका उत्तर "उन सभी" है, तो आपके एल्गोरिथ्म को कुछ काम करने की आवश्यकता है।

क्या आप मंडलियों का प्रतिनिधित्व करने का एक तरीका निकाल सकते हैं ताकि वे पूरी तरह से आदेशित हों, जैसे कि लाइन सेगमेंट हैं?

दो आधे हलकों के रूप में मंडलियों का प्रतिनिधित्व करने का प्रयास करें। प्रत्येक इंसर्ट इवेंट वास्तव में दो इवेंट्स होते हैं: टॉप हाफ डालें, और बॉटम हाफ इंसर्ट करें।


दुर्भाग्य से मुझे अर्धवृत्त का विचार नहीं है, हो सकता है कि आप अर्धवृत्त को सर्कल की न्यूनतम इकाई के रूप में मानते हैं जिसे प्रतिच्छेद किया जा सकता है (चौराहे के 3 मामले: चौराहा ऊपरी अर्धवृत्त पर है, या कम, या उन दोनों पर)। भीख मांगने पर सभी मंडलियों को उनकी बाईं और दाईं सीमाओं के x निर्देशांक द्वारा आदेश दिया जाता है। इसलिए हमें x को स्थिति में समन्वित नहीं समझना चाहिए , क्योंकि सभी मंडल पहले से ही x समन्वय क्रम में आते हैं। इसलिए यह केंद्र (अर्धवृत्त के), या y और त्रिज्या के किसी भी संयोजन के y समन्वय पर विचार करने के लिए अधिक तर्कसंगत लगता है। आपकी राय?
कॉम

@com आपको यह निर्धारित करने के लिए केंद्र बिंदु और त्रिज्या की आवश्यकता है कि क्या दो वृत्त प्रतिच्छेद करते हैं, जैसा कि आपने अपने स्वयं के प्रतिच्छेदन चेकों में किया है। केवल y समन्वय और त्रिज्या अकेले सर्कल की सीमा को पूरी तरह से निर्दिष्ट नहीं करते हैं। स्वीप लाइन एल्गोरिदम के बारे में कुछ मौलिक लगता है जिसे आप समझ नहीं रहे हैं, लेकिन मेरे लिए यह बताना मुश्किल है कि यह क्या है।
जो

0

मैं इस दृष्टिकोण को ओ ((एन + के) लोगन) समय में चलने वाले बेंटले ओटमैन स्वीप के अनुरूप सोच सकता था।

मैं सर्कल चौराहे से लाइन सेगमेंट चौराहे की समस्या को कम कर सकता था। मैं प्रत्येक वृत्त के लिए Y- अक्ष के समानांतर ऊर्ध्वाधर व्यास पर विचार करूंगा। एल्गोरिथ्म एक क्षैतिज रेखा का उपयोग करेगा जो नीचे से ऊपर तक विमान को घुमाता है।

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

चूँकि लाइन चौराहे की समस्या को O ((n + k) logn) समय में हल किया जा सकता है, वही बाउंड सर्कल चौराहे के लिए भी बाध्य है।

मुझे पूरा यकीन है कि यह काम करेगा लेकिन अगर आप लोग किसी भी मामले को इंगित कर सकते हैं कि यह सामान्य रूप से नहीं होगा, तो मुझे बताएं।

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