लालची एल्गोरिदम को साबित करने के लिए कैसे सही है


29

मेरे पास एक लालची एल्गोरिथ्म है जो मुझे संदेह है कि सही हो सकता है, लेकिन मुझे यकीन नहीं है। मैं कैसे जांचूं कि यह सही है? लालची एल्गोरिथ्म को सही साबित करने के लिए किन तकनीकों का उपयोग करना है? क्या सामान्य पैटर्न या तकनीकें हैं?

मुझे उम्मीद है कि यह एक संदर्भ प्रश्न बन जाएगा जिसका उपयोग शुरुआती लोगों को इंगित करने के लिए किया जा सकता है; इसलिए इसका व्यापक-से-सामान्य दायरा है। कृपया सामान्य रूप से ध्यान देने के लिए ध्यान दें, कम से कम एक उदाहरण द्वारा सचित्र उत्तर प्रस्तुत किए गए हैं लेकिन फिर भी कई स्थितियों को कवर करते हैं। धन्यवाद!



क्या हम साबित कर सकते हैं कि एक लालची एल्गोरिथ्म सही है एक matroid या एक लालच का उपयोग करके?
zdm

जवाबों:


24

अंततः, आपको शुद्धता के गणितीय प्रमाण की आवश्यकता होगी। मैं उस के लिए कुछ प्रमाण तकनीकों को प्राप्त करूंगा, लेकिन पहले, उस में गोता लगाने से पहले, मैं आपको कुछ समय बचा सकता हूं: इससे पहले कि आप एक प्रमाण की तलाश करें, यादृच्छिक परीक्षण का प्रयास करें।

रैंडम परीक्षण

पहले कदम के रूप में, मैं आपको अपने एल्गोरिथ्म का परीक्षण करने के लिए यादृच्छिक परीक्षण का उपयोग करने की सलाह देता हूं। यह आश्चर्यजनक है कि यह कितना प्रभावी है: मेरे अनुभव में, लालची एल्गोरिदम के लिए, यादृच्छिक परीक्षण अनुचित रूप से प्रभावी लगता है। अपने एल्गोरिथ्म को कोड करने में 5 मिनट खर्च करें, और आप अपने आप को एक या दो घंटे के लिए एक सबूत के साथ आने की कोशिश कर सकते हैं।

मूल विचार सरल है: अपने एल्गोरिथ्म को लागू करें। इसके अलावा, एक संदर्भ एल्गोरिथ्म को लागू करें जिसे आप सही होना जानते हैं (उदाहरण के लिए, वह जो पूरी तरह से सभी संभावनाओं की कोशिश करता है और सबसे अच्छा लगता है)। यह ठीक है यदि आपका संदर्भ एल्गोरिथ्म असमान रूप से अक्षम है, क्योंकि आप इसे केवल छोटी समस्या के उदाहरणों पर ही चलाएंगे। फिर, बेतरतीब ढंग से एक लाख छोटी समस्याएँ उत्पन्न होती हैं, दोनों एल्गोरिदम को प्रत्येक पर चलाते हैं, और जाँचते हैं कि क्या आपका उम्मीदवार एल्गोरिदम हर मामले में सही उत्तर देता है।

सामान्यतया, यदि आपका उम्मीदवार लालची एल्गोरिथ्म गलत है, तो आम तौर पर आपको यादृच्छिक परीक्षण के दौरान यह पता चलता है। यदि यह सभी परीक्षण मामलों पर सही लगता है, तो आपको अगले कदम पर आगे बढ़ना चाहिए: शुद्धता का गणितीय प्रमाण लेकर आना।

शुद्धता के गणितीय प्रमाण

ठीक है, इसलिए हमें यह साबित करने की आवश्यकता है कि हमारा लालची एल्गोरिथ्म सही है: कि यह इष्टतम समाधान का उत्पादन करता है (या, यदि कई इष्टतम समाधान हैं जो समान रूप से अच्छे हैं, कि यह उनमें से एक को आउटपुट करता है)।

मूल सिद्धांत एक सहज ज्ञान युक्त है:

सिद्धांत: यदि आप कभी कोई बुरा विकल्प नहीं बनाते हैं, तो आप ठीक करेंगे।

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

