Zeka Oyunları: pr (kafa) = p değerine sahip önyargılı bir bozuk para kullanarak eşit olasılıkla 7 tam sayı nasıl oluşturulur?


58

Bu, Glassdoor'da bulduğum bir sorudur : bir jeton kullanarak eşit olasılıkla 7 tam sayı nasıl üretilir ?Pr(Head)=p(0,1)

Temel olarak, adil olabilecek veya olmayabilir bir madeni paranız var ve bu, sahip olduğunuz tek rastgele sayı üreten işlemdir, yani 1'den 7'ye tamsayılar çıkaran rastgele sayı üreteci ile gelir; 1/7.

Verilerin üretilmesi süreç sorunları yaratıyor.



12
Bunu başarmanın sayısız yolu var. Sorunun daha ilginç bir sürümü, iyi tanımlanmış bir anlamda en iyi yöntemi ister . Doğal bir en iyi duygusu, üretilen tamsayı başına en az beklenen kaçma olacaktır . Başka bir ilginç versiyon, tüm olası çözümleri tanımlamaktır (madalyonun bağımsız kliplerine dayanır ve başka bir şey yapmaz).
whuber

1
@whuber iyi öneri, yorumunuzu yansıtacak şekilde soruyu düzenledim.
Amazonian,

<<< Temel olarak, adil olan veya olmayan bir madeni paranız var ve bu, sahip olduğunuz tek rastgele sayı üreten işlemdir. >>> Bu, madeni parayı çevirmek ve kafa aramaktan başka bir yöntemde kullanmak anlamına gelir mi? kuyruğa karşı "yasak", çünkü başka bir rasgele sayı üreten işlem olabilir?
TinglTanglBob

9
Bozuk para üzerinde yılın Mod 7'si.
Nat

Yanıtlar:


56

Bozuk parayı iki kere çevirin. İnerse HHya da TTyoksay ve tekrar iki kez çevir.

Şimdi, bozuk para geliyor eşit olasılığa sahip HTveya TH. Eğer gelirse HT, bunu ara H1. Eğer gelirse TH, bunu ara T1.

Elde etmeye H1veya T1art arda üç tane alana kadar. Bu üç sonuç size aşağıdaki tabloya göre bir numara verir:

H1 H1 H1 -> 1
H1 H1 T1 -> 2
H1 T1 H1 -> 3
H1 T1 T1 -> 4
T1 H1 H1 -> 5
T1 H1 T1 -> 6
T1 T1 H1 -> 7
T1 T1 T1 -> [Throw out all results so far and repeat]

Sürecinde çok fazla boşa harcamış olsanız da, bunun mükemmel bir şekilde işe yarayacağını savunuyorum!


