ए में एक बिंदु और बी में एक बिंदु के बीच सबसे छोटी दूरी


9

दो सेटों को देखते हुए और प्रत्येक समतल में असंतुष्ट बिंदु हैं, और एक बिंदु के बीच की सबसे छोटी दूरी की गणना करते हैं , यानी, ।ABnABmin { dist(p,q) | pAqB }

मुझे यकीन नहीं है कि मैं सही हूं, लेकिन यह समस्या उन समस्याओं के समान है जिन्हें कम्प्यूटेशनल ज्यामिति में रैखिक प्रोग्रामिंग द्वारा हल किया जा सकता है। हालांकि, एलपी में कमी सीधी नहीं है। इसके अलावा, मेरी समस्या दो सेटों के बीच सबसे पतली स्टेप को खोजने से संबंधित है जो स्पष्ट रूप से 2-आयामी अंतरिक्ष में O(n) में एलपी द्वारा हल किया जा सकता है ।


4
यहाँ सवाल क्या है?
राफेल


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

3
"जो स्पष्ट रूप से 2-आयामी अंतरिक्ष में ओ (एन) में एलपी द्वारा हल किया जा सकता है" - मुझे आश्चर्य है कि इस कथन ने क्या संकेत दिया। "रैखिक प्रोग्रामिंग" सामान्य रूप से रैखिक समय में हल करने योग्य नहीं है; "रैखिक" कुछ और को संदर्भित करता है। तो क्या एलपी का एक विशेष रूप है?
राफेल

जवाबों:


5

मेरे पास एक समाधान है जो थोड़ा जटिल लग सकता है, लेकिन भोले-भाले तुलना में अधिक कुशल होना चाहिए :O(n2)

  1. चलो के द्रव्यमान का केंद्र के बीच धुरी होना और ।vAB
  2. क्रमशः और इस अक्ष के साथ अंक को अवरोही और आरोही क्रम में क्रमबद्ध करें , जिसके परिणामस्वरूप अनुक्रम , , ..., और , , ..., ।ABa0a1anb0b1bn

बाकी इसे स्पष्ट करने के लिए छद्म कोड में है:

d = infinity.
for j from 1 to n
    if (b_1 - a_j) along v > d then break endif
    for k from 1 to n
        if (b_k - a_j) along v > d then
            break
        else
            d = min( d , ||b_k - a_j|| )
        endif
    enddo
enddo

अर्थात्, साथ बिंदुओं को पूर्व-सॉर्ट करके , आप उन जोड़ों को फ़िल्टर कर सकते हैं जो कभी भी साथ एक दूसरे के के भीतर नहीं होंगे क्योंकि हमेशा।vdbkajvbkaj

बदतर स्थिति में यह अभी भी , लेकिन अगर और अच्छी तरह से अलग हो जाते हैं, तो यह उससे बहुत तेज़ होना चाहिए, लेकिन से बेहतर नहीं है , जिसकी आवश्यकता है छँटाई के लिए।O(n2)ABO(nlogn)

अपडेट करें

यह समाधान किसी भी तरह से एक टोपी से बाहर निकाला जाता है। यह एक विशेष मामला है कि मैं कणों के उपयोग में क्या स्थानिक द्वंद्व के साथ कणों के सभी परस्पर क्रिया जोड़े को खोजने के लिए करता हूं। अधिक सामान्य समस्या की व्याख्या करने वाला मेरा अपना काम यहाँ है

सुझाव के रूप में एक संशोधित लाइन-स्वीप एल्गोरिथ्म का उपयोग करने के लिए, हालांकि सहज रूप से सरल है, मुझे यकीन नहीं है कि यह जब असहमति सेट पर विचार किया जाता है। वही राबिन के यादृच्छिक एल्गोरिदम के लिए जाता है।O(nlogn)

और भी बहुत कुछ संबंध तोड़ना सेट में निकटतम जोड़ी समस्या से निपटने साहित्य होना प्रतीत नहीं होता है, लेकिन मैं मिल गया है इस , जिसके तहत किया जा रहा करने के लिए कोई दावा करता है , और यह है, जो दिखाई नहीं देता किसी भी चीज के बारे में कोई भी दावा करना।O(n2)

ऊपर दिए गए एल्गोरिथ्म को पहले पेपर (शान, झांग और साल्ज़बर्ग) में सुझाए गए प्लेन स्वीप के एक प्रकार के रूप में देखा जा सकता है, फिर भी -axis और कोई छँटाई का उपयोग करने के बजाय , सेट के बीच अक्ष का उपयोग किया जाता है और सेट का पता लगाया जाता है अवरोही / आरोही क्रम में।x