एक अच्छे विकल्प के रूप में क्या गिना जाएगा? यदि कोई एकल इष्टतम समाधान है, तो यह देखना आसान है कि एक अच्छा विकल्प क्या है: कोई भी विकल्प जो इष्टतम समाधान द्वारा किए गए समान है। दूसरे शब्दों में, हम यह साबित करने की कोशिश करेंगे कि लालची एल्गोरिदम के निष्पादन में किसी भी स्तर पर, एल्गोरिथम द्वारा किए गए विकल्पों का क्रम अभी तक इष्टतम समाधान के कुछ उपसर्ग से मेल खाता है। यदि कई समान-अच्छे इष्टतम समाधान हैं, तो एक अच्छा विकल्प वह है जो ऑप्टिमा के कम से कम एक के अनुरूप है। दूसरे शब्दों में, यदि एल्गोरिथ्म का विकल्प अब तक के सबसे इष्टतम समाधानों में से एक के उपसर्ग से मेल खाता है, तो अब तक सब कुछ ठीक है (अभी तक कुछ भी गलत नहीं हुआ है)।

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

एक बहुत ही सामान्य प्रमाण पैटर्न है जिसका हम उपयोग करते हैं। हम एल्गोरिदम की निम्नलिखित संपत्ति को साबित करने के लिए कड़ी मेहनत करेंगे:

दावा: Let एल्गोरिथ्म द्वारा समाधान उत्पादन हो सकता है और इष्टतम समाधान हो। तो से अलग है , तो हम ठीक कर सकते एक और समाधान पाने के लिए से अलग है और सख्ती से बेहतर ।SOSOOOOO

ध्यान दें कि यह क्यों उपयोगी है। यदि दावा सही है, तो यह इस प्रकार है कि एल्गोरिथ्म सही है। यह मूल रूप से विरोधाभास द्वारा एक सबूत है। या तो , के समान है या यह अलग है। यदि यह अलग है, तो हम एक और समाधान पा सकते हैं जो से कड़ाई से बेहतर है - लेकिन यह एक विरोधाभास है, क्योंकि हमने को इष्टतम समाधान के रूप में परिभाषित किया है और इससे बेहतर कोई भी समाधान नहीं हो सकता है। इसलिए हम यह निष्कर्ष निकालने के लिए मजबूर हैं कि से अलग नहीं हो सकता है ; को हमेशा बराबर होना चाहिएSOOOOSOSO, यानी, लालची एल्गोरिथ्म हमेशा सही समाधान का उत्पादन करता है। यदि हम उपरोक्त दावे को साबित कर सकते हैं, तो हमने अपने एल्गोरिथ्म को सही साबित कर दिया है।

ठीक। तो हम दावे को कैसे साबित करते हैं? हम एक समाधान के बारे में सोच वेक्टर के रूप में ( एस 1 , ... , एस एन ) के अनुक्रम के जो मेल खाती n एल्गोरिथ्म द्वारा किए गए विकल्पों, और इसी प्रकार, हम इष्टतम समाधान के बारे में सोच हे वेक्टर के रूप में ( हे 1 , ... , n ) विकल्पों के अनुक्रम के अनुरूप है जो O को ले जाएगा । तो एस से अलग है हे , वहाँ कुछ सूचकांक मौजूद होना चाहिए मैं जहां एस मैंS(S1,,Sn)nO(हे1,...,हेn)हेएसहेमैं ; हम सबसे छोटी इस तरह के पर ध्यान केंद्रित करेंगे मैं । फिर, हम tweak जाएगा हे बदलकर हे में एक छोटा सा मैं वें स्थान मैच के लिए एस मैं , यानी, हम इष्टतम समाधान tweak जाएगा हे बदलकर मैं लालची एल्गोरिथ्म द्वारा चुना एक के लिए वें विकल्प, और उसके बाद हम बताएंगे कि इससे और भी बेहतर समाधान निकलता है। विशेष रूप से, हम O को कुछ इस तरहपरिभाषित करेंगेएसमैंहेमैंमैंहेहेमैंएसमैंहेमैंहे*

O=(O1,O2,,Oi1,Si,Oi+1,Oi+2,,On),

सिवाय इसके कि अक्सर हम संशोधित करना होगा वैश्विक स्थिरता हिस्सा थोड़ा बनाए रखने के लिए। सबूत की रणनीति के हिस्से को परिभाषित करने में कुछ चालाकी शामिल हे * उचित रूप से। फिर, सबूत के मांस किसी भी तरह एल्गोरिथ्म और समस्या के बारे में तथ्यों का उपयोग कर कि दिखाने के लिए किया जाएगा हे * कड़ाई से बेहतर है हेOi+1,Oi+2,,OnOOO; यहीं पर आपको कुछ समस्या-विशिष्ट अंतर्दृष्टि की आवश्यकता होगी। कुछ बिंदु पर, आपको अपनी विशिष्ट समस्या के विवरण में गोता लगाने की आवश्यकता होगी। लेकिन यह आपको लालची एल्गोरिथ्म के लिए शुद्धता के एक विशिष्ट प्रमाण की संरचना की भावना देता है।

