अंततः, आपको शुद्धता के गणितीय प्रमाण की आवश्यकता होगी। मैं उस के लिए कुछ प्रमाण तकनीकों को प्राप्त करूंगा, लेकिन पहले, उस में गोता लगाने से पहले, मैं आपको कुछ समय बचा सकता हूं: इससे पहले कि आप एक प्रमाण की तलाश करें, यादृच्छिक परीक्षण का प्रयास करें।
रैंडम परीक्षण
पहले कदम के रूप में, मैं आपको अपने एल्गोरिथ्म का परीक्षण करने के लिए यादृच्छिक परीक्षण का उपयोग करने की सलाह देता हूं। यह आश्चर्यजनक है कि यह कितना प्रभावी है: मेरे अनुभव में, लालची एल्गोरिदम के लिए, यादृच्छिक परीक्षण अनुचित रूप से प्रभावी लगता है। अपने एल्गोरिथ्म को कोड करने में 5 मिनट खर्च करें, और आप अपने आप को एक या दो घंटे के लिए एक सबूत के साथ आने की कोशिश कर सकते हैं।
मूल विचार सरल है: अपने एल्गोरिथ्म को लागू करें। इसके अलावा, एक संदर्भ एल्गोरिथ्म को लागू करें जिसे आप सही होना जानते हैं (उदाहरण के लिए, वह जो पूरी तरह से सभी संभावनाओं की कोशिश करता है और सबसे अच्छा लगता है)। यह ठीक है यदि आपका संदर्भ एल्गोरिथ्म असमान रूप से अक्षम है, क्योंकि आप इसे केवल छोटी समस्या के उदाहरणों पर ही चलाएंगे। फिर, बेतरतीब ढंग से एक लाख छोटी समस्याएँ उत्पन्न होती हैं, दोनों एल्गोरिदम को प्रत्येक पर चलाते हैं, और जाँचते हैं कि क्या आपका उम्मीदवार एल्गोरिदम हर मामले में सही उत्तर देता है।
सामान्यतया, यदि आपका उम्मीदवार लालची एल्गोरिथ्म गलत है, तो आम तौर पर आपको यादृच्छिक परीक्षण के दौरान यह पता चलता है। यदि यह सभी परीक्षण मामलों पर सही लगता है, तो आपको अगले कदम पर आगे बढ़ना चाहिए: शुद्धता का गणितीय प्रमाण लेकर आना।
शुद्धता के गणितीय प्रमाण
ठीक है, इसलिए हमें यह साबित करने की आवश्यकता है कि हमारा लालची एल्गोरिथ्म सही है: कि यह इष्टतम समाधान का उत्पादन करता है (या, यदि कई इष्टतम समाधान हैं जो समान रूप से अच्छे हैं, कि यह उनमें से एक को आउटपुट करता है)।
मूल सिद्धांत एक सहज ज्ञान युक्त है:
सिद्धांत: यदि आप कभी कोई बुरा विकल्प नहीं बनाते हैं, तो आप ठीक करेंगे।
लालची एल्गोरिदम में आमतौर पर विकल्पों का एक क्रम शामिल होता है। मूल प्रमाण रणनीति यह है कि हम यह साबित करने की कोशिश करने जा रहे हैं कि एल्गोरिथ्म कभी खराब विकल्प नहीं बनाता है। लालची एल्गोरिदम पीछे नहीं हट सकते - एक बार जब वे एक विकल्प बनाते हैं, तो वे प्रतिबद्ध होते हैं और उस विकल्प को कभी भी पूर्ववत नहीं करेंगे - इसलिए यह महत्वपूर्ण है कि वे कभी भी एक बुरा विकल्प नहीं बनाते हैं।
एक अच्छे विकल्प के रूप में क्या गिना जाएगा? यदि कोई एकल इष्टतम समाधान है, तो यह देखना आसान है कि एक अच्छा विकल्प क्या है: कोई भी विकल्प जो इष्टतम समाधान द्वारा किए गए समान है। दूसरे शब्दों में, हम यह साबित करने की कोशिश करेंगे कि लालची एल्गोरिदम के निष्पादन में किसी भी स्तर पर, एल्गोरिथम द्वारा किए गए विकल्पों का क्रम अभी तक इष्टतम समाधान के कुछ उपसर्ग से मेल खाता है। यदि कई समान-अच्छे इष्टतम समाधान हैं, तो एक अच्छा विकल्प वह है जो ऑप्टिमा के कम से कम एक के अनुरूप है। दूसरे शब्दों में, यदि एल्गोरिथ्म का विकल्प अब तक के सबसे इष्टतम समाधानों में से एक के उपसर्ग से मेल खाता है, तो अब तक सब कुछ ठीक है (अभी तक कुछ भी गलत नहीं हुआ है)।
जीवन को सरल बनाने और विकर्षणों को खत्म करने के लिए, आइए उस मामले पर ध्यान दें जहां कोई संबंध नहीं हैं: एक एकल, अद्वितीय इष्टतम समाधान है। सभी मशीनरी उस मामले को ले जाएंगी जहां बिना किसी मूलभूत परिवर्तन के कई समान रूप से अच्छे ऑप्टिमा हो सकते हैं, लेकिन आपको तकनीकी विवरणों के बारे में थोड़ा अधिक सावधान रहना होगा। उन विवरणों की उपेक्षा करके और उस मामले पर ध्यान केंद्रित करके शुरू करें जहां इष्टतम समाधान अद्वितीय है; जो आपको आवश्यक है उस पर ध्यान केंद्रित करने में मदद करेगा।
एक बहुत ही सामान्य प्रमाण पैटर्न है जिसका हम उपयोग करते हैं। हम एल्गोरिदम की निम्नलिखित संपत्ति को साबित करने के लिए कड़ी मेहनत करेंगे:
दावा: Let एल्गोरिथ्म द्वारा समाधान उत्पादन हो सकता है और इष्टतम समाधान हो। तो से अलग है , तो हम ठीक कर सकते एक और समाधान पाने के लिए से अलग है और सख्ती से बेहतर ।SOSOOO∗OO
ध्यान दें कि यह क्यों उपयोगी है। यदि दावा सही है, तो यह इस प्रकार है कि एल्गोरिथ्म सही है। यह मूल रूप से विरोधाभास द्वारा एक सबूत है। या तो , के समान है या यह अलग है। यदि यह अलग है, तो हम एक और समाधान पा सकते हैं जो से कड़ाई से बेहतर है - लेकिन यह एक विरोधाभास है, क्योंकि हमने को इष्टतम समाधान के रूप में परिभाषित किया है और इससे बेहतर कोई भी समाधान नहीं हो सकता है। इसलिए हम यह निष्कर्ष निकालने के लिए मजबूर हैं कि से अलग नहीं हो सकता है ; को हमेशा बराबर होना चाहिएSOO∗OOSOSO, यानी, लालची एल्गोरिथ्म हमेशा सही समाधान का उत्पादन करता है। यदि हम उपरोक्त दावे को साबित कर सकते हैं, तो हमने अपने एल्गोरिथ्म को सही साबित कर दिया है।
ठीक। तो हम दावे को कैसे साबित करते हैं? हम एक समाधान के बारे में सोच वेक्टर के रूप में ( एस 1 , ... , एस एन ) के अनुक्रम के जो मेल खाती n एल्गोरिथ्म द्वारा किए गए विकल्पों, और इसी प्रकार, हम इष्टतम समाधान के बारे में सोच हे वेक्टर के रूप में ( हे 1 , ... , ओ n ) विकल्पों के अनुक्रम के अनुरूप है जो O को ले जाएगा । तो एस से अलग है हे , वहाँ कुछ सूचकांक मौजूद होना चाहिए मैं जहां एस मैं ≠S(S1,…,Sn)nO( ओ)1, ... , हेn)हेएसहेमैं ; हम सबसे छोटी इस तरह के पर ध्यान केंद्रित करेंगे मैं । फिर, हम tweak जाएगा हे बदलकर हे में एक छोटा सा मैं वें स्थान मैच के लिए एस मैं , यानी, हम इष्टतम समाधान tweak जाएगा हे बदलकर मैं लालची एल्गोरिथ्म द्वारा चुना एक के लिए वें विकल्प, और उसके बाद हम बताएंगे कि इससे और भी बेहतर समाधान निकलता है। विशेष रूप से, हम O ∗ को कुछ इस तरहपरिभाषित करेंगेएसमैं≠ ओमैंमैंहेहेमैंएसमैंहेमैंहे*
हे*= ( ओ)1,O2,…,Oi−1,Si,Oi+1,Oi+2,…,On),
सिवाय इसके कि अक्सर हम संशोधित करना होगा वैश्विक स्थिरता हिस्सा थोड़ा बनाए रखने के लिए। सबूत की रणनीति के हिस्से को परिभाषित करने में कुछ चालाकी शामिल हे * उचित रूप से। फिर, सबूत के मांस किसी भी तरह एल्गोरिथ्म और समस्या के बारे में तथ्यों का उपयोग कर कि दिखाने के लिए किया जाएगा हे * कड़ाई से बेहतर है हेOi+1,Oi+2,…,OnO∗O∗O; यहीं पर आपको कुछ समस्या-विशिष्ट अंतर्दृष्टि की आवश्यकता होगी। कुछ बिंदु पर, आपको अपनी विशिष्ट समस्या के विवरण में गोता लगाने की आवश्यकता होगी। लेकिन यह आपको लालची एल्गोरिथ्म के लिए शुद्धता के एक विशिष्ट प्रमाण की संरचना की भावना देता है।
एक सरल उदाहरण: अधिकतम राशि के साथ सबसेट
यह एक सरल उदाहरण के माध्यम से विस्तार से काम करके समझना आसान हो सकता है। आइए निम्नलिखित समस्या पर विचार करें:
इनपुट: एक सेट , पूर्णांकों के एक पूर्णांक कश्मीर आउटपुट: एक सेट एस ⊆ यू आकार की कश्मीर जिसका योग संभव के रूप में बड़ा हैUk
S⊆Uk
इस समस्या के लिए एक प्राकृतिक लालची एल्गोरिथ्म है:
- सेट ।S:=∅
- के लिए :
i:=1,2,…,k
- चलो में सबसे बड़ी संख्या यू अभी तक उठाया नहीं किया गया है कि (यानी, मैं में वें सबसे बड़ी संख्या यू )। S से x i जोड़ें ।xiUiUxiS
यादृच्छिक परीक्षण से पता चलता है कि यह हमेशा इष्टतम समाधान देता है, तो आइए औपचारिक रूप से साबित करें कि यह एल्गोरिथ्म सही है। ध्यान दें कि इष्टतम समाधान अद्वितीय है, इसलिए हमें संबंधों के बारे में चिंता करने की आवश्यकता नहीं होगी। आइए ऊपर उल्लिखित दावे को साबित करें:
दावा: Let इनपुट पर इस एल्गोरिथ्म द्वारा समाधान उत्पादन हो यू , कश्मीर , और हे इष्टतम समाधान। अगर एस ≠ हे , तो हम एक और समाधान का निर्माण कर सकते हे * जिसका योग से भी बड़ा है हे ।SU,kOS≠OO∗O
प्रमाण। मान लें , और मैं पहले पुनरावृत्ति का सूचकांक होने दूं जहां x i । O हो । (ऐसा एक सूचकांक मेरे पास होना चाहिए, क्योंकि हमने S ≠ O मान लिया है और एल्गोरिथ्म की परिभाषा से हमारे पास S = { x 1 , … , x k } है ।) चूंकि (अनुमान से) मैं न्यूनतम है, इसलिए हमारे पास होना चाहिए। एक्स 1 , ... , एक्स मैं - 1 ∈ हे , और विशेष रूप से,S≠Oixi∉OiS≠OS={x1,…,xk}ix1,…,xi−1∈O रूप है हे = { x 1 , x 2 , ... , x मैं - 1 , एक्स ' मैं , एक्स ' मैं + 1 , ... , एक्स ' n } , जहां संख्या एक्स 1 , ... , x मैं - 1 , एक्स ' मैं , ... , एक्स ' nOO={x1,x2,…,xi−1,x′i,x′i+1,…,x′n}x1,…,xi−1,x′i,…,x′nअवरोही क्रम में सूचीबद्ध हैं। कैसे एल्गोरिथ्म चुनता को देखते हुए , हम देखते हैं कि हम होना आवश्यक है एक्स मैं > एक्स ' ञ सभी के लिए जे ≥ मैं । विशेष रूप से, x मैं > एक्स ' मैं । तो, परिभाषित हे = हे ∪ { x मैं } ∖ { x ' मैं } , यानी, हम प्राप्त हे * हटा कर मैं में वें नंबर हेx1,…,xixi>x′jj≥ixi>x′iO=O∪{xi}∖{x′i}O∗iOऔर जोड़ना । अब के तत्वों का योग हे * के तत्वों का योग है हे प्लस x मैं - एक्स ' मैं , और x मैं - एक्स ' मैं > 0 , इसलिए हे * की राशि से सख्ती से बड़ा है हे रों योग '। यह दावा साबित करता है। ◼xiO∗Oxi−x′ixi−x′i>0O∗O■
यहाँ अंतर्ज्ञान यह है कि यदि लालची एल्गोरिथ्म कभी भी ऐसा विकल्प बनाता है जो साथ असंगत है , तो हम O को और भी बेहतर साबित कर सकते हैं यदि उस चरण में लालची एल्गोरिथम द्वारा चुने गए तत्व को शामिल करने के लिए इसे संशोधित किया गया था। चूंकि ओ इष्टतम है, इसलिए संभवतः इसे और भी बेहतर बनाने का कोई तरीका नहीं हो सकता (यह एक विरोधाभास होगा), इसलिए केवल शेष संभावना यह है कि हमारी धारणा गलत थी: दूसरे शब्दों में, लालची एल्गोरिथ्म कभी भी एक विकल्प नहीं बनाएगा। हे के साथ असंगत है ।OOOO
इस तर्क को अक्सर विनिमय तर्क या एक्सचेंज लेम्मा कहा जाता है । हम पहले स्थान पर पाया जहां लालची समाधान से इष्टतम समाधान अलग है और हम में से उस तत्व का आदान प्रदान की कल्पना इसी लालची विकल्प (आदान-प्रदान किया के लिए एक्स ' मैं के लिए एक्स मैं )। कुछ विश्लेषण से पता चला कि यह एक्सचेंज केवल इष्टतम समाधान में सुधार कर सकता है - लेकिन परिभाषा के अनुसार, इष्टतम समाधान में सुधार नहीं किया जा सकता है। इसलिए एकमात्र निष्कर्ष यह है कि ऐसी कोई जगह नहीं होनी चाहिए जहां इष्टतम समाधान लालची समाधान से भिन्न हो। यदि आपके पास एक अलग समस्या है, तो अपनी विशिष्ट स्थिति में इस विनिमय सिद्धांत को लागू करने के अवसरों की तलाश करें।Ox′ixi