आपके पहले प्रश्न के लिए, विभाजन और जीत के पीछे अंतर्ज्ञान यह है कि कई समस्याओं में जो काम करना है, वह इनपुट की कुछ संयोजी संपत्ति पर आधारित है जो रैखिक रूप से अधिक पैमाने पर है।
उदाहरण के लिए, अंक की सबसे नज़दीकी जोड़ी में, ब्रूट-फोर्स उत्तर का रनटाइम इस तथ्य से निर्धारित होता है कि आपको सभी ओ (एन) बिंदुओं के संभावित जोड़े को देखना होगा।
यदि आप कुछ ऐसा करते हैं जो चतुर्भुज रूप से बढ़ता है और इसे दो टुकड़ों में काटता है, जिनमें से प्रत्येक आधा आकार पहले होता है, तो प्रत्येक आधे में समस्या को हल करने के लिए प्रारंभिक समय में से एक चौथाई लेता है, इसलिए दोनों में समस्या को हल करना हिस्सों में ब्रूट फोर्स समाधान के लिए लगभग आधे समय की आवश्यकता होती है। इसे चार टुकड़ों में काटकर उस समय का एक चौथाई हिस्सा ले जाएगा, इसे आठ टुकड़ों में आठवें समय में काट दिया जाएगा।
रिकर्सिव संस्करण इस मामले में तेजी से समाप्त होता है क्योंकि प्रत्येक चरण में, हम बहुत कुछ करने से बचते हैं यह सुनिश्चित करके तत्वों के जोड़े से निपटने से काम करें कि बहुत सारे जोड़े नहीं हैं जिन्हें हमें वास्तव में जांचना है। अधिकतर एल्गोरिदम जिनमें विभाजित होता है और समाधान जीतता है, इसी कारण से तेज़ी से समाप्त होता है।
आपके दूसरे प्रश्न के लिए, नहीं, एल्गोरिदम को विभाजित और जीतना ब्रूट-बल एल्गोरिदम से आवश्यक नहीं है। सरणी में अधिकतम मान खोजने की समस्या पर विचार करें। ब्रूट-फोर्स एल्गोरिदम ओ (एन) समय लेता है और ओ (1) स्पेस का उपयोग करता है क्योंकि यह डेटा पर रैखिक स्कैन करता है। विभाजित और जीत एल्गोरिदम यहां दिया गया है:
- यदि सरणी में केवल एक तत्व है, तो यह अधिकतम है।
- अन्यथा:
- आधे में सरणी काट लें।
- प्रत्येक आधे में अधिकतम खोजें।
- इन दो मानों में से अधिकतम गणना करें।
यह रूप में अच्छी तरह समय हे (एन) लेता है, लेकिन ढेर अंतरिक्ष के लिए हे (लॉग एन) स्मृति का उपयोग करता है। यह वास्तव में सरल रैखिक एल्गोरिदम से भी बदतर है।
एक और उदाहरण के रूप में, maximum single-sell profit problem में विभाजित और जीत समाधान है, लेकिन अनुकूलित गतिशील प्रोग्रामिंग समाधान दोनों समय और स्मृति में तेज़ है।
आशा है कि इससे मदद मिलती है!
केक को 16 टुकड़ों में साझा करने के लिए, पहला समाधान केक के 1/16 को काटने की कोशिश करना है और ... मुश्किल। एक और समाधान केक को 2 में कटौती करना है, फिर 2 में फिर से, फिर 1/4 में से प्रत्येक, और 1/8 में से प्रत्येक में कटौती करना है। –