एल्गोरिदम और सबूत के उदाहरण जो सही लगते हैं, लेकिन नहीं हैं


15

प्रोग्रामिंग कोर्स के लिए मेरे परिचय में, हम एल्गोरिथ्म को साबित करने के प्रारंभिक-रखरखाव-समाप्ति की विधि के बारे में सीख रहे हैं जो हम उससे उम्मीद करते हैं। लेकिन हमें केवल यह साबित करना है कि पहले से ही ज्ञात एक एल्गोरिथ्म सही है, सही है। हमें यह दिखाने के लिए कभी नहीं कहा गया है कि एक एल्गोरिथ्म सही नहीं है।

क्या एल्गोरिदम के कोई क्लासिक उदाहरण हैं जो सही दिखते हैं, लेकिन नहीं हैं? मैं ऐसे मामलों की तलाश कर रहा हूं, जहां इनिशियलाइजेशन-मेंटेनेंस-टर्मिनेशन अप्रोच ऐसी चीज को पकड़ता है, जो पहली नज़र का अंतर्ज्ञान नहीं है।


5
संभवतः रुचि: cs.stackexchange.com/q/29475/755
DW

5
Upvoting क्योंकि मुझे लगता है कि यह एक बहुत महत्वपूर्ण शैक्षणिक प्रश्न है। यह cstheory के लिए थोड़ी गुंजाइश से बाहर है, लेकिन मुझे इसके लिए एक बेहतर मंच नहीं पता है, और cstheory समुदाय में कई एल्गोरिदम प्रशिक्षक हैं। अधिकांश एल्गोरिदम-डिज़ाइन पाठ्यक्रम छात्रों को केवल सही, मौजूदा एल्गोरिदम और उन समस्याओं के बारे में बताते हैं जो आसानी से ज्ञात तकनीकों का उपयोग करके हल करने योग्य हैं। यह छात्रों को इतना आकर्षक लग रहा है, कि किसी के सहज ज्ञान पर भरोसा कर सकता है कि एक प्रशंसनीय एल्गोरिथ्म सही है। एक अच्छा एल्गोरिथ्म-डिज़ाइन कोर्स इसके विपरीत करना चाहिए!
नील यंग

3
मुझे इस तरह का कलेक्शन करना अच्छा लगेगा।
चंद्रा चकुरी

जवाबों:


20

2 डी स्थानीय अधिकतम

इनपुट: 2-आयामी सरणी n×nA

आउटपुट: एक स्थानीय अधिकतम - एक जोड़ी ऐसा है कि A [ i , j ] के पास सरणी में कोई पड़ोसी सेल नहीं है जिसमें कड़ाई से बड़ा मान होता है। (i,j)A[i,j]

(पड़ोसी कोशिकाएँ हैं जो सरणी में मौजूद हैं। इसलिए, उदाहरण के लिए, यदि हैA[i,j+1],A[i,j1],A[i1,j],A[i+1,j]A

0134323125014013

फिर प्रत्येक बोल्ड सेल एक स्थानीय अधिकतम है। प्रत्येक गैर-खाली सरणी में कम से कम एक स्थानीय अधिकतम होता है।

कलन विधि। एक -टाइम एल्गोरिथ्म है: बस प्रत्येक सेल की जांच करें। यहां एक तेज, पुनरावर्ती एल्गोरिदम के लिए एक विचार है।O(n2)

को देखते हुए , मध्य स्तंभ में कोशिकाओं और मध्य पंक्ति में कोशिकाओं से मिलकर क्रॉस एक्स को परिभाषित करें । पहले एक्स में प्रत्येक सेल को यह देखने के लिए जांचें कि सेल में अधिकतम स्थानीय है या नहीं । यदि हां, तो ऐसी सेल लौटाएं। अन्यथा, चलो ( i , j ) अधिकतम मान के साथ X में एक सेल हो । के बाद से ( मैं , जे ) नहीं एक स्थानीय अधिकतम है, यह एक पड़ोसी सेल होना आवश्यक है ( मैं ' , जे ' ) बड़े मूल्य के साथ।AXXA(i,j)X(i,j)(i,j)

AXAX(i,j)A

AA

(i,j)AA(i,j)

एल्गोरिथ्म खुद को पुन: पर कॉल करता हैn2×n2A(i,j)

T(n)n×nT(n)=T(n/2)+O(n)T(n)=O(n)

इस प्रकार, हमने निम्नलिखित प्रमेय को सिद्ध किया है:

O(n)n×n

या हमारे पास है?


पहली बार पढ़ने पर, मैंने जो गलती की वह केवल पुनरावृत्ति समाधान था। क्या केवल यही गलती है?
रादु GRIGore

1
पुनरावृत्ति सही है। एल्गोरिथ्म नहीं है!
नील यंग

1
आह, हाँ, मैंने पुनरावृत्ति के साथ एक गूंगा गलती की। मैं इस समस्या को देखता हूं: आप जो अधिकतम साबित करते हैं वह मौजूद है (जरूरी नहीं) जो आप पाते हैं। और जो आप पाते हैं, वह एक्स।
राडू ग्रिगोर

3
(2143300101230001023002222222333233300323000032300)

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