Узагальнення випадку, описаного Діліпом Сарвате
Деякі з методів, описаних в інших відповідях, використовують схему, в якій ви кидаєте послідовність з n монет "поворотом", і залежно від результату ви вибираєте число від 1 до 7 або відкидаєте виток і кидаєте знову.
Трюк полягає в тому, щоб знайти в розширенні можливостей кратне 7 результатів з однаковою ймовірністю pk(1−p)n−k і співставити ті, що стоять один проти одного.
Оскільки загальна кількість результатів не кратна 7, у нас є кілька результатів, які ми не можемо віднести до числа, і є певна ймовірність того, що нам потрібно відкинути результати та почати спочатку.
Випадок використання 7 монетних оборотів за оборот
Інтуїтивно можна сказати, що катати кістки сім разів було б дуже цікаво. Оскільки нам потрібно лише викинути 2 з 27 можливостей. А саме 7 разів голови та 0 разів голови.
Для всіх інших 27−2 можливостей завжди існує кілька з 7 випадків з однаковою кількістю головок. А саме 7 справ з 1 головою, 21 справа з 2 головами, 35 справ з 3 головами, 35 справ з 4 головами, 21 справа з 5 головами і 7 справ з 6 головами.
Отже, якщо обчислити число (відкинувши 0 голів і 7 голів) X=∑k=17(k−1)⋅Ck
з розподіленими змінними Ck Бернуллі (значення 0 або 1), то X модуль 7 є рівномірною змінною із семи можливими результатами.
Порівнюючи різну кількість монет перевертає за оборот
Залишається питанням, якою була б оптимальна кількість рулонів за оборот. Коливання більшої кількості кубиків за оборот коштуватиме вам дорожче, але ви зменшуєте ймовірність того, що доведеться скочуватися знову.
На зображенні нижче представлені ручні обчислення для перших кількох монет, що перевертаються на обороті. (можливо, може бути аналітичне рішення, але я вважаю, що можна з упевненістю сказати, що система з 7 морганнями монет забезпечує найкращий метод щодо вартості очікування для необхідної кількості монет)
# plot an empty canvas
plot(-100,-100,
xlab="flips per turn",
ylab="E(total flips)",
ylim=c(7,400),xlim=c(0,20),log="y")
title("expectation value for total number of coin flips
(number of turns times flips per turn)")
# loop 1
# different values p from fair to very unfair
# since this is symmetric only from 0 to 0.5 is necessary
# loop 2
# different values for number of flips per turn
# we can only use a multiple of 7 to assign
# so the modulus will have to be discarded
# from this we can calculate the probability that the turn succeeds
# the expected number of flips is
# the flips per turn
# divided by
# the probability for the turn to succeed
for (p in c(0.5,0.2,0.1,0.05)) {
Ecoins <- rep(0,16)
for (dr in (5:20)){
Pdiscards = 0
for (i in c(0:dr)) {
Pdiscards = Pdiscards + p^(i)*(1-p)^(dr-i) * (choose(dr,i) %% 7)
}
Ecoins[dr-4] = dr/(1-Pdiscards)
}
lines(5:20, Ecoins)
points(5:20, Ecoins, pch=21, col="black", bg="white", cex=0.5)
text(5, Ecoins[1], paste0("p = ",p), pos=2)
}
Використання правила раннього припинення
зауважте: наведені нижче обчислення для значення очікування кількості фліп - для справедливої монети p=0.5 , це стане безладним для різних p , але принцип залишається тим самим (хоча різний облік бухгалтерського обліку справи потрібні)
Ми повинні мати можливість вибирати випадки (замість формули для X ), щоб ми могли зупинитися раніше.
З 5 монетних обертів ми маємо для шести можливих різних не упорядкованих наборів голів та хвостів:
1 + 5 + 10 + 10 + 5 + 1 впорядковані набори
І ми можемо використовувати групи з десятьма випадками (це група з 2 голівками або група з 2 хвостами), щоб вибрати (з однаковою ймовірністю) число. Це трапляється у 14 із 2 ^ 5 = 32 випадків. Це залишає нам:
1 + 5 + 3 + 3 + 5 + 1 впорядковані набори
Маючи додатковий (6-й) монетний фліп, ми маємо для семи можливих різних не упорядкованих наборів голів та хвостів:
1 + 6 + 8 + 6 + 8 + 6 + 1 впорядковані набори
І ми можемо використовувати групи з восьми випадків (тобто група з 3 голівками або група з 3 хвостами), щоб вибрати (з однаковою ймовірністю) число. Це трапляється у 14 із 2 * (2 ^ 5-14) = 36 випадків. Це залишає нам:
1 + 6 + 1 + 6 + 1 + 6 + 1 впорядковані набори
З ще одним (7-м) додатковим фліп-монетою ми маємо для восьми можливих різних не упорядкованих наборів голів та хвостів:
1 + 7 + 7 + 7 + 7 + 7 + 7 + 1 впорядковані набори
І ми можемо використовувати групи з семи випадків (усі, крім всіх хвостиків та випадків усіх голів), щоб вибрати (з однаковою ймовірністю) число. Це трапляється у 42 із 44 випадків. Це залишає нам:
1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 впорядковані набори
(ми могли б продовжити це, але лише на 49-му кроці це дає нам перевагу)
Отже, ймовірність вибору числа
- при 5 переворотах - 1432=716
- при 6 переворотах - 9161436=732
- при 7 сальто 11324244=231704
- не в 7 фліп - це 1−716−732−231704=227
Це обумовлює значення очікування кількості фліпів за один виток, що обумовлює успіх і p = 0,5:
5⋅716+6⋅732+7⋅231704=5.796875
Значення очікування для загальної кількості фліп (до досягнення успіху), умовне p = 0,5, стає:
(5⋅716+6⋅732+7⋅231704)2727−2=539=5.88889
Відповідь NcAdams використовує варіацію цієї стратегії зупиняючого правила (щоразу придумуючи дві нові монети), але не вибирає оптимально всі ручки.
Відповідь Кліда може бути також подібною, хоча може існувати нерівномірне правило вибору, згідно з яким кожна дві монети може перевернути номер, але необов'язково з однаковою ймовірністю (розбіжність, яка відновлюється під час пізніших гортань монети)
Порівняння з іншими методами
Інші методи, що використовують аналогічний принцип, - це NcAdams та AdamO.
Принцип такий : рішення про число між 1 і 7 приймається після певної кількості голів і хвостів. Після кількості x переворотів, для кожного рішення, яке призводить до числа i існує аналогічне, однаково вірогідне рішення, яке призводить до числа j (однакова кількість голів і хвостів, але лише в іншому порядку). Деякі серії голів та хвостів можуть призвести до того, щоби почати спочатку.
Для таких типів методів один із розміщених тут є найбільш ефективним, оскільки він приймає рішення якомога раніше (як тільки з’явиться можливість для 7 рівних послідовностей імовірностей головок і хвостів, після x -го перевороту ми можемо використовувати їх для прийняття рішення про число, і нам не потрібно гортати далі, якщо ми стикаємося з одним із цих випадків).
Це показано на зображенні та моделюванні нижче:
#### mathematical part #####
set.seed(1)
#plotting this method
p <- seq(0.001,0.999,0.001)
tot <- (5*7*(p^2*(1-p)^3+p^3*(1-p)^2)+
6*7*(p^2*(1-p)^4+p^4*(1-p)^2)+
7*7*(p^1*(1-p)^6+p^2*(1-p)^5+p^3*(1-p)^4+p^4*(1-p)^3+p^5*(1-p)^2+p^6*(1-p)^1)+
7*1*(0+p^7+(1-p)^7) )/
(1-p^7-(1-p)^7)
plot(p,tot,type="l",log="y",
xlab="p",
ylab="expactation value number of flips"
)
#plotting method by AdamO
tot <- (7*(p^20-20*p^19+189*p^18-1121*p^17+4674*p^16-14536*p^15+34900*p^14-66014*p^13+99426*p^12-119573*p^11+114257*p^10-85514*p^9+48750*p^8-20100*p^7+5400*p^6-720*p^5)+6*
(-7*p^21+140*p^20-1323*p^19+7847*p^18-32718*p^17+101752*p^16-244307*p^15+462196*p^14-696612*p^13+839468*p^12-806260*p^11+610617*p^10-357343*p^9+156100*p^8-47950*p^7+9240*p^6-840*p^5)+5*
(21*p^22-420*p^21+3969*p^20-23541*p^19+98154*p^18-305277*p^17+733257*p^16-1389066*p^15+2100987*p^14-2552529*p^13+2493624*p^12-1952475*p^11+1215900*p^10-594216*p^9+222600*p^8-61068*p^7+11088*p^6-1008*p^5)+4*(-
35*p^23+700*p^22-6615*p^21+39235*p^20-163625*p^19+509425*p^18-1227345*p^17+2341955*p^16-3595725*p^15+4493195*p^14-4609675*p^13+3907820*p^12-2745610*p^11+1592640*p^10-750855*p^9+278250*p^8-76335*p^7+13860*p^6-
1260*p^5)+3*(35*p^24-700*p^23+6615*p^22-39270*p^21+164325*p^20-515935*p^19+1264725*p^18-2490320*p^17+4027555*p^16-5447470*p^15+6245645*p^14-6113275*p^13+5102720*p^12-3597370*p^11+2105880*p^10-999180*p^9+371000
*p^8-101780*p^7+18480*p^6-1680*p^5)+2*(-21*p^25+420*p^24-3990*p^23+24024*p^22-103362*p^21+340221*p^20-896679*p^19+1954827*p^18-3604755*p^17+5695179*p^16-7742301*p^15+9038379*p^14-9009357*p^13+7608720*p^12-
5390385*p^11+3158820*p^10-1498770*p^9+556500*p^8-152670*p^7+27720*p^6-2520*p^5))/(7*p^27-147*p^26+1505*p^25-10073*p^24+49777*p^23-193781*p^22+616532*p^21-1636082*p^20+3660762*p^19-6946380*p^18+11213888*p^17-
15426950*p^16+18087244*p^15-18037012*p^14+15224160*p^13-10781610*p^12+6317640*p^11-2997540*p^10+1113000*p^9-305340*p^8+55440*p^7-5040*p^6)
lines(p,tot,col=2,lty=2)
#plotting method by NcAdam
lines(p,3*8/7/(p*(1-p)),col=3,lty=2)
legend(0.2,500,
c("this method calculation","AdamO","NcAdams","this method simulation"),
lty=c(1,2,2,0),pch=c(NA,NA,NA,1),col=c(1,2,3,1))
##### simulation part ######
#creating decision table
mat<-matrix(as.numeric(intToBits(c(0:(2^5-1)))),2^5,byrow=1)[,c(1:12)]
colnames(mat) <- c("b1","b2","b3","b4","b5","b6","b7","sum5","sum6","sum7","decision","exit")
# first 5 rolls
mat[,8] <- sapply(c(1:2^5), FUN = function(x) {sum(mat[x,1:5])})
mat[which((mat[,8]==2)&(mat[,11]==0))[1:7],12] = rep(5,7) # we can stop for 7 cases with 2 heads
mat[which((mat[,8]==2)&(mat[,11]==0))[1:7],11] = c(1:7)
mat[which((mat[,8]==3)&(mat[,11]==0))[1:7],12] = rep(5,7) # we can stop for 7 cases with 3 heads
mat[which((mat[,8]==3)&(mat[,11]==0))[1:7],11] = c(1:7)
# extra 6th roll
mat <- rbind(mat,mat)
mat[c(33:64),6] <- rep(1,32)
mat[,9] <- sapply(c(1:2^6), FUN = function(x) {sum(mat[x,1:6])})
mat[which((mat[,9]==2)&(mat[,11]==0))[1:7],12] = rep(6,7) # we can stop for 7 cases with 2 heads
mat[which((mat[,9]==2)&(mat[,11]==0))[1:7],11] = c(1:7)
mat[which((mat[,9]==4)&(mat[,11]==0))[1:7],12] = rep(6,7) # we can stop for 7 cases with 4 heads
mat[which((mat[,9]==4)&(mat[,11]==0))[1:7],11] = c(1:7)
# extra 7th roll
mat <- rbind(mat,mat)
mat[c(65:128),7] <- rep(1,64)
mat[,10] <- sapply(c(1:2^7), FUN = function(x) {sum(mat[x,1:7])})
for (i in 1:6) {
mat[which((mat[,10]==i)&(mat[,11]==0))[1:7],12] = rep(7,7) # we can stop for 7 cases with i heads
mat[which((mat[,10]==i)&(mat[,11]==0))[1:7],11] = c(1:7)
}
mat[1,12] = 7 # when we did not have succes we still need to count the 7 coin tosses
mat[2^7,12] = 7
draws = rep(0,100)
num = rep(0,100)
# plotting simulation
for (p in seq(0.05,0.95,0.05)) {
n <- rep(0,1000)
for (i in 1:1000) {
coinflips <- rbinom(7,1,p) # draw seven numbers
I <- mat[,1:7]-matrix(rep(coinflips,2^7),2^7,byrow=1) == rep(0,7) # compare with the table
Imatch = I[,1]*I[,2]*I[,3]*I[,4]*I[,5]*I[,6]*I[,7] # compare with the table
draws[i] <- mat[which(Imatch==1),11] # result which number
num[i] <- mat[which(Imatch==1),12] # result how long it took
}
Nturn <- mean(num) #how many flips we made
Sturn <- (1000-sum(draws==0))/1000 #how many numbers we got (relatively)
points(p,Nturn/Sturn)
}
інше зображення, яке масштабується на p∗(1−p) для кращого порівняння:
збільшення масштабів порівняння методів, описаних у цій публікації та коментарях
"умовний пропуск 7-го кроку" - це незначне поліпшення, яке можна зробити за правилом ранньої зупинки. У цьому випадку ви вибираєте не групи з однаковою ймовірністю після 6-го перевороту. У вас 6 груп з однаковою ймовірністю, і 1 група з дещо різною ймовірністю (для цієї останньої групи вам потрібно перевернути ще один додатковий час, коли у вас є 6 голів або хвостів і тому, що ви відкинете 7 голів або 7 хвостів, ви закінчите з однаковою ймовірністю, зрештою)
Автор StackExchangeStrike