मुझे यादृच्छिक संख्याओं के साथ आकार n का 2 डी सरणी भरना होगा, हालांकि मुझे {{X4} होने के लिए उत्पन्न यादृच्छिक संख्याओं के बारे में n(n-1)/2 * .2 या .4 या .8 की आवश्यकता है }} और मुझे उनकी जरूरत है। क्या ऐसा करने का कोई संभावित तरीका है? मैंने सोचा कि सरणी को भरने के दौरान हर बार यह उस तत्व को -1 के रूप में सेट करता है और ट्रैक रखने के लिए एक गिनती का उपयोग करता है, लेकिन यह सुनिश्चित करने का कोई तरीका नहीं है कि -1 सरणी में अलग-अलग फैले हों, क्या यह संभव है?

0
Tanner Summers 16 नवम्बर 2015, 06:28

2 जवाब

सबसे बढ़िया उत्तर

सबसे आसान तरीका है कि मैं ऐसा करने के लिए सोच सकता हूं:

  • -1 s की आवश्यक राशि के साथ अपने सरणी की शुरुआत भरें
  • यादृच्छिक संख्या के साथ बाकी सरणी भरें
  • संभवतः std::random_shuffle या कुछ इसी तरह का उपयोग करते हुए, सरणी फेरबदल करें।

ऐसा करने के बाद, आप यह सुनिश्चित कर सकते हैं कि आपके पास -1 s की सही मात्रा है, और वे बेतरतीब ढंग से वितरित किए जाएंगे।

2
JHobern 16 नवम्बर 2015, 03:39

यदि सरणी सेट करना एक बार बंद होने वाला ऑपरेशन है (यानी, आप लगातार तत्वों को नहीं बदल रहे हैं और -1 मान के अनुपात को स्थिर बनाए रखने के लिए <सुप> (1) ), आप पहले कर सकते हैं बस नहीं सरणी को -1 मानों से बिल्कुल अलग करें, कुछ इस तरह (छद्म कोड):

for index in 0 .. array.size():
    value = -1
    while value == -1:
        value = yourRandomFunctionIncludingNegOne()
    array[index] = value

इसके बाद, आप आबादी के बाद बस उनकी दी गई संख्या को -1 बदल दें:

for index in 0 .. array.size() / 5:  # 20%
    index = random(array.size())
    do:
        index = random(array.size())
    while array[index] == -1
    array[index] = -1

(1) आप अभी भी का उपयोग कर सकते हैं इस विधि यदि सरणी लगातार बदल रही है, तो आपको बस negative-one और other-than-negative-one काउंट का ट्रैक रखने की आवश्यकता है और मक्खी पर समायोजित करें। यह थोड़ा अधिक जटिल है, लेकिन फिर भी उल्लेखनीय है।

0
paxdiablo 16 नवम्बर 2015, 03:42