【发布时间】:2017-12-15 19:46:16
【问题描述】:
随机数生成器以相等的概率生成 0 或 1
如何创建另一个随机数生成器,可以生成 0 到 N 之间的任何整数
【问题讨论】:
-
将二进制数系统与命中和未命中算法结合使用。
-
大多数“随机”算法都涉及查看系统时钟或一些巨大的乘法 + 模数。真正的随机性无法真正编程。任何设计良好的算法都会完全按照您的指示进行
-
你能容忍什么样的偏见?如果你不能容忍任何然后使用@JohnColeman 建议。如果您可以容忍一些偏差,那么您可以考虑 floor( N * (r/2**k) ),其中 k 是 N 的位长度,r 是由从您的随机方法和算术中提取的 k 个随机位组成的整数floor函数里面是浮点数。
-
@JohnColeman 您能否详细解释一下如何执行此操作?
-
@jameskpolk:“一些偏见”->“某些值的可能性是其他值的两倍”。真的,
k应该比 log2 N 大一点,以最小化偏差;假设乘法的结果是双字,它也可能是字长。