Generalizando o caso descrito por Dilip Sarwate
Alguns dos métodos descritos nas outras respostas usam um esquema no qual você joga uma sequência de moedas em um 'turn' e, dependendo do resultado, escolhe um número entre 1 ou 7 ou descarta o turn e joga novamente.n
O truque é encontrar na expansão de possibilidades um múltiplo de 7 resultados com a mesma probabilidade e combinar os resultados entre si.pk(1−p)n−k
Como o número total de resultados não é um múltiplo de 7, temos alguns resultados que não podemos atribuir a um número e temos alguma probabilidade de que precisamos descartá-los e recomeçar.
O caso de usar 7 lançamentos de moedas por turno
Intuitivamente, poderíamos dizer que rolar os dados sete vezes seria muito interessante. Uma vez que só precisamos jogar fora 2 das possibilidades. Ou seja, as 7 vezes cabeças e 0 vezes cabeças.27
Para todas as outras possibilidades há sempre um múltiplo de 7 casos com o mesmo número de cabeças. Nomeadamente 7 casos com 1 cabeça, 21 casos com 2 cabeças, 35 casos com 3 cabeças, 35 casos com 4 cabeças, 21 casos com 5 cabeças e 7 casos com 6 cabeças.27−2
Portanto, se você calcular o número (descartando 0 e 7 cabeças)X=∑k=17(k−1)⋅Ck
com as variáveis distribuídas Bernoulli (valor 0 ou 1), o módulo X 7 é uma variável uniforme com sete resultados possíveis.Ck
Comparando diferentes números de lançamentos de moedas por turno
A questão permanece qual seria o número ideal de jogadas por turno. Jogar mais dados por turno custa mais, mas você reduz a probabilidade de ter que jogar novamente.
A imagem abaixo mostra um cálculo manual para os primeiros números de lançamentos de moedas por turno. (possivelmente pode haver uma solução analítica, mas acredito que seja seguro dizer que um sistema com 7 lançamentos de moedas fornece o melhor método em relação ao valor esperado para o número necessário de lançamentos de moedas)
# 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)
}
Usando uma regra de parada antecipada
nota: os cálculos abaixo, para o valor esperado do número de lançamentos, são para uma moeda justa , seria uma bagunça fazer isso para diferente , mas o princípio permanece o mesmo (embora contabilidade diferente da casos é necessário)p=0.5p
Deveríamos poder escolher os casos (em vez da fórmula para ) para que possamos parar mais cedo.X
Com 5 lançamentos de moedas , temos para os seis conjuntos diferentes possíveis de cara e coroa:
1 + 5 + 10 + 10 + 5 + 1 conjuntos ordenados
E podemos usar os grupos com dez casos (ou seja, o grupo com 2 cabeças ou o grupo com 2 caudas) para escolher (com igual probabilidade) um número. Isso ocorre em 14 dos 2 ^ 5 = 32 casos. Isso nos deixa com:
1 + 5 + 3 + 3 + 5 + 1 conjuntos ordenados
Com um lançamento de moeda extra (6ª) , temos para os sete possíveis conjuntos diferentes de cara e coroa:
1 + 6 + 8 + 6 + 8 + 6 + 1 conjuntos ordenados
E podemos usar os grupos com oito casos (ou seja, o grupo com 3 cabeças ou o grupo com 3 caudas) para escolher (com igual probabilidade) um número. Isso ocorre em 14 de 2 * (2 ^ 5-14) = 36 casos. Isso nos deixa com:
1 + 6 + 1 + 6 + 1 + 6 + 1 conjuntos ordenados
Com outro (7º) lançamento de moeda extra , temos para os oito possíveis conjuntos diferentes de cabeças e coroas não ordenadas:
1 + 7 + 7 + 7 + 7 + 7 + 7 + 1 conjuntos ordenados
E podemos usar os grupos com sete casos (todos, exceto os casos com todas as caudas e todas as cabeças) para escolher (com igual probabilidade) um número. Isso ocorre em 42 dos 44 casos. Isso nos deixa com:
1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 conjuntos ordenados
(poderíamos continuar, mas somente na 49ª etapa isso nos dá uma vantagem)
Portanto, a probabilidade de selecionar um número
- em 5 movimentos é1432=716
- em 6 movimentos é9161436=732
- em 7 movimentos é11324244=231704
- não em 7 movimentos é1−716−732−231704=227
Isso torna o valor esperado para o número de lançamentos em um turno, desde que haja sucesso ep = 0,5:
5⋅716+6⋅732+7⋅231704=5.796875
O valor esperado para o número total de lançamentos (até que haja sucesso), condicional que p = 0,5, se torne:
(5⋅716+6⋅732+7⋅231704)2727−2=539=5.88889
A resposta de NcAdams usa uma variação dessa estratégia de regra de parada (cada vez que surgem dois novos lançamentos de moedas), mas não é a melhor escolha para todos os lançamentos.
A resposta de Clid também pode ser semelhante, embora possa haver uma regra de seleção desigual de que cada duas moedas vira um número que pode ser escolhido, mas não necessariamente com igual probabilidade (uma discrepância que está sendo reparada durante os lançamentos de moedas posteriores)
Comparação com outros métodos
Outros métodos que usam um princípio semelhante são os de NcAdams e AdamO.
O princípio é : Uma decisão para um número entre 1 e 7 é tomada após um certo número de caras e coroa. Após um número de inversões, para cada decisão que leva a um número existe uma decisão semelhante, igualmente provável, que leva a um número (o mesmo número de caras e coroa, mas apenas em uma ordem diferente). Algumas séries de cara e coroa podem levar a uma decisão de recomeçar.xij
Para esse tipo de método, o método colocado aqui é o mais eficiente, porque toma as decisões o mais cedo possível (assim que houver a possibilidade de 7 sequências de probabilidade igual de cara e coroa, após o ésimo giro, podemos usar eles tomam uma decisão sobre um número e não precisamos mudar mais se encontrarmos um desses casos).x
Isso é demonstrado pela imagem e simulação abaixo:
#### 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)
}
outra imagem dimensionada por para melhor comparação:p∗(1−p)
ampliar os métodos de comparação descritos neste post e comentários
o 'salto condicional do 7º passo' é uma ligeira melhora que pode ser feita na regra de parada antecipada. Nesse caso, você não seleciona grupos com probabilidades iguais após o sexto flips. Você tem 6 grupos com probabilidades iguais e 1 grupo com uma probabilidade ligeiramente diferente (para este último grupo, você precisa inverter mais um tempo extra quando tiver 6 caras ou coroa e porque você descarta as 7 caras ou 7 coroas) afinal, com a mesma probabilidade)
Escrito por StackExchangeStrike