Có và không, tùy thuộc vào ý của bạn bởi cách mà thôi. Có, trong đó không có phương pháp nào được đảm bảo chấm dứt, cách tốt nhất bạn có thể làm (đối với các giá trị chung của và ) là một thuật toán kết thúc với xác suất 1. Không, trong đó bạn có thể làm cho chất thải của Thiêu là nhỏ như bạn thíchRNR
Tại sao nói chung chấm dứt bảo đảm là không thể
Giả sử rằng bạn có một động cơ tính toán xác định (một máy Turing hay bất cứ điều gì nổi thuyền của bạn), cộng với một lời sấm mà tạo ra các yếu tố ngẫu nhiên của bộ -element . Mục tiêu của bạn là tạo ra một phần tử của tập -element . Đầu ra của động cơ của bạn chỉ phụ thuộc vào chuỗi các giá trị được trả về bởi nhà tiên tri; đó là một hàm của chuỗi có khả năng vô hạn đó .[ 0 .. R - 1 ] N [ 0 , N - 1 ] f ( r 0 , r 1 , r 2 , Lối )R[0..R−1]N[0,N−1]f(r0,r1,r2,…)
Giả sử rằng động cơ của bạn gọi nhà tiên tri nhiều nhất là lần. Có thể có dấu vết mà nhà tiên tri được gọi ít hơn lần; nếu vậy, việc gọi orory thêm lần để nó luôn được gọi chính xác là lần không làm thay đổi đầu ra. Vì vậy, không mất tính tổng quát, chúng tôi giả định rằng nhà tiên tri được gọi chính xác là lần. Khi đó xác suất của kết quả là số lượng chuỗi sao cho . Vì nhà tiên tri là một máy phát ngẫu nhiên đồng nhất, mỗi chuỗi có thể được trang bị và có xác suất . Do đó xác suất của mỗi kết quả có dạngm m m x ( r 0 , ... , r m - 1 ) f ( r 0 , ... , r m - 1 ) = x 1 / R m Một / R m Một 0 R mmmmmx(r0,…,rm−1)f(r0,…,rm−1)=x1/RmA/RmTrong đó là một số nguyên nằm trong khoảng từ đến .A0Rm
Nếu chia cho một số , thì bạn có thể tạo phân phối đồng đều trên phần tử bằng cách gọi bộ tạo ngẫu nhiên lần (điều này được để lại như một bài tập cho người đọc). Nếu không, điều này là không thể: không có cách nào để có được một kết quả với xác suất . Lưu ý rằng điều kiện này tương đương với việc nói rằng tất cả các yếu tố chính của cũng là các yếu tố của (điều này dễ dàng hơn so với những gì bạn đã viết trong câu hỏi của mình; ví dụ: bạn có thể chọn một yếu tố ngẫu nhiên trong số 4 với hội chợ 6 mặt chết, mặc dù 4 không chia 6).R m m N m 1 / N N RNRmmNm1/NNR
Giảm chất thải
Trong chiến lược của bạn, khi , bạn không phải vẽ lại ngay lập tức. Theo trực giác, có một chút entropy còn lại trong mà bạn có thể giữ trong hỗn hợp.[ kr≥kN[kN..R−1]
Giả sử trong một khoảnh khắc rằng trên thực tế bạn sẽ tiếp tục tạo các số ngẫu nhiên dưới mãi mãi và bạn tạo ra của chúng tại một thời điểm bằng cách thực hiện rút thăm . Nếu bạn thực hiện lấy mẫu từ chối đơn giản trên thế hệ được nhóm này, chất thải trên rút ra là , tức là phần còn lại chia cho số lần rút. Điều này có thể ít như . Khi và là nguyên tố cùng nhau, bạn có thể làm cho chất thải nhỏ tùy ý bằng cách chọn các giá trị đủ lớn của . Đối với các giá trị chung của vàu d d R d - kNudd RdmodNugcd(R,N)Rd−kNudRdmodNugcd(R,N)N dRNdN gcd ( R , N ) N / gcd ( R , N )RN, việc tính toán phức tạp hơn vì bạn cần tính đến việc tạo và một cách riêng biệt, nhưng một lần nữa bạn có thể tạo ra chất thải nhỏ tùy ý với các nhóm đủ lớn.gcd(R,N)N/gcd(R,N)
Trong thực tế, ngay cả với các số ngẫu nhiên tương đối không hiệu quả (ví dụ như trong mật mã học), hiếm khi làm bất cứ điều gì ngoại trừ lấy mẫu từ chối đơn giản, trừ khi nhỏ. Ví dụ, trong mật mã học, trong đó thường có công suất 2 và thường là hàng trăm hoặc hàng nghìn bit, việc tạo số ngẫu nhiên thống nhất thường được tiến hành bằng cách lấy mẫu từ chối thẳng trong phạm vi mong muốn.R NNRN