नॉकआउट संभावनाएँ


9

नॉकआउट एक बास्केटबॉल खेल है जहाँ खिलाड़ी निशानेबाजी करते हैं। इसे दो-खिलाड़ी प्रतियोगिताओं के अनुक्रम के रूप में खेला जाता है, जिनमें से प्रत्येक में उन खिलाड़ियों में से एक को "नॉक आउट" करने की संभावना होती है।

मान लीजिए कि खिलाड़ी हैं A B C Dऔर उनकी शूटिंग और बास्केट बनाने की संभावना 0.1 0.2 0.3 0.4क्रमशः प्रतियोगिता में अन्य खिलाड़ी से स्वतंत्र है। लाइन के सामने दो खिलाड़ी Aऔर B, "लड़ाई।" के बाद से Aपहली जाता है, वह है रक्षक सफाया होने की कगार पर है, और Bहै कि हमलावर , और तत्काल उन्मूलन के खतरे में नहीं। Aपहले गोली मारता है। यदि Aयह बनाता है, Aसफलतापूर्वक बचाव किया है, और लाइन के पीछे चला जाता है। लाइन में बदल जाएगा B C D A। यदि Aयह नहीं है, तो Bगोली मारता है। यदि Bयह बनाता है, तो Aबाहर है और Bलाइन के पीछे जाता है, इसलिए लाइन बन जाती है C D B। यदि नहींAन ही Bइसे बनाता है, प्रक्रिया दोहराता है, Aशूटिंग के साथ फिर से, Aया तो या Bएक टोकरी बनाता है।

मान लीजिए कि लाइन बदल गई B C D A( Aसफलतापूर्वक बचाव कर ली गई)। अब, Bऔर C"लड़ाई," Bरक्षक होने के साथ , और Cहमलावर होने के नाते। यह प्रक्रिया तब तक दोहराती है जब तक कि केवल एक व्यक्ति शेष न हो। वह व्यक्ति विजेता है।

आपका काम प्रत्येक व्यक्ति की संभावनाओं की गणना करना है जिसे मौका दिया गया है कि वे एक टोकरी बनाएंगे।

इनपुट :

संख्याओं की एक सूची, जैसे कि , 0.1 0.2या 0.5 0.5 0.5 0.5, जहाँ n वें नंबर का मौका है कि n th खिलाड़ी एक टोकरी बनाएगा। आप इस इनपुट को किसी भी फॉर्मेट में ले सकते हैं, जिसमें फंक्शन के पैरामीटर भी शामिल हैं।

आउटपुट :

संख्याओं की एक सूची, जहां n वें नंबर का मौका है कि n वें खिलाड़ी गेम जीत जाएगा। आपकी संख्या कम से कम दो दशमलव स्थानों पर कम से कम 90% समय के लिए सटीक होनी चाहिए। इसका मतलब है कि आप सिमुलेशन-आधारित दृष्टिकोण का उपयोग कर सकते हैं। हालांकि, यदि आपका कोड सिमुलेशन आधारित नहीं है (यह कम से कम 6 दशमलव स्थानों पर सही उत्तर देने की गारंटी है) तो अपने स्कोर से 30% दूर ले जाएं।

के बीच उदाहरण 0.5 0.5: खिलाड़ियों को बुलाओ Aऔर B। आज्ञा देना pएक जीतने की संभावना है। Aएक है 2/3सफलतापूर्वक बचाव का मौका (के बाद से वहाँ एक है 1/2संभावना है कि Aस्कोर, एक 1/4संभावना है कि Aछूट जाए और Bस्कोर, और एक 1/4मौका है कि दोनों याद आती है और इस प्रक्रिया को दोहराता है)। यदि Aबचाव करने में विफल रहता है, तो वह खटखटाया जाता है और Bजीतता है। अगर Aबचाव होता है, तो लाइन बन जाती है B A। चूंकि स्थिति सममित है, Aजीतने की संभावना है (1 - p)। हमें मिला:

p = 2/3 * (1 - p) + 1/3 * 0। हल, हम प्राप्त करते हैं p = 2/5। उत्पादन होना चाहिए 2/5 3/5या 0.4 0.6

मैं अधिक जटिल उदाहरणों को करने की संभावना के साथ पर्याप्त अच्छा नहीं हूं।

यदि आपको अधिक परीक्षण मामलों की आवश्यकता है, तो यहां कुछ हैं:

