मैं समस्या के अंतिम समाधान के लिए दावा नहीं करता (या यह सूची संपूर्ण है), लेकिन मैं कुछ संभावित दृष्टिकोणों को रेखांकित करना चाहता हूं जो मन में आते हैं और वे काम क्यों नहीं करेंगे। मैं इस तरह के स्पर्शरेखा मुद्दों को भी संबोधित नहीं करूंगा, जैसे कि यादृच्छिकता के स्रोत के रूप में वर्तमान टाइमस्टैम्प का उपयोग पर्याप्त रूप से "अप्रत्याशित" है और संभाव्यता वितरण के कुछ गुणों को कैसे लागू किया जाए - मैं सिर्फ हार्डकोडिंग का उपयोग करने वाले समाधानों से बचने पर ध्यान केंद्रित करूंगा।
समाधान नहीं: हार्ड-कोडिंग को स्पष्ट रूप से अस्वीकार करें
यह विचार अच्छा नहीं है। यह एक गैर-अवलोकन योग्य आवश्यकता है (जिसका अर्थ है कि आप यह निर्धारित नहीं कर सकते हैं कि क्या यह सिर्फ कार्यक्रम चलाकर संतुष्ट है), जिसे पीपीसीजी पर दृढ़ता से हतोत्साहित किया जाता है और किसी अन्य मंच पर कार्यक्रम को चलाने पर एकमुश्त असंभव हो सकता है, जहां प्रस्तुतियाँ एक में सत्यापित हैं स्वचालित तरीके से। इस तरह की आवश्यकता के साथ समस्या यह है कि आपको "हार्ड-कोडिंग" के लिए एक उद्देश्य परिभाषा ढूंढकर शुरू करना होगा। सामान्य तौर पर, यदि आप यह कोशिश करते हैं, तो आप केवल चीजों को बदतर बनाने जा रहे हैं।
हार्ड-कोडिंग को प्रभावी बनाएं
यदि आप इसे पूरी तरह से अस्वीकार नहीं कर सकते हैं, लेकिन आप नहीं चाहते कि लोग इसका उपयोग करें, तो आप इस चुनौती को डिजाइन करने का प्रयास कर सकते हैं कि हार्ड-कोडिंग केवल एक प्रतिस्पर्धी दृष्टिकोण नहीं है। यह संभव है अगर उत्पन्न की जाने वाली वस्तुएं पर्याप्त रूप से बड़ी और अचूक हैं, तो कोड में एक उदाहरण डालने से एक एल्गोरिदम लिखने की तुलना में बहुत अधिक बाइट्स की आवश्यकता होगी जो कि वैध समाधानों को यादृच्छिक रूप से उत्पन्न करता है। आपके विशिष्ट उदाहरण में, यह निश्चित रूप से ऐसा नहीं है, क्योंकि पहचान मैट्रीक मान्य हैं और आम तौर पर उत्पन्न करना आसान है, लेकिन अन्य समस्याओं के लिए, यह मामला नहीं हो सकता है। यदि लक्ष्य ऑब्जेक्ट पर्याप्त रूप से अनियमित हैं, तो बस उन्हें बड़े आकार का होना चाहिए, जो संभवतः एक वास्तविक एल्गोरिथ्म की बाइट गिनती को प्रभावित नहीं करेगा, लेकिन हार्ड-कोडेड भाग को उड़ा देगा।
आउटपुट को परिमाणित करें
अक्सर, ये समस्याएं एक या अधिक प्राकृतिक पैरामीटर के साथ आती हैं, जैसे आपके उदाहरण में मैट्रिक्स का आकार। यदि हां, तो उस पैरामीटर को बनाना कठिन-कोडिंग को असंभव या कम से कम अव्यावहारिक बनाने के लिए पर्याप्त हो सकता है। कुछ मामलों में, किसी दिए गए पैरामीटर मान के लिए एक विशिष्ट समाधान को हार्ड-कोड करना आसान हो सकता है जो मैन्युअल रूप से या व्यापक खोज के माध्यम से पाया गया है, लेकिन शायद सामान्य रूप से इन समाधानों के उदाहरण के लिए कोई सरल बंद फॉर्म नहीं है, इसलिए यह नहीं है आसानी से मनमाने आदानों के लिए एक डिफ़ॉल्ट मान उत्पन्न करना संभव है। फिर, आपके द्वारा उल्लेखित उदाहरण के लिए यह मामला नहीं है, क्योंकि पहचान मैट्रिक्स किसी भी आकार पर काम करता है, लेकिन इसके लिए एक इष्टतम समाधान है इस संबंधित समस्या केआमतौर पर अत्यधिक अनियमित होता है, इसलिए सक्रिय रूप से मान्य मानों की खोज किए बिना डिफ़ॉल्ट मान रखना संभव नहीं है। आप डिफ़ॉल्ट मान के लिए ब्रूट फ़ोर्स खोज से बचने के लिए इसे समय-सीमा के साथ जोड़ सकते हैं।
रखो कुछ संभावना वितरण पर प्रतिबंध
यदि आप पूरी तरह से अप्रतिबंधित संभावना वितरण को छोड़ने के लिए तैयार हैं , तो आप इस पर कुछ अड़चनें डाल सकते हैं, जो अभी भी उत्तरदाताओं को उनके वितरण को चुनने में बहुत अधिक स्वतंत्रता देते हैं, लेकिन जो कठिन-कोडिंग को कठिन या असंभव बनाते हैं:
- सबसे सरल बाधा जो मन में आती है, वह यह है कि किसी भी संभावित आउटपुट के लिए न्यूनतम और अधिकतम संभाव्यता के बीच अंतर को एक निश्चित सीमा से कम होना चाहिए। एक हार्ड-कोडित दृष्टिकोण की संभावना लगभग सभी आउटपुट के लिए लगभग-शून्य संभावनाएं और डिफ़ॉल्ट मान के लिए 1 के करीब संभावना होगी। यदि आपको अधिकतम अंतर 0.1 से नीचे होने की आवश्यकता है, तो दृष्टिकोण को एक विकल्प बनाने के लिए 10 (यादृच्छिक रूप से चुने गए) डिफ़ॉल्ट मानों की आवश्यकता होगी। इसी तरह आपको प्रत्येक संभावित आउटपुट के लिए न्यूनतम संभावना की भी आवश्यकता हो सकती है, जैसे 1 / (2 * N *), जहां N संभव आउटपुट की संख्या है।
- वैकल्पिक रूप से, आप की आवश्यकता हो सकती वितरण में कोई (संभावना) अंतराल देखते हैं कि, आकार का कोई अंतराल नहीं है ताकि δ (आपके द्वारा चुने गए) ऐसा है कि दोनों उच्च और निम्न संभावनाओं मौजूद हैं। इसका मतलब यह है कि संभावना की दृष्टि से कोई भी आउटलेयर नहीं हो सकता है, जो कि हार्ड-कोडिंग दृष्टिकोण द्वारा उत्पन्न होता है।
इन दृष्टिकोणों के साथ मुख्य मुद्दा यह है कि वे कारण के लिए बहुत कठिन हैं, उत्तरों की शुद्धता को साबित करना मुश्किल है, और बड़े पैमाने पर आउटपुट रिक्त स्थान के लिए सही ढंग से सत्यापित करना असंभव हो सकता है। फिर भी, वे कार्यक्रम के लिए एक मुख्य रूप से अवलोकन योग्य आवश्यकता प्रदान करते हैं जो हार्डकोडिंग को असंभव बना सकता है।
इन दृष्टिकोणों को भी एक समय सीमा की आवश्यकता हो सकती है, क्योंकि गैर-डिफ़ॉल्ट मानों की संभावना बढ़ाने का एक तरीका डिफ़ॉल्ट मान पर वापस गिरने से पहले कई बार यादृच्छिक फू को खोजने का प्रयास करना होगा।