ধরুন, সমস্ত টির পক্ষে সমান সম্ভাবনা রয়েছে। আসুন সাধারণের এবং প্রয়োজন না হওয়া পর্যন্ত পাশ রোলস প্রত্যাশিত সংখ্যা খুঁজে বের 1 হাজির করেছে এন 1 বার পাশ 2 হাজির করেছে এন 2 বার ..., এবং পার্শ্ব ঘ হাজির করেছে এন ঘ বার। যেহেতু পক্ষগুলির পরিচয়গুলি গুরুত্বপূর্ণ নয় (তাদের সকলের সমান সম্ভাবনা রয়েছে), এই উদ্দেশ্যটির বিবরণটি ঘনীভূত করা যেতে পারে: আসুন ধরে নেওয়া যাক যে আমি 0 টি পক্ষকে একেবারে উপস্থিত হওয়ার দরকার নেই , আমি পক্ষের 1 টি উপস্থিত হওয়া দরকার ঠিক একবার, ..., এবং আমি এনঘ= 61এন12এন2ঘএনঘআমি0আমি1আমিএনপক্ষের n = সর্বোচ্চ ( এন)1, এন2, … , এনঘ) বার প্রদর্শিত হবে। আসুন
i =( i)0, i1, … , Iএন)
এই পরিস্থিতি মনোনীত করুন এবং প্রত্যাশিত রোলগুলির জন্য
লিখুন
ই ( i )
। প্রশ্নটি
জন্য জিজ্ঞাসা করে
ই ( 0 , 0 , 0 , 6 ):
নির্দেশ করে যে সমস্ত ছয় পক্ষকে প্রত্যেকে তিনবার দেখতে হবে।
আমি3= 6
একটি সহজ পুনরাবৃত্তি উপলব্ধ। পরবর্তী রোল, পাশের যে এক অনুরূপ মনে হচ্ছে, এ : যে হয় আমরা এটি দেখতে প্রয়োজন ছিল না, অথবা আমরা এটি একবার দেখতে, ..., প্রয়োজন অথবা আমরা এটা দেখতে প্রয়োজন এন আরো বার। j হল আমাদের দেখার সংখ্যাটি এটি।আমিঞএনঞ
যখন , আমাদের এটি দেখার দরকার নেই এবং কিছুই পরিবর্তিত হয় না। এই সম্ভাবনা সঙ্গে ঘটে আমি 0 / ঘ ।j = 0আমি0/ ডি
যখন তখন আমাদের এই দিকটি দেখার দরকার ছিল। এখন আর একটি কম দিক রয়েছে যা j বার দেখা দরকার এবং আরও একটি দিক যা j - 1 বার দেখা দরকার । সুতরাং, আমি ঞ হয়ে আমি ঞ - 1 এবং আমি ঞ - 1 হয়ে আমি ঞ + + 1 । উপাদান এই অপারেশন করা যাক এর আমি মনোনীত করা আমি ⋅ ঞ , যাতেj > 0ঞj - 1আমিঞআমিঞ- 1আমিj - 1আমিঞ+ 1আমিi ⋅j
i ⋅j=( i)0, … , Ij - 2, ij - 1+ 1 , iঞ- 1 , ij + 1, … , Iএন).
এই সঙ্গে সম্ভাব্যতা ঘটবে ।ij/d
আমাদের কেবল এই ডাই রোলটি গণনা করতে হবে এবং আরও কত রোল আশা করা যায় তা আমাদের তা বলার জন্য পুনরাবৃত্তি ব্যবহার করতে হবে। প্রত্যাশার আইন এবং সম্পূর্ণ সম্ভাবনার দ্বারা,
e ( i ) = 1 + i0ঘই ( আমি ) + + Σj = 1এনআমিঞঘই ( আমি ⋅ ঞ )
(আসুন বুঝতে পারি যে যখনই j = 0 , যোগফলের সাথে সম্পর্কিত শব্দটি শূন্য হয়))আমিঞ= 0
যদি , আমরা সম্পন্ন এবং ই ( i ) = 0 । অন্যথায় আমরা ই ( i ) এর জন্য সমাধান করতে পারি , কাঙ্ক্ষিত পুনরাবৃত্তির সূত্রটি দিয়েআমি0= ডিe(i)=0ই ( i )
e ( i ) = d+ i1e ( i ⋅ 1 ) + ⋯ + iএনe ( i ⋅ n )ঘ- i0।(1)
লক্ষ্য করুন হ'ল আমরা দেখতে চাওয়া মোট ইভেন্টের সংখ্যা। ক্রিয়াকলাপ ⋅ j যে কোনও j > 0 প্রদত্ত i j > 0 এর জন্য একের পরিমাণের পরিমাণ হ্রাস করে , যা সর্বদা ক্ষেত্রে। অতএব এই পুনরাবৃত্তির অবিকল গভীরে বন্ধ | i | ( 3 ( 6 ) এর সমান =
| i | =0( i)0)+1(i1)+⋯+n(in)
⋅jj>0ij>0|i|প্রশ্নে
18 )। তদ্ব্যতীত (যেমনটি পরীক্ষা করা কঠিন নয়) এই প্রশ্নের প্রতিটি পুনরাবৃত্তির গভীরতায় সম্ভাবনার সংখ্যা অল্প (কখনই
8 এর বেশি নয়)। ফলস্বরূপ, এটি একটি দক্ষ পদ্ধতি, কমপক্ষে যখন কম্বিনেটেরিয়াল সম্ভাবনাগুলি খুব বেশি না হয় এবং আমরা মধ্যবর্তী ফলাফলগুলি স্মরণ করি (যাতে
ই এর কোনও মানএকাধিকবার গণনা করা হয় না)।
3(6)=188e
আমি সেই ই ( 0 , 0 , 0 , 6 ) = 2 গণনা করি
ই ( 0 , 0 , 0 , 6 ) = 228687860450888369984000000000≈ 32,677।
এটি আমার কাছে অত্যন্ত অল্প মনে হয়েছিল, তাই আমি একটি সিমুলেশন চালিয়েছি (ব্যবহার করে R)। তিন মিলিয়ন রোলসের পরে, এই গেমটি প্রায় ৩২. completion69৯ দৈর্ঘ্যের দৈর্ঘ্যের সাথে 100,000 বারের মধ্যে শেষ হয়েছে । এই অনুমানের স্ট্যান্ডার্ড ত্রুটি 0.027 : এই গড় এবং তাত্ত্বিক মানের মধ্যে পার্থক্য নগণ্য, তাত্ত্বিক মানের যথার্থতার নিশ্চয়তা দেয়।32,6690,027
দৈর্ঘ্যের বিতরণটি আগ্রহী হতে পারে। (স্পষ্টতই এটি শুরু হতে হবে , সমস্ত ছয় পক্ষের প্রতিটি তিনবার সংগ্রহের জন্য প্রয়োজনীয় ন্যূনতম সংখ্যার সংখ্যা))18