2
@Pedro: क्षमा करें, मैंने पहले कोई टिप्पणी नहीं की थी (उस समय नहीं)। मैंने आपके उत्तर को अस्वीकार कर दिया, क्योंकि यह एक बुरा उत्तर था और शीर्ष पर नहीं होना चाहिए था। यह वास्तव में सबसे खराब स्थिति O (n log n) के साथ कम्प्यूटेशनल ज्यामिति में एक ज्ञात समस्या है। एक अच्छे उत्तर ने ज्ञात समस्या (शायद एक संदर्भ के साथ) और सामान्य समाधानों को इंगित किया होगा, जिसमें शामिल हैं: kd पेड़ और परीक्षण तत्व, स्वीप एल्गोरिदम, आदि का उपयोग करना। सामान्य विचार क्रमबद्ध संरचना में प्रीप्रोसेस होना चाहिए और इसका उपयोग करना चाहिए । 1 डी मामले को देखें - अधिक स्पष्ट हे (एन लॉग एन) वहां।
Ex0du5

2
@ ex0du5: ऐसा लगता है जैसे आपको अपना जवाब पोस्ट करना चाहिए! ध्यान दें कि "बेहतर उत्तर है" आमतौर पर डाउनवोटिंग का एक अच्छा कारण नहीं है; यह उपाय गलत, स्पैम और बहुत खराब स्वरूपित उत्तरों के लिए आरक्षित होना चाहिए। पेड्रो न तो है। एक धारणा के लिए यहां भी देखें कि कुछ लोगों ने कितना सोचा था कि एक मंदी से पहले दिया जाना चाहिए।
राफेल

1
@ राफेल: मैंने जवाब नहीं दिया क्योंकि एक उचित जवाब था और मेरे पास संदर्भ देखने का समय नहीं था। कैसे नीचे की ओर आपके संदर्भ के लिए, कि इन साइटों के लिए एक भयानक एल्गोरिथ्म है! सीएस छात्रों को विशेष रूप से औपचारिकता के लिए लक्ष्य नहीं खोने के महत्व को समझना चाहिए। मतदान का लक्ष्य एक रैंकिंग के उत्तरों को स्थानांतरित करना है जो बाद में उसी समस्या के छात्रों को सबसे उपयोगी उत्तरों के लिए मार्गदर्शन करेगा। मतदान के लिए मेरा एल्गोरिथ्म ऐसा करता है। वह अहंकार: जाहिर है कि नहीं। यदि आप चाहें तो एक मेटा पर चर्चा की जा सकती है, लेकिन वयस्कों के रूप में, हमें अपनी शक्तियों का उपयोग अच्छे के लिए करना चाहिए, मुझे लगता है।
ex0du5

1
@ ex0du5: आपको लगता है कि अब आपके हाथों में कुछ समय है। क्या आप वास्तव में दिखा सकते हैं कि यह उदाहरण वास्तव में "एक बुरी तरह से ज्ञात समस्या हैO(nlogn)"?
पेड्रो

1
@ ex0du5: वास्तव में, निकटतम पड़ोसी खोज, जैसे kd पेड़ों का उपयोग करके , केवल औसत जटिलता O (logn) है । तो हम वापस एक वर्ग में आते हैं।
पेड्रो

4

आप "निकटतम जोड़ी" लाइन्सपाइप एल्गोरिदम को अनुकूलित कर सकते हैं जो हैO(nlogn)

एकमात्र परिवर्तन जो आपको करना होगा, वह है कि जोड़े को अनदेखा करना जो एक ही सेट से संबंधित हैं।

संपादित करें: यह वास्तव में सरल नहीं है (या यहां तक ​​कि संभव है) जैसा कि मैंने वर्णित किया है। चर्चा के लिए टिप्पणियाँ देखें।


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

1
रैंडमाइज्ड लीनियर टाइम एल्गोरिथ्म के लिए, उदाहरण के लिए रबिन फ्लैप्स लिप्टन के ब्लॉग पर एक सिक्का देखें
जूहो

3
क्या आप इस बारे में थोड़ा और विशिष्ट हो सकते हैं कि आप इसे असहमति सेट के लिए कैसे लागू करेंगे, विशेष रूप से बनाए रखने के संबंध में O(nlogn)बाध्य?
पेड्रो

-1 गलत होने के लिए। आपके द्वारा लिंक की गई निकटतम जोड़ी लाइन्सवीप एल्गोरिथ्म सॉर्ट किए गए सेट पर निर्भर करता हैO(1) तत्वों, लेकिन असंतुष्ट सेट के मामले में, यह सेट युक्त होने लगता है n तत्वों, तो यह अब नहीं है O(nlogn)कम से कम सबसे बुरे मामले में तो नहीं।
पेड्रो

1
@ पेड्रो: यह बड़ा क्यों होगा? यदि कुछ भी हो, तो वर्तमान अभ्यर्थी के अंक का सेट सिकुड़ जाना चाहिए।
राफेल

4

इस तरह की समस्याओं में विचार सेट के पड़ोसी से एक कुशल संरचना बनाना है जो निकटतम पड़ोसी के कुशल प्रश्नों की अनुमति देता है। क्लासिक पेपर जिसने मनमाना आयाम के लिए O (लॉग एन) क्वेरी संरचना प्रस्तुत की थी:

