मैं कैसे करते हो यह इतना लेकिन मैं जांच कर सकते हैं कि अगर मूल्य कभी, सरणी में पहले से ही है और यदि ऐसा है तो एक नया मान
उत्पन्न आप ऐसा नहीं करते हैं, क्योंकि कि एक बहुत बुरा विचार है।
इसे समझने के लिए क्यों यह एक भयानक विचार है, एक ही समस्या का एक और संस्करण पर विचार करें: निम्नलिखित प्रक्रिया द्वारा एक यादृच्छिक क्रम में एक लाख संख्या क्रमबद्ध करें:
- एक लाख एक से एक नंबर का चयन करें।
- यह देखने के लिए जांचें कि यह पहले से ही सूची में है या नहीं।
- यदि यह है, तो चरण 1
- पर वापस जाएं अन्यथा, सूची में संख्या जोड़ें।
- क्या इस सूची में दस लाख आइटम हैं? यदि हां, तो आप कर चुके हैं। यदि नहीं, तो चरण 1 पर वापस जाएं।
स्पष्ट रूप से यह काम करता है। क्या यह एक अच्छा विचार है? मान लीजिए कि आप लगभग पूरा कर चुके हैं। इस सूची में 99 99 99 आइटम हैं। एकमात्र गायब वस्तु 857313 है। आप क्या करते हैं? आप एक यादृच्छिक संख्या चुनते हैं, कहें, 12. अब आप सूची में 99 99 99 आइटम देख सकते हैं कि उनमें से कोई भी 12 है या नहीं। 12 शायद आपके द्वारा चुने गए पहले नंबरों में से एक हो सकता है, इसलिए इसे ढूंढना तेज़ हो सकता है। या यह आखिरी में से एक हो सकता है, इसलिए इसमें काफी समय लगेगा। औसतन 500000 चेक लेते हैं यह देखने के लिए कि सूची में 12 है या नहीं। और ऐसा इसलिए है, क्योंकि सूची में केवल एक नंबर गुम है।
12 काम नहीं किया। शुरुआत में वापस जाओ। 53259 कहें, एक और यादृच्छिक संख्या चुनें। क्या यह सूची में है? एक और आधे मिलियन चेक।
कर रखें कि जब तक आप 857,313 उत्पन्न करते हैं जो एक हर दस लाख की कोशिश करता होता है।
तो औसतन, सूची में अंतिम आइटम डालने के लिए 500000 x 1000000 = पांच सौ अरब तुलनाएं होती हैं। यह और अधिक रास्ता ले सकता है। इसमें कई ट्रिलियन तुलना हो सकती है। या आप भाग्यशाली हो सकते हैं और यह एक लेता है। लेकिन औसतन, आधा ट्रिलियन तुलना।
यह एक भयानक एक सूची का यादृच्छिक क्रम बनाने के लिए है।
सूची के यादृच्छिक क्रम बनाने के दो अच्छे तरीके हैं।
(1) एक उपकरण बनाएं जो ऑर्डरिंग फ़ंक्शन दिए गए सूची को सॉर्ट कर सकता है। स्थिर ऑर्डर करना जो यादृच्छिक बीज पर आधारित है प्रदान करें।
ध्यान दें कि आपको एक ऐसी विधि बनाकर यादृच्छिक क्रम उत्पन्न करना चाहिए जो "बी से बड़ा है?" यह एक अस्थिर आदेश है; कई प्रकार के एल्गोरिदम एक स्थिर सॉर्ट ऑर्डरिंग पर अनुमानित होते हैं और अस्थिर सॉर्ट ऑर्डर देने पर अनंत लूप में जाते हैं या अन्य खराब व्यवहार करते हैं।
यह एल्गोरिदम ओ (एन एलजी एन) है और अच्छी संपत्ति है कि मानक भागों से लिखना बहुत आसान है, क्योंकि अन्य उत्तरों इंगित करते हैं। यह सामान्य कार्यान्वयन में छोटी सूचियों के लिए भी बेहद तेज़ है।
(2) यादृच्छिक रूप से को स्रोत सूची से इंडेक्स द्वारा एक आइटम चुनें, इसे स्रोत सूची से हटाकर, और गंतव्य सूची पर डालें।
उत्तरार्द्ध को Knuth Shuffle या फिशर-येट्स शफल के रूप में जाना जाता है, और यह एक बहुत तेज़ एल्गोरिदम है। आप इसे "जगह में" कर सकते हैं, एक मौजूदा सरणी को शफल क्रम में बदल सकते हैं, या एक नई सूची बनाकर कर सकते हैं। इसमें अच्छी संपत्ति भी है जिसे आप "प्ले के लिए भुगतान" कर सकते हैं, जिसकी आपको आवश्यकता है, सूची के "शीर्ष" को घुमाएं। यदि आपके पास शफल करने के लिए लाखों आइटम हैं लेकिन आपको केवल पहले सौ की आवश्यकता है, तो आप पहले सौ के लिए सॉर्ट ऑर्डर कर सकते हैं और इसे अच्छा कह सकते हैं।
होमवर्क की तरह बदबू आती है, विशेष रूप से असाइनमेंट का हिस्सा होने वाले कंकाल के साथ (मान्य, अच्छे) सुझावों के नीचे टिप्पणियों के साथ: "इस कोड से शुरू करें" –
हाँ यह वास्तव में होमवर्क का हिस्सा नहीं है इस बारे में झूठ बोलने के लिए कि मैं सिर्फ एक हिस्से में फंस गया हूं और मुझे इतनी संकेत/फीडबैक चाहिए कि बुरा नहीं है मुझे लगता है कि – ShallowHeart
उचित कोड इंडेंटेशन और बेहतर परिवर्तनीय नाम लोगों को आपके कोड को समझने में मदद करेंगे और इसके परिणामस्वरूप आपको बेहतर समाधान मिलेंगे। – CesarGon