4
Tek kısıtlama, kafaların olasılığının "p" olmasıdır. P'nin veya olabileceğini unutmayın . Bu yüzden bunun işe yarayacağı garanti edilmiyor, ancak Sycorax'ın (veya Sephan'ın) bu durumlarda bile işe yarayacağını söyledi. 101
gung - Reinstate Monica

8
@gung: İki başlı veya iki kuyruklu bir madeni para için çalışacağımdan emin değilim.
S. Kolassa - Monica'yı yeniden kurun

6
Olasılık ile sonlu bir süre içinde bitecektir. 1
clark

18
Buna Von-Neuman beyazlaması denir.
DonFusili

4
Diziden entropiyi daha tam olarak çıkarmak için von Neumann çıkarıcısını yineleyebilirsiniz. Tüm HH ve TT çiftleri toplayın, .. bir dizi, vs, buna von Neumann çıkarıcı geçerli olduğunu düşünün
Bir Simmons

47

Farz edelim ki .p(0,1)

Aşama 1: . Bozuk parayı 5 kez at.

Sonuç ise

1(H,H,H,T,T) , döndür ve dur.1

2(H,H,T,T,H) , döndür ve dur.2

3(H,T,T,H,H) , döndür ve dur.3

4(T,T,H,H,H) , döndür ve dur.4

5(T,H,H,H,T) , döndür ve dur.5

(H,H,T,H,T) , ve dur.6

(H,T,H,T,H) , ve dur.7

Aşama 2: . Sonuç yukarıdakilerin hiçbiri değilse, 1. Adımı tekrarlayın.

değerinden bağımsız olarak, yukarıda listelenen yedi sonucun her birinin olasılığına sahip olduğunu ve beklenen madeni para sayısının . Atıcı, değerini bilmek zorunda değildir ( ve hariç ); Yedi tamsayının, deney sona erdiğinde deney tarafından geri dönmesi muhtemel olduğu garanti edilir (ve olasılık ile bitmesi garanti edilir ).p(0,1)q=p3(1p)257qpp0p11


6
Bunun için beklenen atılma sayısını azaltabilir miyiz, burada belirtilen dizilimin VEYA her bir çevirme ters çevrildiğinde bu dizilimin oluşmasına izin verebiliriz. örneğin: 1 için, (H, H, H, T, T) veya (T, T, T, H, H)?
moreON

5
Tamamlayıcıyı da ekleyebilirsiniz. Sonuç (H, H, H, T, T) veya (T, T, T, H, H) ise, 1 döndürün ve durdurun, vb. İse. Bu durumda her sonucun olasılığı . q=p3(1p)2+p2(1p)3
Sextus Empiricus,

2
Sonuç herhangi bir (H, H, H, T, T) düzenlemesine uymuyorsa, başka bir yazı tura eklemek mümkün olmaz mıydı? Ek bozuk para atma ile (H, H, H, T, T, T) ve (H, H, T, T, T, T) ve her xT (7-x) H kombinasyonunun başka bir eşlemesine ihtiyacınız olacak 7 veya daha fazla farklı düzende 1 ila 7 arasındaki rakamlara göre düzenlenebilir. 5 jetonun tümünü tekrar kullanmak yerine, bu sadece 1 ek atma ekler, ancak çalıştığından emin değilim: D
TinglTanglBob

5
Belki bozuk parayı 7 kez anında çevirmek en iyisi olabilir, çünkü garanti edildiğinden, rastgele bir sayı elde edersiniz (bu nedenle, istisna, madalyonun 7 denemenin üstüne çıkması ya da kuyruğunda kalmasıdır) . Böylece 7 fırlatma ile 1'e 6 kafa kaldırabilirsiniz (anlamsız olduğu için burada 0 ve 7 seçeneğini hariç tutuyorum). Bir kafanın 7 farklı düzenlemesi varsa (H, T, T, T, T, T, T) mümkün; 2, onun 21 kafa; eğer 3 onun 35’i geçerse; 4 35 kafa ise; eğer 5 21 kafa; eğer 6 7 kafa; Her biri, herhangi bir kombinasyon kaybedilmeden, 1-7 numarasına mükemmel şekilde eşlenebilir.
TinglTanglBob

2
@TinglTanglBob Bu aslında Martijn Weterings'in cevabı ;-)
M.Herzkamp

22

Dilip Sarwate tarafından açıklanan durumun genelleştirilmesi

Diğer cevaplarda açıklanan yöntemlerden bazıları, bir 'sırayla' n jeton dizisi attığınız bir şema kullanır ve sonucuna bağlı olarak 1 veya 7 arasında bir sayı seçersiniz ya da dönüşü atar ve tekrar atılır.

Hile olasılıklar genişleme aynı olasılığı ile 7 sonuçların bir çoklu bulmaktır pk(1p)nk ve birbirlerine karşı eşleşir.

Toplam sonuç sayısı 7'nin katı olmadığı için, bir sayıya atamayacağımız birkaç sonucumuz var ve sonuçları atmamız ve baştan başlamamız gereken bir olasılık var.


Tur başına 7 jeton kullanma vakası

Sezgisel olarak, zarları yedi kez çevirmenin çok ilginç olacağını söyleyebiliriz. Zira sadece 27 olasılıktan 2'sini atmamız gerekiyor. Yani, 7 kez kafa ve 0 kez kafa.

Diğer tüm 272 olasılıkları için, her zaman aynı sayıda kafaya sahip olan 7 vakadan oluşan bir durum vardır. Yani 1 başlı 7 olgu, 21 başlı 2 olgu, 3 başlı 35 olgu, 4 başlı 35 olgu, 5 başlı 21 olgu ve 6 başlı 7 olgu.

Yani sayıyı hesaplarsanız (0 kafa ve 7 kafa atılarak)

X=k=17(k1)Ck

ile Ck Bernoulli dağıtılmış değişkenler (0 ya da 1) yedi sonuç ile, X modülo 7 muntazam bir değişken.


Tur başına farklı sayıdaki jeton çevirilerinin karşılaştırılması

Her soru, tur başına en uygun rulo sayısının ne olacağı yönündedir. Tur başına daha fazla zar atmak size daha pahalıya mal olur, ancak tekrar yuvarlanma olasılığını düşürürsünüz.

Aşağıdaki resimde, dönüş başına ilk birkaç madeni para basma sayısı için manuel hesaplamalar gösterilmektedir. (muhtemelen analitik bir çözüm olabilir, ancak 7 madeni para klipsi olan bir sistemin gerekli madeni para klipsi için beklenen değere ilişkin en iyi yöntemi sağladığını söylemenin güvenli olduğuna inanıyorum)

beklenen madeni para basma sayısı

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

Erken bir durma kuralı kullanma

not: Aşağıdaki hesaplamalar, fiş sayısının beklenti değeri için, adil bir para için p=0.5 , farklı p için bunu yapmak karışıklık yaratacaktır , ancak ilke aynı kalmaktadır (farklı kitapların tutulması rağmen) davalar gerekli)

