我正在寻找生成伪随机数[可能是低"随机性"]或具有固定汉明权重[固定密度为1s]的伪随机比特序列的方法.我发现了一些关于使用简单的线性同余生成器和一个具有我需要的汉明重量的种子的建议,但没有给出为什么这是正确的原因[为什么汉明重量在线性同余变换下是不变的]
任何人都可以说明这一点或给我另一种方式吗?
谢谢...
编辑:python 可以很容易地洗牌
from random import shuffle
def gen(ham, bits=32):
# generate a list with the correct number of 1's
x = [1]*ham+[0]*(bits-ham)
shuffle(x)
# convert back to a number
return int(''.join(map(str,x)),2)
>> print('\n'.join(bin(gen(5,15)) for x in range(10)))
0b101100100001000
0b100110010010
0b100110110000000
0b10010101100
0b11101100000
0b100100001000110
0b10000010101001
0b110000011100000
0b100011100010
0b100000011100010
Run Code Online (Sandbox Code Playgroud)
这是一种可能的方法(基本上,生成基本字符串的随机排列:
将排列列表转换为位数组(以伪 python 所示):
[x<perm_list 中 x 的权重]