Tạo đồng phục rời rạc từ lật đồng xu


9

Giả sử bạn có một đồng tiền công bằng mà bạn có thể lật bao nhiêu lần tùy ý (có thể là vô hạn). Là nó có thể tạo ra sự phân bố đồng đều rời rạc trên , nơi KHÔNG phải là một sức mạnh của 2? Bạn sẽ làm điều này như thế nào?(1,2,...,k)k

Nếu điều này quá chung chung, trả lời có lẽ sẽ đủ thú vị.k= =3


Chắc chắn rồi! Và, trường hợp thực sự là hướng dẫn. Hãy suy nghĩ về việc lật đồng xu theo cặp (lặp đi lặp lại, khi cần thiết). Các kết quả có thể là gì? Bây giờ, bạn có thể ánh xạ kết quả của kết quả của thủ tục này theo cách như vậy để có được phân phối mong muốn không? k= =3
Đức hồng y

Ô đúng rồi. Điều đó thật tuyệt. Ví dụ: HH = 1, HT = 2, TH = 3 và TT = Reflip các cặp. Hohoho, bây giờ tôi đang suy nghĩ về entropy từ các lần lật đồng xu và làm thế nào để thông tin từ các lần lật có thể được tối đa hóa (: Nhưng tôi sẽ tự làm điều đó!
renrenthehamster

Đây là một bài báo tuyệt vời với mã psuedo cho chính xác những gì bạn muốn làm: arxiv.org/pdf/1304.1916v1.pdf

1
Ôi(đăng nhập2k)đăng nhập2k1/2m

1
@ren: Vui lòng xem xét việc đưa ra câu trả lời dựa trên khám phá của bạn. Tôi, cho một, sẽ được hạnh phúc để upvote. Chúc mừng. :-)
hồng y

Câu trả lời:


5

Giống như tôi đã nói ở trên trong các bình luận của mình, bài báo http://arxiv.org/pdf/1304.1916v1.pdf , chi tiết chính xác cách tạo từ phân phối thống nhất rời rạc từ lật đồng xu và đưa ra phần chứng minh và kết quả rất chi tiết về lý do tại sao phương pháp hoạt động.

Như một bằng chứng về khái niệm, tôi đã mã hóa mã giả của họ Rđể cho thấy phương pháp của họ nhanh, đơn giản và hiệu quả như thế nào.

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.