一尘不染

生成固定位数的随机数的最有效方法

algorithm

我需要生成一个随机数,但是需要从设置位数相等的二进制数集中进行选择。例如,选择一个恰好设置了2位的随机字节值…

00000000 - no
00000001 - no
00000010 - no
00000011 - YES
00000100 - no
00000101 - YES
00000110 - YES
...

=> Set of possible numbers 3, 5, 6...

请注意,这是一组简化的数字。按照“选择设置了40位的随机64位数字”的思路进行思考。集合中的每个数字必须均等地出现。


阅读 277

收藏
2020-07-28

共1个答案

一尘不染

从所有位位置的集合中进行随机选择,然后设置这些位。

Python中的示例:

def random_bits(word_size, bit_count):
    number = 0
    for bit in random.sample(range(word_size), bit_count):
        number |= 1 << bit
    return number

运行上述10次的结果:

0xb1f69da5cb867efbL
0xfceff3c3e16ea92dL
0xecaea89655befe77L
0xbf7d57a9b62f338bL
0x8cd1fee76f2c69f7L
0x8563bfc6d9df32dfL
0xdf0cdaebf0177e5fL
0xf7ab75fe3e2d11c7L
0x97f9f1cbb1f9e2f8L
0x7f7f075de5b73362L
2020-07-28