मान लीजिए कि हमें एक परिमित सेट है में डिस्क की , और हम सबसे छोटी डिस्क की गणना करना चाहते हैं जिसके लिए ⋃ एल ⊆ डी । यह करने के लिए एक मानक तरीका Matousek, Sharir और Welzl [1] के एल्गोरिथ्म का उपयोग एक आधार खोजने के लिए करने के लिए है बी के एल , और डी = ⟨ बी ⟩ , छोटी से छोटी डिस्क युक्त ⋃ बी । डिस्क गणना बीजगणितीय रूप से इस तथ्य का उपयोग करके की जा सकती है कि, एक आधार है, में प्रत्येक डिस्क लिए स्पर्शरेखा है ।⟨ बी ⟩
( एक है आधार के यदि कम है ऐसा है कि एक आधार नहीं है सबसे तीन तत्वों पर;। में गेंदों के लिए सामान्य रूप में एक आधार अधिक से अधिक तत्व हैं।)बी ⟨ बी ⟩ = ⟨ एल ⟩ आर डी डी + 1
यह एक यादृच्छिक पुनरावर्ती एल्गोरिदम निम्नानुसार है। (लेकिन एक पुनरावृत्त संस्करण के लिए नीचे देखें, जिसे समझना आसान हो सकता है।)
प्रक्रिया : इनपुट : डिस्क के परिमित सेट , , जहां एक आधार है ( )।एल बी बी बी
- यदि , तो वापस लौटें ।
- अन्यथा यादृच्छिक पर में चुनें ।
- आज्ञा देना ।
- यदि तो वापस करें ।
- अन्यथा , जहाँ कप '' {X \} का एक आधार है ।
के रूप में प्रयुक्त के आधार गणना करने के लिए ।
हाल ही में मेरे पास इस एल्गोरिथम को लागू करने का कारण था। लाखों यादृच्छिक रूप से उत्पन्न परीक्षण मामलों में परिणाम सही होने के बाद, मैंने देखा कि मैंने कार्यान्वयन में त्रुटि की थी। अंतिम चरण में मैं लौट रहा था के बजाय ।
इस त्रुटि के बावजूद, एल्गोरिथ्म सही उत्तर दे रहा था।
मेरा प्रश्न: एल्गोरिथ्म का यह गलत संस्करण स्पष्ट रूप से यहाँ सही उत्तर क्यों देता है? क्या यह हमेशा (साबित) काम करता है? यदि हां, तो क्या यह उच्च आयामों में भी सच है?
जोड़ा: कुछ गलतफहमी
कई लोगों ने इस आशय के गलत तर्क पेश किए हैं कि संशोधित एल्गोरिथ्म तुच्छ रूप से सही है, इसलिए यहां कुछ गलतफहमी को दूर करना उपयोगी हो सकता है। एक लोकप्रिय गलत धारणा यह प्रतीत होती है कि । यहाँ उस दावे का प्रतिवाद है। दिए गए अनुसार डिस्क नीचे ( की सीमा को भी लाल रंग में दिखाया गया है):एक , ख , ग , घ , ई ⟨ एक , ख , ई ⟩
हमारे पास ; और ध्यान दें कि :ई ∉ ⟨ ग , घ ⟩
यहाँ है कि यह कैसे हो सकता है। पहला अवलोकन यह है कि :
- हम गणना करना चाहते हैं
- चुनें
- आज्ञा देना
- उस निरीक्षण करें
- तो चलिए का एक आधार हो सकता हैबी ' ∪ { एक्स } = { एक , ख , ग , ई }
- निरीक्षण करें कि
- लौटें , जो कि{ b , c }
अब ।
- हम गणना करना चाहते हैं
- चुनें
- आज्ञा देना
- उस निरीक्षण करें
- तो चलिए एक आधार हो सकता हैबी ' ∪ { एक्स } = { ख , ग , घ }
- निरीक्षण करें कि
- लौटें , जो{ c , d }
(निश्चितता के लिए, हम कहते हैं कि डिस्क सभी की त्रिज्या 2 है, और , , , , और क्रमशः।)( 30 , 5 ) ( 30 , 35 ) ( 10 , 5 ) ( 60 , 26 ) ( 5 , 26 )
जोड़ा गया: एक पुनरावृत्त प्रस्तुति
एल्गोरिथ्म की पुनरावृत्त प्रस्तुति के बारे में सोचना आसान हो सकता है। मुझे निश्चित रूप से इसके व्यवहार की कल्पना करना आसान है।
इनपुट : एक सूची डिस्क की आउटपुट : का एक आधारएल
- दें ।
- बेतरतीब ढंग से शफ़ल ।
- में प्रत्येक लिए :एल
- यदि :
- चलो के एक आधार होना ।
- चरण 2 पर वापस जाएं।
- वापसी ।
एल्गोरिथ्म का कारण, संयोगवश, यह है कि चरण 5 हमेशा की त्रिज्या को बढ़ाता है - और केवल कई संभावित मान हैं ।
संशोधित संस्करण में इतनी सरल पुनरावृत्त प्रस्तुति नहीं है, जहां तक मैं देख सकता हूं। (मैंने इस पोस्ट में पिछले संपादन में एक देने की कोशिश की, लेकिन यह गलत था - और गलत परिणाम दिए।)
संदर्भ
[१] जिओ मतौकेक, मीशा शायर और इमो वेल्ज़ल। लीनियर प्रोग्रामिंग के लिए एक उपसमुच्चय बाउंड। एलगोरिदमिका, 16 (4-5): 498-516, 1996।