एक सरल उदाहरण: अधिकतम राशि के साथ सबसेट

यह एक सरल उदाहरण के माध्यम से विस्तार से काम करके समझना आसान हो सकता है। आइए निम्नलिखित समस्या पर विचार करें:

इनपुट: एक सेट , पूर्णांकों के एक पूर्णांक कश्मीर आउटपुट: एक सेट एस यू आकार की कश्मीर जिसका योग संभव के रूप में बड़ा हैUk
SUk

इस समस्या के लिए एक प्राकृतिक लालची एल्गोरिथ्म है:

  1. सेट S:=
  2. के लिए : i:=1,2,,k
    • चलो में सबसे बड़ी संख्या यू अभी तक उठाया नहीं किया गया है कि (यानी, मैं में वें सबसे बड़ी संख्या यू )। S से x i जोड़ें ।xiUiUxiS

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

दावा: Let इनपुट पर इस एल्गोरिथ्म द्वारा समाधान उत्पादन हो यू , कश्मीर , और हे इष्टतम समाधान। अगर एस हे , तो हम एक और समाधान का निर्माण कर सकते हे * जिसका योग से भी बड़ा है हेSU,kOSOOO

प्रमाण। मान लें , और मैं पहले पुनरावृत्ति का सूचकांक होने दूं जहां x iO हो । (ऐसा एक सूचकांक मेरे पास होना चाहिए, क्योंकि हमने S O मान लिया है और एल्गोरिथ्म की परिभाषा से हमारे पास S = { x 1 , , x k } है ।) चूंकि (अनुमान से) मैं न्यूनतम है, इसलिए हमारे पास होना चाहिए। एक्स 1 , ... , एक्स मैं - 1हे , और विशेष रूप से,SOixiOiSOS={x1,,xk}ix1,,xi1O रूप है हे = { x 1 , x 2 , ... , x मैं - 1 , एक्स ' मैं , एक्स ' मैं + 1 , ... , एक्स ' n } , जहां संख्या एक्स 1 , ... , x मैं - 1 , एक्स ' मैं , ... , एक्स ' nOO={x1,x2,,xi1,xi,xi+1,,xn}x1,,xi1,xi,,xnअवरोही क्रम में सूचीबद्ध हैं। कैसे एल्गोरिथ्म चुनता को देखते हुए , हम देखते हैं कि हम होना आवश्यक है एक्स मैं > एक्स ' सभी के लिए जे मैं । विशेष रूप से, x मैं > एक्स ' मैं । तो, परिभाषित हे = हे { x मैं } { x ' मैं } , यानी, हम प्राप्त हे * हटा कर मैं में वें नंबर हेx1,,xixi>xjjixi>xiO=O{xi}{xi}OiOऔर जोड़ना । अब के तत्वों का योग हे * के तत्वों का योग है हे प्लस x मैं - एक्स ' मैं , और x मैं - एक्स ' मैं > 0 , इसलिए हे * की राशि से सख्ती से बड़ा है हे रों योग '। यह दावा साबित करता है। xiOOxixixixi>0OO

यहाँ अंतर्ज्ञान यह है कि यदि लालची एल्गोरिथ्म कभी भी ऐसा विकल्प बनाता है जो साथ असंगत है , तो हम O को और भी बेहतर साबित कर सकते हैं यदि उस चरण में लालची एल्गोरिथम द्वारा चुने गए तत्व को शामिल करने के लिए इसे संशोधित किया गया था। चूंकि इष्टतम है, इसलिए संभवतः इसे और भी बेहतर बनाने का कोई तरीका नहीं हो सकता (यह एक विरोधाभास होगा), इसलिए केवल शेष संभावना यह है कि हमारी धारणा गलत थी: दूसरे शब्दों में, लालची एल्गोरिथ्म कभी भी एक विकल्प नहीं बनाएगा। हे के साथ असंगत है ।OOOO

