ধরুন, সমস্ত টির পক্ষে সমান সম্ভাবনা রয়েছে। আসুন সাধারণের এবং প্রয়োজন না হওয়া পর্যন্ত পাশ রোলস প্রত্যাশিত সংখ্যা খুঁজে বের 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
আমিE
i ⋅j%.%
ই
x <- (d + sum(sapply(1:n, function(i) j[i+1]*e.(j %.% i))))/(d - j[1])
( 1 )1R
10
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