2011-10-25 21 views
12

मैं "लालची" एल्गोरिदम के बारे में tutorial पढ़ रहा हूं लेकिन मुझे वास्तविक "शीर्ष कोडर" समस्याओं को हल करने में कठिनाई हो रही है।"लालची" एल्गोरिदम कैसे खोजा जाए?

यदि मैं जानता हूं कि किसी दिए गए समस्या को "लालची" एल्गोरिदम के साथ हल किया जा सकता है तो समाधान को कोड करना बहुत आसान है। हालांकि अगर मुझे नहीं बताया गया कि यह समस्या "लालची" है तो मैं इसे खोज नहीं सकता।

"लालची" एल्गोरिदम के साथ हल की गई समस्याओं के सामान्य गुण और पैटर्न क्या हैं? क्या मैं उन्हें ज्ञात "लालची" समस्याओं (उदा। एमएसटी) में से एक को कम कर सकता हूं?

उत्तर

10

औपचारिक रूप से, आपको निश्चित रूप से मैट्रॉइड संपत्ति साबित करनी होगी। हालांकि, मुझे लगता है कि टॉपकोडर के मामले में आप तुरंत पता लगाना चाहते हैं कि किसी समस्या से लालच से संपर्क किया जा सकता है या नहीं।

उस स्थिति में, सबसे महत्वपूर्ण बिंदु optimal sub-structure property है। इसके लिए, आपको यह पता लगाने में सक्षम होना चाहिए कि समस्या को उप-समस्याओं में विघटित किया जा सकता है और उनका इष्टतम समाधान पूरी समस्या के इष्टतम समाधान का हिस्सा है।

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

  • क्या मेरे पास कुछ बिंदुओं पर अलग-अलग विकल्पों के बीच कोई विकल्प है?
  • क्या यह विकल्प उप-समस्याओं में परिणाम देता है जिन्हें व्यक्तिगत रूप से हल किया जा सकता है?
  • क्या मैं समग्र समस्या के समाधान को प्राप्त करने के लिए उप-समस्या के समाधान का उपयोग करने में सक्षम हूं?

लोड और अनुभव के भार के साथ (बस यह भी कहना था) इससे आपको लालची समस्याओं को तुरंत ढूंढने में मदद मिलनी चाहिए। बेशक, आप अंततः लालची के रूप में एक समस्या वर्गीकृत कर सकते हैं, जो नहीं है। उस स्थिति में, आप केवल कोड पर काम करने से पहले इसे महसूस करने की उम्मीद कर सकते हैं।

(फिर से, संदर्भ के लिए, मैं एक टोपकोडर संदर्भ में कुछ भी करने के लिए और अधिक यथार्थवादी मान .. और व्यावहारिक परिणाम का मैं दृढ़ता से वास्तव में एक लालची एल्गोरिथ्म चयन करने से पहले matroid संरचना सत्यापित करने के लिए सलाह देते हैं।)

+0

मुझे लगता है कि आप का मतलब है" matroid संपत्ति "और नहीं "मोनोइड प्रॉपर्टी"। क्या आप "इष्टतम सबस्ट्रक्चर" प्रॉपर्टी पर भी अधिक विशिष्ट हो सकते हैं? मैं इस संपत्ति को गतिशील प्रोग्रामिंग से जानता हूं, जहां आप अपनी समस्या को कई उपप्रोबल में विघटित करते हैं और फिर उन्हें पुनः संयोजित करते हैं। हालांकि उदाहरण के लिए न्यूनतम स्पैनिंग पेड़ को देखते हुए मेरे पास है एक कठोर समय यह देखकर कि समानता कैसे है, क्योंकि एल्गोरिदम हमेशा पिछले समाधान में जोड़ता रहता है। – LiKao

+0

आप सही हैं, निश्चित रूप से मेरा मतलब मैट्रॉइड था। यदि आप किनारों को हटाने के रूप में समस्या को देखते हैं तो एमएसटी सबस्टक्चर देखा जा सकता है और शेष ग्राफ को पहले से ही शामिल किए गए कोष्ठकों के सेट पर कनेक्ट करना है। – Frank

5

आपकी समस्या का एक हिस्सा है "लालची समस्याओं" के बारे में सोचकर हो सकता है। लालची एल्गोरिदम और समस्याएं हैं जहां एक लालची एल्गोरिदम है, जो एक इष्टतम समाधान की ओर जाता है। अन्य कठोर समस्याएं हैं जिन्हें लालची एल्गोरिदम द्वारा भी हल किया जा सकता है लेकिन परिणाम आवश्यक नहीं होगा।

उदाहरण के लिए, बिन पैकिंग समस्या के लिए, उनमें से कई लालची एल्गोरिदम हैं जो घातीय एल्गोरिदम की तुलना में बहुत बेहतर जटिलता के साथ हैं, लेकिन आप केवल यह सुनिश्चित कर सकते हैं कि आपको एक निश्चित थ्रेसहोल्ड की तुलना में एक समाधान मिलेगा इष्टतम समाधान के लिए।

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

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

1

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

उदाहरण के लिए, मिस्र के अंशों के लिए लालची एल्गोरिदम छोटे denominators के साथ एक प्रस्तुति खोजने की कोशिश कर रहा है। एक प्रतिनिधि की तलाश करने के बजाय जहां अंतिम denominator छोटा है, यह प्रत्येक कदम छोटे कानूनी den den ominator। आम तौर पर, यह बाद के चरणों में बहुत बड़े denominators की ओर जाता है।

लालची एल्गोरिदम का मुख्य लाभ आम तौर पर विश्लेषण की सादगी है। यह आमतौर पर कार्यक्रम के लिए भी बहुत आसान है। दुर्भाग्य से, यह अक्सर उप इष्टतम है। " --- Ariels (http://www.everything2.com/title/greedy+algorithm?searchy=search)

संबंधित मुद्दे