Daha önce durdurabileceğimiz durumları ( X formülü yerine ) seçebilmeliyiz.

  • 5 jetonlu çevirme ile altı olası farklı sıralanmamış kafa ve kuyruk kümesi için elimizde:

    1 + 5 + 10 + 10 + 5 + 1 sipariş setleri

    Ve (eşit olasılıkla) bir sayı seçmek için on olgulu (2 kafalı grup veya 2 kuyruklu grup) olan grupları kullanabiliriz. Bu, 2 ^ 5 = 32 vakanın 14'ünde meydana gelir. Bu bize ile bırakır:

    1 + 5 + 3 + 3 + 5 + 1 sipariş setleri

  • Ekstra (6'lık) bir jetonlu çevirme ile yedi farklı sıralanmamış kafa ve kuyruk grubuna sahibiz:

    1 + 6 + 8 + 6 + 8 + 6 + 1 sipariş setleri

    Ve (eşit olasılıkla) bir sayı seçmek için sekiz durumlu (3 kafalı grup veya 3 kuyruklu grup) olan grupları kullanabiliriz. Bu, 2'den 14'ünde * olur (2 ^ 5-14) = 36 vaka. Bu bize ile bırakır:

    1 + 6 + 1 + 6 + 1 + 6 + 1 sipariş setleri

  • Başka bir (7'nci) ekstra jetonlu çevirme ile sekiz olası farklı sıralanmamış kafa ve kuyruk kümesi için elimizde:

    1 + 7 + 7 + 7 + 7 + 7 + 7 + 1 sıralı ayarlar

    Ve (eşit olasılıkla) bir sayı seçmek için yedi durumlu grupları (tüm kuyruklar ve tüm kafalar hariç) kullanabiliriz. Bu 44 vakadan 42'sinde meydana gelir. Bu bize ile bırakır:

    1 + 0 + 0 + 0 + 0 + 0 + 0 + 1 sıralı setleri

    (buna devam edebiliriz, ancak sadece 49. adımda bu bize bir avantaj sağlıyor)

Yani bir sayı seçme olasılığı

  • 5 flişte 1432=716
  • 6 çırpıda 9161436=732
  • saat 7'de 11324244=231704
  • 7 klipte değil 1716732231704=227

Bu, bir turdaki sayılar için beklenti değerini yapar, başarı olması şartına bağlıdır ve p = 0.5:

5716+6732+7231704=5.796875

Toplam çevirme sayısının beklenti değeri (başarılı oluncaya kadar), p = 0,5 olması koşuluyla şöyle olur:

(5716+6732+7231704)27272=539=5.88889


NcAdams tarafından verilen cevap, bu durdurma kuralı stratejisinin bir çeşitlemesini kullanır (her seferinde iki yeni yazı turasıyla gelir), ancak tüm kopyaları en iyi şekilde seçmez.

Her iki madalyonun bir rakamı atacağı dengesiz bir seçim kuralı olsa da, Clid'in cevabı da benzer olabilir, ancak eşit olasılıkla zorunlu olmayabilir (daha sonra madalyonun fişi sırasında tamir edilen bir tutarsızlık)


Diğer yöntemlerle karşılaştırma

Benzer bir prensip kullanan diğer yöntemler NcAdams ve AdamO tarafından kullanılan yöntemlerdir.

İlke : Belli sayıda kafa ve yazıdan sonra 1 ile 7 arasında bir sayı kararı verilir. Bir sonra, x bir sayıya neden olmaktadır her karar için çevirir sayısı, i bir sayı neden benzer eşit muhtemel karar vardır j (baş ve kuyruk ama sadece farklı bir sırayla aynı sayıda). Bazı kafa ve kuyruk serileri baştan başlamak için bir karar verebilir.

O an başlar ve kuyruklar 7 eşit olasılık dizileri için bir olasılık var gibi (mümkün olduğunca erken kararlar nedeniyle yöntemlerin böyle türü için buraya yerleştirilen bir sonra en verimli x -inci kapak, biz kullanabilirsiniz bir sayı hakkında karar vermek için onları ve bu davalardan biriyle karşılaşırsak daha fazla çevirmemize gerek kalmaz).

Bu, aşağıdaki resimde ve simülasyonda gösterilmektedir:

karşılaştırma

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

daha iyi karşılaştırma için p(1p) tarafından ölçeklendirilen başka bir resim :

Ölçeklenmiş beklenti değerleri ile karşılaştırılması

Bu yayında açıklanan yöntemleri ve yorumları karşılaştırarak yakınlaştır

Burada açıklanan karşılaştırma yöntemleri

'7. adımın şartlı atlanması' erken durma kuralında yapılabilecek hafif bir gelişmedir. Bu durumda, 6'ncı fişlerden sonra eşit olasılıktaki grupları seçemezsiniz. Eşit olasılıklara sahip 6 grubunuz ve biraz farklı olasılıklara sahip 1 grubunuz var (bu son grup için, 6 kafa veya kuyruk varken bir fazladan fazla zaman ayırmanız gerekir ve 7 kafa veya 7 yazıyı attığınız için sonuçta aynı olasılıkla)


StackExchangeStrike tarafından yazıldı.


N = 7 durum için hesaplamaları yapmaya başlamıştım, çünkü n = 1'den daha iyi olabileceğini düşündüm. Benim için oyum var efendim!
M.Herzkamp

CkX

Bu nedenle, geliştirme, gerekli madeni para sayısının sayısı için beklenti değeri olarak, 6 madeni para frezesinin biraz altına düşürür. Bunun en uygun çözüm olduğunun kanıtı olsa da değişebilir . Clid tarafından yaratılan şema, belirli bir yazı tura sayısında bir sayı seçilmesine izin veren, ancak eşit olasılıkta olmayan bir bit saptırır (en azından bu aşama için değil, daha sonra düzeltilecektir).
Sextus Empiricus,

Ancak, altıncı madalyonu ilk beş sonuç üzerinden çevirip çevirmeyeceğinize karar verirseniz, her bir kümenin olasılıkları, diğer kümelerde olduğu gibi, altı kez atmanız gerekir.
Birikim

@ Birikimi 7 seviyeli bir ikili ağaç olarak çizebilirsiniz. Sadece eşit olasılıkla 7 varsa, düğümler arasında seçim yapacağız. Daha önce bazı dalları kesmeniz gibi (seviye 5 veya 6'da). İsterseniz daha önce yerine 7 adıma kadar devam edebilirsiniz, ancak bu özel durumlar için 6. ve 7. madeni para çevirme bir fark yaratmaz.
Sextus Empiricus,

20

Bir kutuyu, her biri bir tamsayı ile etiketlenmiş yedi eşit alanlı bölgeye bölün. Bozuk parayı kutuya, her bölgeye eşit iniş ihtimaline sahip olacak şekilde atın.

π

p=1p=0


2
Önyargıyı çevirmeyi, duvarları zıplatmayı vb. En aza indirgemek için kutuyu yedi eşit alanlı bölgeye bölmenin bir yolunu önerebilir misiniz? Açı 360/7 Yedi sektör?
smci

1
@smci Bu yüzden parayı atmanız gerektiğini ve böylece her kareye eşit bir iniş ihtimalinin geleceğini belirtiyorum. Bir duvardan sıçramak bu olasılığı etkiliyorsa, fırlatırken hesaba katmanız gerekir.
Monica'yı

17
Evet, bunu biliyorum ve size şunu belirtiyorum, basitçe "bunu tarafsız bir şekilde atmak" demenin tam olarak nasıl başarılacağını tanımlamaksızın, tam bir cevap olmadığını ... bu durumda saygısız H / T tabanlı yöntemler üstündür.
smci

1
"Her bölgeye eşit iniş ihtimaline sahip olan atışlarla eşit alanların" pratikte belirlenmesi zor olabilir. Uygulamada, çok sayıda "uygulama koşusu" nu işaretlemek ve daha sonra iniş alanını ampirik olarak eşitlenebilir alanlara bölmek daha kolay olabilir (örneğin, 700 atışla, en uzak 100 atıştan sıyrılan bir çizgiyi hükümsüz kılar, daha sonra bir sonraki 100 vb.) Tek bir rastgele bit üretmek için bunun basitleştirilmesi, madalyonun iki kez atılması olacaktır - ilk atış daha ileri giderse, bit 0ve ikinci atış daha ileri giderse, bu bir1
Silverfish

4
@ TheScienceBoy tarafından, buna ilginç bir alternatifle ne yazık ki silinen - etkili bir şekilde, madalyonu döndürücü olarak kullanarak ve çevresi boyunca 7 bölümü işaret eden - bu cevabın ruhunu koruyan ancak fiziksel olarak daha kolay olabilen güzel bir cevap var. gerçekleştirmek için!
Silverfish,

8

EDIT: başkalarının geri bildirimlerine dayanarak.

İşte ilginç bir düşünce:

{1,2,3,4,5,6,7} listesini ayarlayın. Listedeki her öğe için bozuk parayı sırayla atın. Belirli bir eleman için baş tarafı yukarı gelirse, numarayı listeden kaldırın. Listedeki belirli bir yinelemedeki tüm sayılar kaldırılırsa, örneklemeyi tekrarlayın. Bunu sadece bir numara kalana kadar yapın.

drop.one <- function(x, p) {
  drop <- runif(length(x)) < p
  if (all(drop))
    return(x)
  return(x[!drop])
}

sample.recur <- function(x, p) {
  if (length(x) > 1)
    return(sample.recur(drop.one(x, p), p))
  return(x)
}

# x <- c(1:7,7:1)
x <- 1:7
p <- 0.01

out <- replicate(1e5, sample.recur(x, p))

round(prop.table(table(out)), 2)

bana yaklaşık olarak tek tip bir dağılım verir

> round(prop.table(table(out)), 2)
out
   1    2    3    4    5    6    7 
0.14 0.14 0.15 0.14 0.14 0.14 0.14 

N


Bozuk para atma sayısı için beklenti değerinin değerlendirilmesi

xy

M=[q700000117p1q6q600000021p2q56p1q5q50000035p3q415p2q45q4q4000035p4q320p3q310p2q34p1q3q300021p5q215p4q210p3q26p2q23p1q2q2007p6q16p5q15p4q14p3q13p2q12p1q100p7p6p5p4p3p200]

(MI)v=0

E(n)=247p(1p)

Madeni Para Fişleri için Beklenti Değerinin Karşılaştırılması

p>2/3

WxMaxima ile bulunan çözüm

M: matrix(
 [(1-p)^7,        0,          0,0,0,0,1,1], 
 [7* p*(1-p)^6,   (1-p)^6,        0,0,0,0,0,0], 
 [21*p^2*(1-p)^5, 6*p*(1-p)^5,    (1-p)^5,0,0,0,0,0], 
 [35*p^3*(1-p)^4, 15*p^2*(1-p)^4, 5*p*(1-p)^4,(1-p)^4,0,0,0,0], 
 [35*p^4*(1-p)^3, 20*p^3*(1-p)^3, 10*p^2*(1-p)^3,4*p*(1-p)^3,(1-p)^3,0,0,0], 
 [21*p^5*(1-p)^2, 15*p^4*(1-p)^2, 10*p^3*(1-p)^2,6*p^2*(1-p)^2,3*p*(1-p)^2,(1-p)^2,0,0], 
 [7* p^6*(1-p)^1, 6*p^5*(1-p),    5*p^4*(1-p),4*p^3*(1-p),3*p^2*(1-p),2*(1-p)*p,0,0], 
 [p^7,        p^6,        p^5,p^4,p^3,p^2,0,0]
);
z: nullspace(M-diagmatrix(8,1));
x : apply (addcol, args (z));
t : [7,6,5,4,3,2,0,0];
plot2d(t.x/x[7],[p,0,1],logy);

R hesaplamaları

# plotting empty canvas
plot(-100,-100,
     xlab="p",
     ylab="E(total flips)",
     ylim=c(10,1000),xlim=c(0,1),log="y")

# plotting simulation
for (p in seq(0.1,0.9,0.05)) {

  n <- rep(0,10000)
  for (i in 1:10000) {
    success  = 0
    tests = c(1,1,1,1,1,1,1)     # start with seven numbers in the set
    count = 0
    while(success==0) {
      for (j in 1:7)  {
        if (tests[j]==1) {
          count = count + 1
          if  (rbinom(1,1,p) == 1) {
            tests[j] <- 0        # elliminate number when we draw heads
          }
        }
      }
      if (sum(tests)==1) {
        n[i] = count
        success = 1              # end     when 1 is left over
      }
      if (sum(tests)==0) {
        tests = c(1,1,1,1,1,1,1) # restart when 0 are left over
      }
    }
  }
  points(p,mean(n))
}

# plotting formula
p <- seq(0.001,0.999,0.001)

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)

#plotting comparison with alternative method
lines(p,3*8/7/(p*(1-p)),lty=2)

legend(0.2,500,
       c("simulation","calculation","comparison"),
       lty=c(0,1,2),pch=c(1,NA,NA))

1
Zekice bir fikir (+1). Sezgisel olarak, çalışması gerekir, çünkü simetri herhangi bir sayıya doğru önyargıyı geçersiz kılıyor gibi görünmektedir. Yine de bir kanıt görmeyi çok isterim.
Monica'yı

6
Bu fikir gerçekten güzel, ama kafa için yüksek bir olasılıkla (bu sayıyı düşürmek) sıradaki son sayının "hayatta kalmak" için en iyi şansa sahip olduğunu düşünüyorum, çünkü infront tüm diğerleri kaçmadan önce çok büyük olasılıkla kovuldular. Belki sırayla bozuk para fırlatıp değil, x'deki tüm sayılar için paralel olarak değiştirilebilir. Betiğin çalışma zamanı artabilir sanırım :)
TinglTanglBob

2
@TinglTanglBob ile aynı fikirdeyim - set p <- 0.99ettiğimde çıktıyı alıyorum0.89 0.02 0.02 0.02 0.02 0.02 0.02
Silverfish

6
'Turda' eleme işlemi yanlılık sorununu çözmez miydi? 7 sayıyla başlayın. Kalan her sayı için yazı tura atın ve kafa atanları eleyin. Kalan tüm sayılar bir turda elenirse, o turun sonuçlarını çizin ve tekrar deneyin. Bunu nasıl ispatlayacağımı bilmiyorum, ama sezgisel olarak sayıların sırası artık 'kazanan' olup olmadıklarıyla ilgili değil
Phil

1
p=0.01

5

Bu soru biraz belirsizdir, "eşit olasılıkla 7'ye eşit veya daha az rastgele bir tamsayı üretmek" mi, yoksa "eşit olasılıkla 7 rasgele tamsayı üretmek" mi soruyor? - ama tamsayıların alanı nedir?

Eski olduğunu varsayıyorum, ancak uyguladığım aynı mantık, bu sorun çözüldükten sonra ikinci duruma da genişletilebilir.

Taraflı bir bozuk parayla, aşağıdaki prosedürü uygulayarak adil bir para oluşturabilirsiniz: https://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin

7 veya daha az bir sayı, iki {0,1} basamak olarak ikili olarak yazılabilir. Bu nedenle, tek yapmanız gereken yukarıdaki prosedürü üç kez uygulamak ve üretilen ikili sayıyı tekrar ondalık basamağa dönüştürmektir.


1
cevabımı @NcAdams ile karşılaştırarak, olası bir sonuç olarak 0 dahil ediyorum.
Cam.Davidson.Pilon

Cevabının nasıl farklı olduğunu anlamıyorum. {0,0,0} -> 1 eklerseniz, {1,1,1} neyle eşleşir? 8 olasılık var.
AdamO

1
000, 0 ile eşleşir, bu yüzden benim yorumum 0 olabilir. Bu OP düzenlemeden önce ve neredeyse aynı anda NcAdams olarak yayınlandı.
Cam.Davidson.Pilon

Bu cevabın yarısı bir yorumdur ve cevabın asıl içeriği yalnızca bağlantıdır. Lütfen sadece cevap vermek yerine gerçek cevabınızı yazınız.
Cubic

3

Asla boşa gitmeyen bir çözüm çok taraflı paralar için çok yardımcı oluyor.

Bu algoritmanın dezavantajı (en azından yazıldığı gibi) keyfi-aritmetik kullanmasıdır. Pratik olarak, muhtemelen tamsayı taşana kadar kullanmak isteyeceksiniz ve ancak o zaman atıp baştan başlayın.

Ayrıca, önyargı bilmemiz gerekiyor ise o sıcaklığa bağlı en fiziksel fenomenlerin gibi ise, hangi diyelim ki, olmayabilir ....


Baş şansının% 30 olduğunu varsayarsak.

  • Menzil ile başlayın [1, 8).
  • Paranı çevir. Kafalarsa, sol% 30'u kullanın, yani yeni seriniz [1, 3.1). Aksi halde, doğru% 70 kullanın, yani yeni ürün seriniz [3.1, 8).
  • Tüm aralık aynı tamsayıya sahip olana kadar tekrarlayın.

Tam kod:

#!/usr/bin/env python3
from fractions import Fraction
from collections import Counter
from random import randrange


BIAS = Fraction(3, 10)
STAT_COUNT = 100000


calls = 0
def biased_rand():
    global calls
    calls += 1
    return randrange(BIAS.denominator) < BIAS.numerator


def can_generate_multiple(start, stop):
    if stop.denominator == 1:
        # half-open range
        stop = stop.numerator - 1
    else:
        stop = int(stop)
    start = int(start)
    return start != stop


def unbiased_rand(start, stop):
    if start < 0:
        # negative numbers round wrong
        return start + unbiased_rand(0, stop - start)
    assert isinstance(start, int) and start >= 0
    assert isinstance(stop, int) and stop >= start
    start = Fraction(start)
    stop = Fraction(stop)
    while can_generate_multiple(start, stop):
        if biased_rand():
            old_diff = stop - start
            diff = old_diff * BIAS
            stop = start + diff
        else:
            old_diff = stop - start
            diff = old_diff * (1 - BIAS)
            start = stop - diff
    return int(start)


def stats(f, *args, **kwargs):
    c = Counter()
    for _ in range(STAT_COUNT):
        c[f(*args, **kwargs)] += 1

    print('stats for %s:' % f.__qualname__)
    for k, v in sorted(c.items()):
        percent = v * 100 / STAT_COUNT
        print('  %s: %f%%' % (k, percent))


def main():
    #stats(biased_rand)
    stats(unbiased_rand, 1, 7+1)
    print('used %f calls at bias %s' % (calls/STAT_COUNT, BIAS))


if __name__ == '__main__':
    main()

3
[0,1]00006666k

Bu tek bir çıktı için aynıdır, değil mi? Sadece çoklu için daha iyi? diff *= 7Düşündüğüm gibi yazdım ... aslında, her denemede aynı temeli kullanmaya gerek yok.
o11c

Evet, tek bir çıktı almak istiyorsanız aynıdır; sadece birden fazla olanı istiyorsanız verimliliği arttırır.
Federico Poloni

pp

Tek bir çıktı istiyorsanız, bu kesinlikle atık atıkları yapar. Adil bir para için, standart teknik (parayı üç kez yuvarlayın ve TTT alırsanız tekrarlayın), 24/7 = 3 + 3/7 rulo beklenen bir sayı verir. Bu aritmetik kodlama stili tekniği kullanırsanız, HHH veya TTT almadığınız sürece en az dört kez yuvarlanırsınız; bu, size 15/4 = 3 + 3/4 rulodan daha fazla beklenen bir sayı verir.
Peter Shor

3

Daha önceki yorumlarda belirtildiği gibi, bu bildiri , Ulusal Standartlar Bürosu araştırma dergisinde yayınlanan John von Neumann'ın 1951 tarihli "Rastgele Rakamlarla Bağlantılı Kullanılan Çeşitli Teknikler" adlı makalesi ile ilgilidir :

görüntü tanımını buraya girin

pf(p)f f(p)=min{1,2p}N Denemelerin


2

p1p0

İlk önce (muhtemelen) haksız madeni parayı NcAdams'ın cevabındaki süreci kullanarak adil bir paraya dönüştürüyoruz :

Bozuk parayı iki kere çevirin. İnerse HHya da TTyoksay ve tekrar iki kez çevir.

Şimdi, bozuk para geliyor eşit olasılığa sahip HTveya TH. Eğer gelirse HT, bunu ara H1. Eğer gelirse TH, bunu ara T1.

01H1=1T1 =00.H1 H1 T10.110

1/7

1/7=0.001001001...

2/7=0.010010010...

3/7=0.011011011...

4/7=0.100100100...

5/7=0.101101101...

6/7=0.110110110...

nn/7(n-1)/717


1
1/7

1
1/7Σk=1(1/8)k=17

1
nT(n)=2n-62nn3
3+Σn=31-T(n)=4.5
87*33.42

2

AdamO'nun cevabından ilham alan, önyargıdan kaçınan bir Python çözümü

def roll(p, n):
    remaining = range(1,n+1)
    flips = 0
    while len(remaining) > 1:
        round_winners = [c for c in remaining if random.choices(['H','T'], [p, 1.0-p]) == ['H']]
        flips += len(remaining)
        if len(round_winners) > 0:
            remaining = round_winners
        p = 1.0 - p
    return remaining[0], flips

Burada iki ana değişiklik vardır: Asıl olan, tüm sayılar bir turda atılırsa, turu tekrarlayın. Ayrıca kafaların veya kuyrukların her seferinde atılıp atılmayacağı seçimini değiştiriyorum. Bu, p = 0.999 olduğunda p'nin 0 veya 1'e yakın olduğu durumlarda gereken% ~ ~ 70 oranında gerekli olan kaçma sayısını azaltır.


2
“Yazıların veya kuyrukların her seferinde atmak anlamına gelip gelmediği seçimini değiştiriyorum. Bu, p = 0.999 olduğunda p'nin 0'a veya 1'e yakın olduğu durumlarda gerekli olan kaydırma sayısını azaltır -% 70.
Silverfish,

1
Değişken kafalar veya kuyruklar, kafaları atmaktan her zaman kesinlikle daha iyi bir gelişmedir - belki de, kalan her bir seçenek için yazı tura attıktan sonra, eğer hepsi aynıysa, hepsini düzeltirsek, en azından varsa Kuyruklar gibi birçok kafa, başlıklara karşılık gelen kalan seçenekleri ortadan kaldırır, aksi takdirde kuyruklara karşılık gelen kalan seçenekleri ortadan kaldırırız.
David Cary,

2

Görünen biz her zaman biz çevirmek her flip sonucun eşlemeyi değiştirmek için izin verilir . Bu nedenle, ilk yedi pozitif tamsayıların rahatlığı için aşağıdaki emirleri veriyoruz:

'H1
'H2

'H7
'H1

vb

T


birPT

PbirP(oluşturulmuş tam sayı yok)=(1-p)7

N-b

MiktarbirP(yararsız çevirir)7N-b(1-p)7

B(p,n=5)p3(1-p)2

PDS(oluşturulmuş tam sayı yok)=1-7p3(1-p)2

İşe yaramaz çevirilerin sayısı burada

MiktarDS(yararsız çevirir)5N-b[1-7p3(1-p)2]

birP

MiktarbirP(yararsız çevirir)<MiktarDS(yararsız çevirir)

7N-b(1-p)7<5N-b[1-7p3(1-p)2]

7(1-p)7<5[1-7p3(1-p)2]

p>0,0467birP

pbirPDSp0,5967

MiktarbirP(yararsız çevirir)MiktarDS(yararsız çevirir)

0.67p=0.10.3p=0.20.127p=0.4


p(0,1)

1
@Sycorax Bir şey ekledim, ancak önerdiğiniz satırlar boyunca olduğundan emin değilim.
Alecos Papadopoulos,

'H

1
1,2,3,4,5,6,7 eşit miktarda herhangi bir dizilim olan (son derece sahte) "rasgele" sayı üreticisinin bu yorumuna girerseniz, o zaman herhangi bir madeni parayı çeviremezsiniz ve doğrudan sayısındaki hane sırasını alın12345679999999

1
p17p
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.