Menghasilkan seragam diskrit dari membalik koin


9

Misalkan Anda memiliki koin yang adil yang dapat Anda balikkan sebanyak yang Anda inginkan (mungkin tak terhitung jumlahnya). Apakah mungkin untuk menghasilkan distribusi seragam diskrit pada , di mana BUKAN kekuatan 2? Bagaimana Anda melakukannya?(1,2,...,k)k

Jika ini terlalu umum, menjawab mungkin akan cukup menarik.k=3


Tentu! Dan, kasus sebenarnya bersifat instruktif. Pikirkan tentang membalik koin secara berpasangan (berulang kali, jika perlu). Apa hasil yang mungkin? Sekarang, dapatkah Anda memetakan hasil dari prosedur ini sedemikian rupa untuk mendapatkan distribusi yang diinginkan? k=3
kardinal

Oh benar Itu bagus. Misalnya, HH = 1, HT = 2, TH = 3, dan TT = reflip pasangan. Hohoho, sekarang saya sedang berpikir tentang entropi dari flip koin dan bagaimana informasi dari flip dapat dimaksimalkan (: Tapi saya akan melakukannya sendiri!
renrenthehamster

Berikut ini adalah makalah yang hebat dengan kode psuedo untuk apa yang ingin Anda lakukan: arxiv.org/pdf/1304.1916v1.pdf

1
@renrenthehamster: Ya, ini karena, jika kita mendefinisikan "sukses" sebagai memperoleh hasil yang valid dari membalik , maka probabilitas keberhasilan selalu . Jadi, jumlah percobaan tersebut adalah geometrik dengan rata-rata kurang dari atau sama dengan 2. Juga, probabilitas membutuhkan lebih dari percobaan tersebut menurun secara eksponensial. O(log2k)log2k1/2m
kardinal

1
@ um: Silakan pertimbangkan merumuskan jawaban berdasarkan penemuan Anda. Saya, untuk satu, akan senang untuk mengangkat. Bersulang. :-)
cardinal

Jawaban:


5

Seperti yang saya katakan di atas dalam komentar saya, makalah http://arxiv.org/pdf/1304.1916v1.pdf , rincian persis bagaimana menghasilkan dari distribusi seragam diskrit dari koin membalik dan memberikan bagian bukti dan hasil yang sangat rinci mengapa metode bekerja.

Sebagai bukti konsep saya mengkodekan kode semu mereka Runtuk menunjukkan seberapa cepat, sederhana dan efisien metode mereka.

#Function for sampling from a discrete uniform distribution
rdunif = function(n){

v = 1 
c = 0
a = 0
while(a > -1){
    v = 2*v
    c = 2*c + rbinom(1,1,.5) #This is the dice roll part

    if(v >= n){
        if(c < n){
            return(c)
        }else{
            v = v-n
            c = c-n
        }
    }
}
}

#Running the function k times for n = 11
n = 11
k = 10000
random.samples = rep(NA,k)

for(i in 1:k){
    random.samples[i] = rdunif(n)
}

counts = table(random.samples)
barplot(counts,main="Random Samples from a Discrete Uniform(0,10)")

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.