यह अनुभाग यादृच्छिक क्या है का एक सिंहावलोकन प्रदान करता है, और क्यों एक डेवलपर इसका उपयोग करना चाहता है।
यह यादृच्छिक के भीतर किसी भी बड़े विषयों का उल्लेख करना चाहिए, और संबंधित विषयों को लिंक करना चाहिए। चूंकि यादृच्छिक के लिए दस्तावेज़ीकरण नया है, इसलिए आपको उन संबंधित विषयों के प्रारंभिक संस्करण बनाने की आवश्यकता हो सकती है।
जिसे नथ शफल और डर्स्टनफेल्ड-फिशर-येट्स शफल के रूप में भी जाना जाता है। यह फेरबदल n
तत्वों की एक सरणी लेता है और इसे फेरबदल करता है। एल्गोरिथ्म वास्तव में यादृच्छिक है, जिसमें फेरबदल के बाद, सरणी के प्रत्येक क्रमपरिवर्तन की समान रूप से संभावना है।
जावा में:
public static void shuffle(E[] deck) {
//From the end, swap each card with a random card from the unswapped portion.
for(int i = deck.length - 1; i > 0; i--)
{
//Pick an element from [0,i], inclusive.
int chosenCard = (int) (Math.random() * (i + 1));
E temp = deck[i];
deck[i] = deck[chosenCard];
deck[chosenCard] = temp;
}
}
कृपया ध्यान दें: यह आवश्यक है कि प्रतिस्थापन तत्व [0, i] समावेशी और [0, i) से आता है, विशेष: अन्यथा, उस सरणी के क्रमपरिवर्तन जहां तत्व बने रहते हैं असंभव है, जो वास्तव में यादृच्छिक नहीं है।
रैंडम नंबरों को संभालने के लिए O (1) मानते हुए, एल्गोरिथ्म जगह में संचालित होता है और O (n) समय और स्थान लेता है। इस तरह से फेरबदल किए गए सरणी का उपयोग ओ (1) प्रति बार परिशोधित समय में गैर-दोहराए जाने वाले तत्वों को पुनः प्राप्त करने के लिए किया जा सकता है।
E[] deck;
int drawIndex;
//Elements are taken from an index that advances.
public E drawUniqueCard()
{
//Once all cards have been drawn, reshuffle the deck and draw from the top.
if(drawIndex == deck.length)
{
shuffle(deck);
drawIndex = 0;
}
//Pull the next card off the deck.
return deck[drawIndex++];
}
रैंडम सेट या स्थापित करने के बारे में विस्तृत निर्देश।