वोरोनोई समाधान पर शमोस और होए

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

तो, इस समस्या का मूल समाधान है:

  1. सेट ए को लें और अपनी पसंद के कुशल निकटतम पड़ोसी क्वेरी संरचना का निर्माण करें। यह निर्माण चरण हे (एन लॉग एन) [प्रमेय 4 देखें]।
  2. बी में प्रत्येक तत्व के लिए, निकटतम पड़ोसी के लिए क्वेरी संरचना ए। प्रत्येक क्वेरी O (लॉग एन) [प्रमेय 15, निश्चित आयाम देखें] है, इसलिए बी में सभी बिंदुओं के लिए कुल क्वेरी समय हे (एन लॉग एन) है।
  3. जब प्रत्येक बी में ए के निकटतम बिंदु के लिए परिणाम को पुनर्प्राप्त किया जाता है, तो इसे दूरी पर आदेशित संरचना में डालें। यह ओ (लॉग एन) प्रत्येक परिणाम, या ओ (एन लॉग एन) सभी के लिए डालें।
  4. जब सभी बी को देखा गया है, तो आप जल्दी से (ओ (1)) ए में सबसे छोटी पड़ोसी दूरी के साथ क्रमबद्ध संरचना में बिंदु बी प्राप्त कर सकते हैं।

जैसा कि कोई भी प्रत्येक चरण की जटिलता को देख सकता है, कुल जटिलता हे (एन लॉग एन) है। आधुनिक पाठकों के लिए क्लासिक पेपर नहीं देख रहे हैं, यह कई एल्गोरिथ्म पुस्तकों में शामिल है, जैसे स्कीना द्वारा "द एल्गोरिथम डिज़ाइन मैनुअल"।


1
"आर्टियम का समाधान, उदाहरण के लिए, इस रूप में लिखा जा सकता है और पूरी तरह से मान्य है।" - अच्छा, आप यहाँ जो प्रस्ताव रखते हैं वह अब (शुद्ध) स्वीप-लाइन एल्गोरिथ्म नहीं है, इसलिए मुझे इस बारे में जानकारी नहीं है।
राफेल

@ राफेल: निश्चित रूप से यह है। स्वीपलाइन एल्गोरिदम यहां बताए अनुसार एक व्यवस्थित संरचना में बिंदुओं को पूर्वनिर्मित करता है। मैं भी अपने जवाब के तहत फॉर्च्यून के एल्गोरिथ्म से जुड़ा था, जो दिखाता है कि स्वीपलाइन एल्गोरिथ्म केवल वोरोनोई एल्गोरिदम का एक उदाहरण है। कारण मैंने समाधान संरचना को क्वेरी संरचना में रखा है क्योंकि बड़ी संख्या में ज्यामितीय तंत्र हैं जो इसके लिए विकसित किए गए हैं।
ex0du5

इससे अधिक पुनरावृत्ति करते समय आपको किसी विशेष आदेश की आवश्यकता नहीं है B, जबकि आदेश (कई / सभी?) स्वीपलाइन एल्गोरिदम के लिए आवश्यक है (इसलिए नाम, मुझे लगता है)।
राफेल

1

मुझे यकीन नहीं है कि मैं सही हूं, लेकिन यह समस्या उन समस्याओं के समान है जिन्हें कम्प्यूटेशनल ज्यामिति में रैखिक प्रोग्रामिंग द्वारा हल किया जा सकता है। हालांकि, एलपी में कमी सीधी नहीं है। इसके अलावा मेरी समस्या दो सेटों के बीच सबसे पतली स्टाइप को खोजने से संबंधित है जो स्पष्ट रूप से एलपी द्वारा 2-आयामी स्थान में हल की जा सकती है।

इस समस्या के लिए निम्न सीमा है O(nlogn)बीजीय निर्णय पेड़ मॉडल के तहत। मैं यहाँ इसके प्रमाण का एक मोटा स्केच दूंगा।

हम तत्व विशिष्टता समस्या E से C के उदाहरण को कम कर देंगे।

  • E पर इनपुट: S={a1,a2,a3,...,an}
  • चलो ϵ > 0 एक छोटा सा अंश हो
  • ए = {(ai,0):1in}, B={(ai+ϵ):1in}
  • अब यदि हम सेट A और B के बीच की सबसे छोटी दूरी (d) पा सकते हैं, तो हम अतिरिक्त तत्व की समस्या को तय कर सकते हैं O(n) समय इस प्रकार है
    • सेट S एक डुप्लिकेट है अगर और केवल अगर d = ϵ

हम जानते हैं कि एलिमेंट डिफरेंस प्रॉब्लम तय करने के लिए रनटाइम पर कम बाउंड है O(nlogn)। इसलिए, कम बाउंड कम करके हमारी समस्या पर भी लागू होता है।

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