Очікувана кількість разів котити штамп, поки кожна сторона не з’явилася 3 рази


15

Яка очікувана кількість разів, коли потрібно скочувати штамп, поки кожна сторона не з’явиться 3 рази?

Це питання задавали в початковій школі Нової Зеландії, і це було вирішено за допомогою моделювання. Яке аналітичне рішення цієї проблеми?


6
Оскільки результати рулонів є випадковими, заздалегідь неможливо дізнатися, скільки булочок потрібно. Якщо питання шукає, наприклад, очікувана кількість рулонів перед кожною стороною з'явилося 3 рази, це слід чітко вказати. У цьому випадку застосовується stats.stackexchange.com/tags/self-study/info .
Юхо Коккала

3
Скажіть цим новозеландським дітям читати Нормана Л. Джонсона, Семюеля Коца, Н. Балакришнана "Дискретні багатовимірні розподіли" wiley.com/WileyCDA/WileyTitle/productCd-0471128449.html .
Марк Л. Стоун

Відповіді:


28

Припустимо, всі сторін мають рівні шанси. Давайте узагальнимо і знайдемо очікувану кількість рулонів, необхідних до тих пір, поки сторона 1 не з’явиться n 1 разів, сторона 2 з’явилася n 2 рази, ..., а сторона d не з’явилася n d разів. Оскільки особистість сторін не має значення (всі вони мають однакові шанси), опис цієї мети може бути стислою: припустимо, що i 0 сторони взагалі не повинні з'являтися, i 1 з сторін повинен з'явитися тільки раз, ..., і яг=61н12н2гнгi0i1iнсторони повинні бути разів. Нехай i = ( i 0 , i 1 , ... , i n ) позначає цю ситуацію і записує e ( i ) для очікуваної кількості рулонів. Питання задає e ( 0 , 0 , 0 , 6 ) : i 3 =н=макс(н1,н2,,нг)

i=(i0,i1,,iн)
е(i)
е(0,0,0,6)i3=6 означає, що всі шість сторін потрібно бачити по три рази кожна.

Простий рецидив доступний. У наступному рулоні сторона, що з'являється, відповідає одному з : тобто нам це не потрібно було бачити, або нам потрібно було його побачити один раз, ... або нам потрібно було побачити його більше n разів. j - кількість разів, яку нам потрібно було переглянути.ijнj

  • Коли , нам не потрібно було його бачити, і нічого не змінюється. Це відбувається з ймовірністю i 0 / d .j=0i0/г

  • Коли тоді нам потрібно було бачити цю сторону. Тепер є ще одна менша сторона, яку потрібно бачити j разів, і ще одна сторона, яку потрібно побачити j - 1 раз. Таким чином, i j стає i j - 1, а i j - 1 стає i j + 1 . Нехай цю операцію на компонентах i позначають ij , так щоj>0jj-1ijij-1ij-1ij+1iij

    ij=(i0,,ij-2,ij-1+1,ij-1,ij+1,,iн).

    Це відбувається з ймовірністю .ij/г

Нам просто потрібно порахувати цей ролик і скористатися рекурсією, щоб сказати, скільки ще булочок очікується. За законами очікування та повної ймовірності,

е(i)=1+i0ге(i)+j=1нijге(ij)

(Давайте зрозуміємо, що коли ij=0 , відповідний доданок у сумі дорівнює нулю.)

Якщо , ми закінчили і e ( i ) = 0 . Інакше ми можемо вирішити для e ( i ) , даючи бажану рекурсивну формулуi0=ге(i)=0е(i)

(1)e(i)=d+i1e(i1)++ine(in)di0.

Зауважте, що - загальна кількість подій, які ми хочемо побачити. Операція j зменшує цю величину на одиницю для будь-якого j > 0 за умови i j > 0 , що завжди має місце. Тому ця рекурсія закінчується на глибині точно | я | (дорівнює 3 ( 6 ) =

|i|=0(i0)+1(i1)++н(iн)
jj>0ij>0|i|не обчислюється більше одного разу).3(6)=18у питанні). Більше того (як це не важко перевірити) кількість можливостей на кожній глибині рекурсії в цьому питанні невелика (ніколи не перевищує ). Отже, це ефективний метод, принаймні тоді, коли комбінаторні можливості не надто численні, і ми запам'ятовуємо проміжні результати (так, що жодне значення e8е

Я обчислюю, що

е(0,0,0,6)=22868786045088836998400000000032.677.

Це здалося мені жахливо малим, тому я запустив моделювання (використовуючи R). Після понад трьох мільйонів рулонів кісток цю гру до кінця зіграли понад 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)ii

RiEij%.%

е

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))

Нарешті, ось оригінальна реалізація Mathematica, яка дала точну відповідь. Запам'ятовування здійснюється за допомогою ідіоматичного 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


5
+1 I imagine some of the notation would be difficult to follow for the students who were asked this question (not that I have any concrete alternative to suggest right now). On the other hand I wonder what they were intended to do with such a question.
Glen_b -Reinstate Monica

1
@Glen_b Вони могли б багато чого навчитися, фактично котивши кістки (і підраховуючи результати). Це звучить як хороший спосіб зайняти заняття на півгодини, поки вчитель відпочиває :-).
whuber

12

Оригінальна версія цього питання розпочала життя, задавши:

скільки рулонів потрібно, поки кожна сторона не з’явиться 3 рази

Розподіл необхідної кількості рулонів ... такий, що кожна сторона з’являється 3 рази

нХiii{1,,6}(Х1,Х2,,Х6)Багаточлен(н,16)

P(X1=x1,,X6=x6)=n!x1!x6!16n subject to: i=16xi=n

Let: N=min{n:Xi3i}. Then the cdf of N is: P(Nn)=P(Xi3|n)

i.e. To find the cdf P(Nn), simply calculate for each value of n={18,19,20,}:

P(X13,,X63) where (X1,,X6)Multinomial(n,16)

Here, for example, is Mathematica code that does this, as n increases from 18 to say 60. It is basically a one-liner:

 cdf = ParallelTable[ 
   Probability[x1 >= 3 && x2 >= 3 && x3 >= 3 && x4 >= 3 && x5 >= 3 &&  x6 >= 3, 
       {x1, x2, x3, x4, x5, x6} \[Distributed] MultinomialDistribution[n, Table[1/6, 6]]],
    {n, 18, 60}]

... що дає точний cdf як н збільшується:

1814889875110199605761928290762544079842304203111983875176319369216211168408491253173748645888223283142988125507799783342082361483465418375609359740010496

Ось сюжет cdf П(Nн), як функція н:

введіть тут опис зображення

Вивести пмф П(N=н), просто перша різниця у форматі PDF:

введіть тут опис зображення

Звичайно, розподіл не має верхньої межі, але ми можемо легко вирішити тут стільки значень, скільки практично потрібно. Підхід загальний і повинен працювати так само добре для будь-якої необхідної комбінації сторін.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.