शफल () बनाम random_shuffle () सी ++ में

Saphala Banama Random Shuffle Si Mem



C++ में, मानक पुस्तकालय दो कार्य प्रदान करता है, फेरबदल () और रैंडम_शफल () जिनका उपयोग कंटेनर के तत्वों को पुनर्व्यवस्थित करने के लिए किया जाता है। यद्यपि दोनों कार्य एक ही उद्देश्य की सेवा करते हैं, वे उनके कार्यान्वयन में भिन्न होते हैं और जिस तरह से वे यादृच्छिक संख्या उत्पन्न करते हैं।

इस लेख से, आप इन दोनों कार्यों के बीच के अंतरों को जानेंगे और समझेंगे कि वे कैसे काम करते हैं।

शफल() सी ++ में

फेरबदल () फ़ंक्शन एक अंतर्निहित C ++ फ़ंक्शन है जिसका उपयोग किसी दिए गए श्रेणी में तत्वों को बेतरतीब ढंग से फेरबदल या पुनर्व्यवस्थित करने के लिए किया जाता है। समारोह में घोषित किया गया है <एल्गोरिदम> शीर्ष लेख फ़ाइल और दो तर्क हैं: श्रेणी की प्रारंभिक स्थिति पहला तर्क है, और दूसरा तर्क समाप्ति स्थिति का प्रतिनिधित्व करता है।







इसके अलावा, यह एक वैकल्पिक तीसरा पैरामीटर भी लेता है, जो एक फ़ंक्शन ऑब्जेक्ट है जो रेंज में तत्वों को फेरबदल करने के लिए यादृच्छिक संख्या उत्पन्न करता है।



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



उदाहरण

का उपयोग करने के नीचे दिए गए उदाहरण पर विचार करें फेरबदल () फ़ंक्शन सी ++ में। इस प्रोग्राम में हमने वेक्टर बनाया है एक बात 0 से 10 के पूर्णांक मानों के साथ। फिर हम एक यादृच्छिक संख्या जनरेटर उत्पन्न करते हैं, जिसे बाद में वेक्टर की सीमा के साथ पास किया जाता है फेरबदल () समारोह। फेरबदल () समारोह संख्या लेता है और इस संख्या के आधार पर तत्वों को स्वैप करता है। फिर हमने for लूप का उपयोग करके पुनर्व्यवस्थित वेक्टर अनुक्रम को प्रिंट किया





#शामिल

#शामिल <वेक्टर>

#शामिल <एल्गोरिदम>

#शामिल <यादृच्छिक>

#शामिल <क्रोनो>

नेमस्पेस एसटीडी का उपयोग करना ;

int यहाँ मुख्य ( )

{

वेक्टर < int यहाँ > एक बात { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

अहस्ताक्षरित बीज = chrono :: सिस्टम की घड़ी :: अब ( ) . time_since_epoch ( ) . गिनती करना ( ) ;

मिश्रण ( एक बात। शुरू ( ) , एक बात। अंत ( ) , default_random_engine ( बीज ) ) ;

अदालत << 'फेरबदल किए गए तत्व हैं:' ;

के लिए ( int यहाँ और मैं : एक बात )

अदालत << '' << मैं ;

अदालत << endl ;

वापस करना 0 ;

}

random_shuffle() सी ++ में

रैंडम_शफल () फ़ंक्शन कुछ बेतरतीब ढंग से चुनी गई संख्या के साथ दी गई सीमा में तत्वों को बेतरतीब ढंग से पुनर्व्यवस्थित करता है। यह यादृच्छिक संख्याओं के अनुक्रम को उत्पन्न करने के लिए एक यादृच्छिक संख्या जनरेटर का उपयोग करता है और फिर उन संख्याओं का उपयोग श्रेणी में तत्वों को घुमाने के लिए करता है, इसलिए हर बार जब आप कार्यक्रम चलाते हैं तो कार्यक्रम का क्रम अलग होगा।



के लिए दो पैरामीटर आवश्यक हैं रैंडम_शफल () : श्रेणी की प्रारंभिक स्थिति पहला पैरामीटर है, और दूसरा पैरामीटर समाप्ति स्थिति है। इसके अतिरिक्त, रैंडम_शफल () एक वैकल्पिक तीसरा पैरामीटर ले सकता है, जो एक फ़ंक्शन ऑब्जेक्ट है जिसका उपयोग तत्वों को फेरबदल करने के लिए यादृच्छिक संख्या उत्पन्न करने के लिए किया जा सकता है।

उदाहरण

नीचे दिया गया उदाहरण के काम को दर्शाता है रैंडम_शफल () सी ++ में। इस कोड में, हमने एक बनाया है वेक्टर चीज पूर्णांक मानों के साथ 1 से 10 तक और फिर उपयोग किया जाता है पाश के लिए बेतरतीब ढंग से फेरबदल अनुक्रम मुद्रित करने के लिए:

#शामिल

#शामिल <एल्गोरिदम>

नेमस्पेस एसटीडी का उपयोग करना ;

int यहाँ मुख्य ( )

{

वेक्टर < int यहाँ > एक बात { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

srand ( static_cast < अहस्ताक्षरित int यहाँ > ( समय ( nullptr ) ) ) ;

random_shuffle ( एक बात। शुरू ( ) , एक बात। अंत ( ) ) ;

के लिए ( int यहाँ मैं : एक बात ) {

अदालत << मैं << '' ;

}

अदालत << ' \एन ' ;



वापस करना 0 ;

}

फेरबदल () और रैंडम_शफल () के बीच अंतर

यहाँ के बीच प्रमुख अंतर हैं फेरबदल () और रैंडम_शफल () सी ++ में कार्य करता है।

1: रैंडम_शफल () फेरबदल करने के लिए तत्वों की श्रेणी का प्रतिनिधित्व करने वाले पुनरावृत्तियों की एक जोड़ी लेता है, जबकि फेरबदल () शफल करने के लिए तत्वों की श्रेणी का प्रतिनिधित्व करने वाले पुनरावृत्तियों की एक जोड़ी, साथ ही साथ फेरबदल के लिए उपयोग करने के लिए एक यादृच्छिक संख्या जनरेटर लेता है।

2: रैंडम_शफल () की तुलना में आम तौर पर कम कुशल होता है फेरबदल () , क्योंकि इसमें फेरबदल के लिए उपयोग करने के लिए यादृच्छिक संख्याओं का एक क्रम उत्पन्न करना होता है।

3: रैंडम_शफल () तत्वों को फेरबदल करने के लिए यादृच्छिक संख्या जनरेटर के सी ++ मानक पुस्तकालय के आंतरिक कार्यान्वयन का उपयोग करता है, जबकि फेरबदल () आपको फेरबदल के लिए उपयोग करने के लिए अपने स्वयं के यादृच्छिक संख्या जनरेटर को निर्दिष्ट करने की अनुमति देता है, जिससे आपको फेरबदल की यादृच्छिकता पर अधिक नियंत्रण मिलता है।

4: random_shuffle() को C++98 में पेश किया गया था और सी ++ मानक पुस्तकालय के सभी संस्करणों द्वारा समर्थित है, जबकि फेरबदल () सी ++ 11 में पेश किया गया था और केवल कंपाइलर्स द्वारा समर्थित है जो मानक के उस संस्करण को लागू करता है।

अंतिम विचार

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