# Specify the problem
d <- 6 # Number of faces
k <- 3 # Number of times to see each
N <- 3.26772e6 # Number of rolls
# Simulate many rolls
set.seed(17)
x <- sample(1:d, N, replace=TRUE)
# Use these rolls to play the game repeatedly.
totals <- sapply(1:d, function(i) cumsum(x==i))
n <- 0
base <- rep(0, d)
i.last <- 0
n.list <- list()
for (i in 1:N) {
if (min(totals[i, ] - base) >= k) {
base <- totals[i, ]
n <- n+1
n.list[[n]] <- i - i.last
i.last <- i
}
}
# Summarize the results
sim <- unlist(n.list)
mean(sim)
sd(sim) / sqrt(length(sim))
length(sim)
hist(sim, main="Simulation results", xlab="Number of rolls", freq=FALSE, breaks=0:max(sim))
বাস্তবায়ন
ইই ( i )আমিআমি
RআমিEi ⋅j%.%
ই
x <- (d + sum(sapply(1:n, function(i) j[i+1]*e.(j %.% i))))/(d - j[1])
( 1 )1R10
0.01e(c(0,0,0,6))
32,6771634160506
জমে থাকা ভাসমান পয়েন্ট রাউন্ডঅফ ত্রুটি শেষ দুটি অঙ্ক (যা এর 68চেয়ে বেশি হওয়া উচিত 06) ধ্বংস করেছে।
e <- function(i) {
#
# Create a data structure to "memoize" the values.
#
`[[<-.AA` <- function(x, i, value) {
class(x) <- NULL
x[[paste(i, collapse=",")]] <- value
class(x) <- "AA"
x
}
`[[.AA` <- function(x, i) {
class(x) <- NULL
x[[paste(i, collapse=",")]]
}
E <- list()
class(E) <- "AA"
#
# Define the "." operation.
#
`%.%` <- function(i, j) {
i[j+1] <- i[j+1]-1
i[j] <- i[j] + 1
return(i)
}
#
# Define a recursive version of this function.
#
e. <- function(j) {
#
# Detect initial conditions and return initial values.
#
if (min(j) < 0 || sum(j[-1])==0) return(0)
#
# Look up the value (if it has already been computed).
#
x <- E[[j]]
if (!is.null(x)) return(x)
#
# Compute the value (for the first and only time).
#
d <- sum(j)
n <- length(j) - 1
x <- (d + sum(sapply(1:n, function(i) j[i+1]*e.(j %.% i))))/(d - j[1])
#
# Store the value for later re-use.
#
E[[j]] <<- x
return(x)
}
#
# Do the calculation.
#
e.(i)
}
e(c(0,0,0,6))
অবশেষে, এখানে আসল গণিতের বাস্তবায়ন যা সঠিক উত্তরটি তৈরি করেছিল। মেমোয়াইজেশন প্রায় সমস্ত প্রিলিমিনারিগুলি মুছে ফেলা এবং মূর্খতা প্রকাশের মাধ্যমে সম্পন্ন হয় । অভ্যন্তরীণভাবে, যদিও দুটি প্রোগ্রাম একই পদ্ধতিতে একই কাজ করছে।e[i_] := e[i] = ...R
shift[j_, x_List] /; Length[x] >= j >= 2 := Module[{i = x},
i[[j - 1]] = i[[j - 1]] + 1;
i[[j]] = i[[j]] - 1;
i];
e[i_] := e[i] = With[{i0 = First@i, d = Plus @@ i},
(d + Sum[If[i[[k]] > 0, i[[k]] e[shift[k, i]], 0], {k, 2, Length[i]}])/(d - i0)];
e[{x_, y__}] /; Plus[y] == 0 := e[{x, y}] = 0
e[{0, 0, 0, 6}]
228687860450888369984000000000