इस तर्क को अक्सर विनिमय तर्क या एक्सचेंज लेम्मा कहा जाता है । हम पहले स्थान पर पाया जहां लालची समाधान से इष्टतम समाधान अलग है और हम में से उस तत्व का आदान प्रदान की कल्पना इसी लालची विकल्प (आदान-प्रदान किया के लिए एक्स ' मैं के लिए एक्स मैं )। कुछ विश्लेषण से पता चला कि यह एक्सचेंज केवल इष्टतम समाधान में सुधार कर सकता है - लेकिन परिभाषा के अनुसार, इष्टतम समाधान में सुधार नहीं किया जा सकता है। इसलिए एकमात्र निष्कर्ष यह है कि ऐसी कोई जगह नहीं होनी चाहिए जहां इष्टतम समाधान लालची समाधान से भिन्न हो। यदि आपके पास एक अलग समस्या है, तो अपनी विशिष्ट स्थिति में इस विनिमय सिद्धांत को लागू करने के अवसरों की तलाश करें।Oxixi


यह एक पुराना प्रश्न है, लेकिन मेरे लिए यह Google में पहला परिणाम है। रेखा then we can tweak O to get another solution O∗ that is different from O and strictly better than Oने मुझे भ्रमित किया। यदि कई इष्टतम समाधान हैं, तो यह संभव है S != Oऔर दोनों अभी भी इष्टतम हैं; हम ट्वीक हे कर सकते हैं "और अधिक की तरह" एस (बनाने हे *) और अभी तक हो होने के लिए बस के रूप में अच्छा के रूप में (नहीं strictly better than) ओ
citelao

@citelao, मुझे यह सुनकर खेद है कि इसने आपको भ्रमित किया। काश, मुझे यकीन नहीं है कि इसे और अधिक स्पष्ट रूप से कैसे समझा जाए। हाँ, एक ही मूल्य के साथ कई इष्टतम समाधान हो सकते हैं। वह सही है। आपने जो लिखा है और जो मैंने लिखा है, दोनों मान्य हैं; कोई विरोधाभास नहीं है। अंतर यह है कि आपने जो लिखा है वह लालची एल्गोरिथ्म को सही साबित करने में मदद नहीं करता है; मैंने जो लिखा वह किया। मैं केवल सुझाव दे सकता हूं कि मैंने फिर से क्या लिखा है, और देखें कि क्या आप यह पता लगा सकते हैं कि मैंने जो लिखा है वह उपयोगी है। यदि वह मदद नहीं करता है, तो शायद एक अलग लिखने के लिए मिल जाए। मुझे एहसास हुआ कि यह मुश्किल और उलझन भरा है।
DW।

1
शीघ्र जवाब देने के लिए ध्न्यवाद! मैंने उस बिंदु को याद किया जहां आप एल्गोरिथम को साबित करने पर ध्यान केंद्रित करते हैं यदि केवल है a single, unique optimal solution। चूंकि यह प्रश्न किसी भी लालची एल्गोरिथ्म को सही साबित करने के बारे में है, मैं उन मामलों के लिए एक उत्तर प्रदान करना चाहूंगा जहां कई इष्टतम समाधान मौजूद हो सकते हैं। जब से मैंने इस सब का अध्ययन किया है, तब तक कुछ समय हो गया है, लेकिन यह साबित करने के लिए पर्याप्त नहीं है कि आप प्रत्येक तत्व O_i को किसी भी इष्टतम समाधान O में विनिमय कर सकते हैं जो कि alg से अलग है। समाधान S_i के साथ S और अभी भी एक समाधान O 'है जो O से बदतर नहीं है ?
सिटेलैओ

@citelao, तकनीक उन मामलों पर भी लागू होती है जहां कई इष्टतम समाधान हैं। मैंने उस मामले पर ध्यान केंद्रित करने का सुझाव दिया जहां इष्टतम समाधान केवल अद्वितीय है क्योंकि, जब आप पहली बार इसे देखते हैं, तो यह समझना आसान होता है कि ये सबूत उस सेटिंग में कैसे काम करते हैं। लेकिन एक ही रणनीति काम करती है भले ही कई इष्टतम समाधान हों। मैं यह अध्ययन करने का सुझाव देता हूं, यह सुनिश्चित करते हुए कि आप समझते हैं कि यह कैसे काम करता है जब कोई एकल इष्टतम समाधान होता है, तो इसे सामान्य मामले में लागू किया जाता है। इसके अलावा, मुझे लगता है कि यह आपको लालची एल्गोरिदम के लिए कुछ उदाहरण प्रमाणों का अध्ययन करने में मदद कर सकता है।
DW

अपने बाद के प्रश्न का उत्तर देने के लिए, नहीं, यह पर्याप्त नहीं है। यह साबित नहीं करता है कि एस इष्टतम है। (यदि आप केवल यह मांग करते हैं कि O 'O से अधिक बुरा नहीं है, तो ऐसे मामले हैं जहां S उप-इष्टतम है, फिर भी इस प्रकार का आदान-प्रदान संभव है। इसलिए यह साबित करना कि O को प्राप्त करना संभव है' O doesn से बदतर नहीं है। 's के बारे में कुछ भी साबित न करें कि S इष्टतम है और लालची एल्गोरिथ्म सही नहीं है। मेरा सुझाव है कि उत्तर में वर्णित विधि का थोड़ा और अधिक अध्ययन करें। यह मुश्किल है। विरोधाभास का प्रमाण अक्सर समझने में मुश्किल होता है।)
DW

14

मैं एक उदाहरण के रूप में निम्नलिखित सरल छंटाई एल्गोरिथ्म का उपयोग करूंगा:

repeat:
  if there are adjacent items in the wrong order:
     pick one such pair and swap
  else
     break

शुद्धता साबित करने के लिए मैं दो चरणों का उपयोग करता हूं।

  • पहले मैं दिखाता हूं कि एल्गोरिथ्म हमेशा समाप्त होता है।
  • फिर मैं दिखाता हूं कि यह समाधान जहां इसे समाप्त करता है, वह वही है जो मैं चाहता हूं।

पहले बिंदु के लिए, मैं एक उपयुक्त लागत फ़ंक्शन चुनता हूं जिसके लिए मैं दिखा सकता हूं कि एल्गोरिथ्म इसे हर चरण में सुधारता है।

इस उदाहरण के लिए मैं इनपुट सूची में व्युत्क्रमों की संख्या चुनता हूं। एक सूची में उलटा एक प्रविष्टियों की एक जोड़ी है A [ i ] , A [ j ] ऐसी कि A [ i ] > A [ j ] लेकिन i < j । व्युत्क्रमों की संख्या हमेशा गैर-ऋणात्मक होती है और क्रमबद्ध सूची में 0 व्युत्क्रम होते हैं।AA[i]A[j]A[i]>A[j]i<j

स्पष्ट रूप से दो आसन्न आइटम , A [ i + 1 ] की अदला-बदली करना जो गलत क्रम में हैं, उलटा A [ i ] , A [ i + 1 ] को हटा देता है , लेकिन किसी अन्य व्युत्क्रम को अप्रभावित छोड़ देता है। इसलिए हर पुनरावृत्ति में व्युत्क्रम की संख्या कम हो जाती है।A[i]A[i+1]A[i],A[i+1]

यह साबित करता है कि एल्गोरिथ्म अंततः समाप्त हो गया है।

एक सॉर्ट की गई सूची में व्युत्क्रमों की संख्या 0. है। यदि सभी अच्छी तरह से चले जाते हैं तो एल्गोरिथ्म 0. से नीचे व्युत्क्रमों की संख्या को कम कर देगा। हमें केवल यह दिखाने की आवश्यकता है कि यह एक स्थानीय न्यूनतम में अटक नहीं है।

मैं आमतौर पर विरोधाभास से यह साबित करता हूं। मैं मानता हूं कि एल्गोरिथ्म बंद हो गया, लेकिन समाधान सही नहीं है। उदाहरण में, इसका मतलब है कि सूची अभी तक क्रमबद्ध नहीं है, लेकिन गलत क्रम में आसन्न आइटम नहीं हैं।

यदि सूची को क्रमबद्ध नहीं किया गया है, तो कम से कम दो आइटम होने चाहिए जो सही स्थिति में नहीं हैं। चलो और एक [ जे ] , मैं < j , एक [ मैं ] > एक [ जे ] होना दो ऐसी वस्तुओं सेंट के बीच अंतर मैं और जे न्यूनतम है। चूंकि एल्गोरिथ्म बंद नहीं हुआ था, वे आसन्न नहीं हैं, इसलिए मैं + 1 < j । क्योंकि हमने न्यूनतमता मान ली, [ i ] < [A[i]A[j]i<jA[i]>A[j]iji+1<j और A [ i + 1 ] < A [ j ] , लेकिन फिर A [ i ] < A [ j ] और हमारा विरोधाभास है।A[i]<A[i+1]A[i+1]<A[j]A[i]<A[j]

यह साबित करता है कि एल्गोरिथ्म केवल तभी बंद हो जाता है जब सूची को क्रमबद्ध किया जाता है। और इसलिए हम कर रहे हैं।


बताई गई तकनीकें इतनी सामान्य हैं कि उनके पास लालची एल्गोरिथ्म के बारे में विशेष रूप से कुछ भी नहीं है, इस सवाल का विषय।
Apass.Jack
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.