आपने एक फ़ंक्शन तैयार किया है जो किसी सरणी से यादृच्छिक रूप से आइटम का चयन करता है, यह सुनिश्चित करता है कि हाल के चयन दोहराए नहीं जाते हैं। जबकि वर्तमान समाधान प्रभावी ढंग से काम करता है, आपको इसकी दक्षता के बारे में चिंता है और क्या इससे अत्यधिक लूपिंग हो सकती है। आइए एक अधिक कुशल दृष्टिकोण का पता लगाएं।
1. पुनरावर्तन संबंधी विचार
हां, आपके चयननाम() फ़ंक्शन को पुनरावर्ती माना जा सकता है क्योंकि यह स्वयं को तब तक कॉल करता है जब तक कि इसे एक अद्वितीय नाम नहीं मिल जाता। रिकर्सन कुछ समस्याओं के लिए उपयोगी हो सकता है, लेकिन स्टैक के उपयोग और अत्यधिक गहराई की संभावना के प्रति सचेत रहना महत्वपूर्ण है।
2. एक कुशल समाधान
दक्षता संबंधी चिंताओं को दूर करने के लिए, हम एक अलग रणनीति अपना सकते हैं। एक अद्वितीय नाम मिलने तक रिकर्सन और लूपिंग पर भरोसा करने के बजाय, हम मूल सरणी की एक प्रति बना सकते हैं और सभी आइटम चयनित होने तक कॉपी से यादृच्छिक रूप से आइटम का चयन कर सकते हैं। एक बार जब सभी आइटम समाप्त हो जाते हैं, तो हम कॉपी को उसकी मूल स्थिति में रीसेट कर देते हैं। var प्रतिलिपि = array.slice(0); वापसी समारोह() { अगर (कॉपी.लेंथ "बार" कंसोल.लॉग(चयनकर्ता()); // => "फू" कंसोल.लॉग(चयनकर्ता()); // => "गह" कंसोल.लॉग(चयनकर्ता()); // => "फू" - केवल तभी दोहराया जाता है जब सभी आइटम समाप्त हो जाते हैं।
यह दृष्टिकोण मूल सरणी की एक उथली प्रतिलिपि बनाने के लिए जावास्क्रिप्ट की सरणी स्लाइस() विधि का उपयोग करता है। इसके बाद यह बार-बार कॉपी से यादृच्छिक वस्तुओं का चयन करता है और उन्हें कॉपी से हटा देता है, प्रभावी ढंग से बिना दोहराए यादृच्छिक चयन की नकल करता है जब तक कि सभी आइटम समाप्त नहीं हो जाते। एक बार जब सभी आइटम चयनित हो जाते हैं, तो कॉपी रीसेट हो जाती है, जिससे यादृच्छिक चयन फिर से शुरू हो जाता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3