0.1 0.2 0.3 0.4 --> 0.01 0.12 0.25 0.62
0.99 0.99 --> 0.5 0.5 (it's not exact, but if you round to two decimal places, you get 0.5 and 0.5)

जवाबों:


4

सीजाम ( 84 80 चार्ट * 0.7 = 56)

{_,({_,,{_2$m<(;(+Q0\)\++m>\}%)_(+.{X2$-*_@+/}1\{1$*\1$-}%)1\-f/.f*:.+}{,da}?}:Q

ऑनलाइन डेमो । यह एक पुनरावर्ती कार्य है जो युगल की एक सरणी लेता है और युगल की एक सरणी देता है। ऑनलाइन डेमो में फ़ंक्शन को निष्पादित करने और प्रदर्शन के लिए आउटपुट को प्रारूपित करने के लिए मचान की एक छोटी राशि शामिल है।

विच्छेदन

मूल सिद्धांत यह है कि यदि n > 1खिलाड़ी बचे हैं, तो उनमें से एक को बाहर खटखटाने के लिए अगला होना चाहिए। इसके अलावा, उसके बाद होने वाली कतार का क्रम केवल कतार के प्रारंभिक क्रम पर और जो खटखटाया जाता है, पर निर्भर करता है। इसलिए हम nपुनरावर्ती कॉल कर सकते हैं , प्रत्येक मामले में प्रत्येक खिलाड़ी के लिए जीतने की संभावनाओं की गणना कर सकते हैं , और फिर हमें उचित रूप से वजन और जोड़ने की आवश्यकता है।

मैं इनपुट संभावनाओं को लेबल करूँगा [p_0 p_1 ... p_{n-1}]। चलो f(a,b)संभावना है कि निरूपित aके खिलाफ की रक्षा करने में विफल रहता b। किसी भी दौर में, aसफलतापूर्वक बचाव करने p_aवाली संभावना है , जो संभावना bदस्तक देती aहै वह है (1-p_a)*p_b, और यह संभावना कि यह दूसरे दौर में जाती है (1-p_a)*(1-p_b)। हम या तो ज्यामितीय प्रगति का एक स्पष्ट योग कर सकते हैं या हम तर्क दे सकते हैं कि दो ज्यामितीय प्रगति एक दूसरे के लिए आनुपातिक हैं f(a,b) = (1-p_a)*p_b / (p_a + (1-p_a)*p_b)

फिर हम लाइन के पूर्ण दौर तक एक स्तर बढ़ा सकते हैं। पहला खिलाड़ी नॉकआउट होने की संभावना f(0,1); दूसरा खिलाड़ी नॉक आउट होने की संभावना (1-f(0,1)) * f(1,2); तीसरा खिलाड़ी है (1-f(0,1)) * (1-f(1,2)) * f(2,3); आखिरी तक संभावना के साथ बाहर खटखटाया \prod_i (1-f(i,i+1)) * f(n-1,0)। ज्यामितीय प्रगति के बारे में एक ही तर्क हमें इन संभावनाओं को वजन के रूप में उपयोग करने की अनुमति देता है, के एक कारक द्वारा सामान्यीकरण के साथ 1 / \prod_i f(i, i+1 mod n)

{                   e# Define a recursive function Q
  _,({              e# If we have more than one person left in the line...
    _,,{            e#   Map each i from 0 to n-1...
      _2$m<         e#     Rotate a copy of the probabilities left i times to get [p_i p_{i+1} ... p_{n-1} p_0 ... p_{i-1}]
      (;(+          e#     i fails to defend, leaving the line as [p_{i+2} ... p_{n-1} p_0 ... p_{i-1} p_{i+1}]
      Q             e#     Recursive call
      0\)\++        e#     Insert 0 for the probability of i winning and fix up the order
      m>\           e#     Rotate right i times and push under the list of probabilities
    }%
    )               e#   Stack: [probs if 0 knocked out, probs if 1 knocked out, ...] [p_0 p_1 ...]
    _(+.{           e#   Duplicate probs, rotate 1, and pointwise map block which calculates f(a,b)
      X2$-*_@+/     e#     f(a,b) = (1-p_a)*p_b / (p_a + (1-p_a)*p_b)  TODO is the d necessary?
    }
    1\{1$*\1$-}%    e#   Lift over the list of f(a,b) a cumulative product to get the weights  TODO is the d necessary?
    )1\-f/          e#   Normalise the weights
    .f*             e#   Pointwise map a multiplication of the probabilities for each case with the corresponding weight
    :.+             e#   Add the weights across the cases
  }{,da}?           e# ...else only one left, so return [1.0]
}:Q
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.