2011-05-28 23 views
8

जब मुझे इष्टतम सबस्ट्रक्चर के साथ कोई समस्या हो और कोई उपप्रोबलम सबबप्रप्रोबम्स साझा नहीं करता है तो मैं इसे विभाजित करने के लिए एक विभाजन का उपयोग कर सकता हूं और एल्गोरिदम जीत सकता हूं?गतिशील प्रोग्रामिंग और लालची एल्गोरिदम विभाजित करें और जीतें!

लेकिन जब सबप्रोबैम subsubproblems (subproblems ओवरलैपिंग) साझा करता है तो मैं समस्या को हल करने के लिए गतिशील प्रोग्रामिंग का उपयोग कर सकता हूं?

क्या यह सही है?

और गतिशील प्रोग्रामिंग के समान लालची एल्गोरिदम कैसा है?

उत्तर

7

जब मैं इष्टतम substructur और कोई subproblem शेयरों subsubproblems साथ एक समस्या है तो मैं एक विभाजन का उपयोग करें और इसे हल करने एल्गोरिथ्म को जीत सकते हैं?

हां, जब तक आप प्रत्येक प्रकार के सबप्रोबलेम के लिए इष्टतम एल्गोरिदम पा सकते हैं।

लेकिन subproblem शेयरों subsubproblems ( subproblems अतिव्यापी) तो मैं समस्या को हल करने गतिशील प्रोग्रामिंग का उपयोग कर सकते है?

क्या यह सही है?

हां। गतिशील प्रोग्रामिंग मूल रूप से Divide & परिवार के एक विशेष मामले है एल्गोरिदम जीतें, जहां सभी सबप्रोबलेम समान हैं।

और गतिशील प्रोग्रामिंग के लिए लालची एल्गोरिदम समान कैसा है?

वे अलग हैं।
गतिशील प्रोग्रामिंग आपको इष्टतम समाधान देता है।
एक लालची एल्गोरिदम आमतौर पर थोड़ी सी मात्रा में एक अच्छा/निष्पक्ष समाधान देता है लेकिन यह इष्टतम तक पहुंचने का आश्वासन नहीं देता है।

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

संपादित करें:

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

+2

कुछ लालची एल्गोरिदम इष्टतम हैं। डिजस्ट्रा के सबसे छोटे पथ एल्गोरिदम या अधिकतम सबएरे योग समस्या पर विचार करें। लालची एल्गोरिदम अलग-अलग संभावनाओं पर शाखा नहीं लेते हैं, जहां गतिशील प्रोग्रामिंग एल्गोरिदम विभिन्न संभावित इष्टतम विकल्पों के लिए शाखा में होते हैं, और फिर यह निर्धारित करते हैं कि कौन से विकल्प सबसे अच्छे थे। –

+0

@rrenaud: सही, संपादित;) – digEmAll

+0

क्या आप कृपया व्याख्या कर सकते हैं _ "गतिशील प्रोग्रामिंग मूल रूप से विभाजन और परिवार एल्गोरिदम के परिवार का एक विशेष मामला है, जहां सभी उपप्रवाह समान हैं।" _ मुझे यह समझ में नहीं आता है। subproblems का मतलब है? – saplingPro

-2

लालची दृष्टिकोण शीर्ष-नीचे फैशन में काम करता है लेकिन नीचे-अप फैशन में गतिशील कार्य करता है। तो लालची दृष्टिकोण एक समाधान दे सकता है जो इष्टतम नहीं है, यह उप इष्टतम (इष्टतम के करीब) हो सकता है यदि हम गतिशील दृष्टिकोण का उपयोग करते हैं तो हमें पिछले सभी समाधानों को रखना होगा, लेकिन लालची में हम प्रत्येक पल में सबसे अच्छा विकल्प लेते हैं पिछले एक के बारे में बिना किसी अंतर के ... यही कारण है कि हम एक समाधान प्राप्त कर सकते हैं जो इष्टतम नहीं है।

http://en.wikipedia.org/wiki/File:Greedy-search-path-example.gif

+4

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

-2

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

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