पुनरावर्ती अवसरों की गणना करें।
चलो ps(x) संभावना है कि वास्तव में हो x मूल्यों, 0≤x≤k, सभी में चुने गए हैं s≥1 के स्वतंत्र ड्रा k की आबादी से आइटम (प्रतिस्थापन के बिना) n≥k>0सदस्य हैं। (चलोn तथा k विश्लेषण की अवधि के लिए तय किया गया है ताकि वे स्पष्ट रूप से उल्लेख नहीं किया जा सके।)
चलो ps(x∣y) संभावना है कि अगर बिल्कुल y मूल्यों को पहले में चुना गया है s−1 फिर खींचता है x≤yउनमें से अंतिम ड्रा में चुने गए हैं। फिर क्योंकि उन तत्वों के तत्वों के उप-समूह हैं, और शेष तत्वों के सबसेट को अलग से आबादी के अन्य सदस्यों में से चुना जाता है ,(yx)xy(n−yk−x)k−xn−y
ps(x∣y)=(yx)(n−yk−x)(nk).
कुल संभावना का कानून जोर देता है
ps(x)=∑y=xkps(x∣y)ps−1(y).
के लिए , यह एक निश्चित है कि है इस शुरू करने वितरण है:।s=1x=k
पुनरावृत्तियों के माध्यम से पूर्ण वितरण प्राप्त करने के लिए आवश्यक कुल गणना । इतना ही नहीं यह काफी जल्दी है, एल्गोरिथ्म आसान है। अलिखित प्रोग्रामर की प्रतीक्षा में एक नुकसान यह है कि ये संभावनाएं बहुत छोटी हो सकती हैं और फ्लोटिंग-पॉइंट गणनाओं को कम कर सकती हैं। निम्नलिखित कार्यान्वयन कॉलम के सरणी के के मानों की गणना करके इससे बचता है ।sO(k2s)R
log(ps(x))1,2,…,s
lp <- function(s, n, k) {
P <- matrix(NA, nrow=k+1, ncol=s, dimnames=list(0:k, 1:s))
P[, 1] <- c(rep(-Inf, k), 0)
for (u in 2:s)
for (i in 0:k) {
q <- P[i:k+1, u-1] + lchoose(i:k, i) + lchoose(n-(i:k), k-i) - lchoose(n, k)
q.0 <- max(q, na.rm=TRUE)
P[i+1, u] <- q.0 + log(sum(exp(q - q.0)))
}
return(P)
}
p <- function(...) zapsmall(exp(lp(...)))
प्रश्न का उत्तर , और देकर दिया जाता है । s=5, n=10000=104k=100=102 आउटपुट सरणी है, लेकिन अधिकांश संख्याएं इतनी छोटी हैं कि हम बहुत छोटे पर ध्यान केंद्रित कर सकते हैं । यहाँ अनुरूप पहली चार पंक्तियाँ हैं :101×5xx=0,1,2,3
p(5, 1e4, 1e2)[1:4, ]
आउटपुट है
1 2 3 4 5
0 0 0.3641945 0.9900484 0.9999 0.999999
1 0 0.3715891 0.0099034 0.0001 0.000001
2 0 0.1857756 0.0000481 0.0000 0.000000
3 0 0.0606681 0.0000002 0.0000 0.000000
के मान पंक्तियों लेबल, जबकि के मूल्यों कॉलम लेबल। कॉलम 5 मौका दिखाता है कि सभी पाँच नमूनों में एक तत्व शून्य से (लगभग एक मिलियन में) दिखाई देता है और अनिवार्य रूप से कोई मौका नहीं है कि सभी पाँच नमूनों में दो या अधिक तत्व दिखाई दें।xs
यदि आप यह देखना चाहते हैं कि ये संभावनाएं कितनी छोटी हैं, तो उनके लघुगणकों को देखें। बेस 10 सुविधाजनक है और हमें कई अंकों की आवश्यकता नहीं है:
u <- lp(5, 1e4, 1e2)[, 5]
signif(-u[-1] / log(10), 3)
आउटपुट हमें बताता है कि दशमलव बिंदु के बाद कितने शून्य हैं:
1 2 3 4 5 6 7 8 9 10 ... 97 98 99 100
6.0 12.3 18.8 25.5 32.3 39.2 46.2 53.2 60.4 67.6 ... 917.0 933.0 949.0 967.0
शीर्ष पंक्ति में संख्याएँ मान हैं । उदाहरण के लिए, सभी पाँच नमूनों में ठीक तीन मान दिखाने का मौका कंप्यूटिंग द्वारा पाया जाता है , जो और वास्तव में इससे पहले शून्य हैं पहला महत्वपूर्ण अंक। एक जांच के रूप में, अंतिम मान का पूर्ण बनाया गया संस्करण है । (जो अगले चार नमूनों में पहले नमूने के फिर से प्रकट होने की संभावना को गिनता है) बराबर होता हैxexp(u[4])
0.0000000000000000001434419…18967.0967.26(10000100)−410−967.26.