生成平均汉明距离为50%的随机二进制文件?
问题描述:
我想要生成二进制文件,其中项目之间的平均海明距离大约为50%。 第二个条件是距离不应低于〜40%或高于〜60%。 另一个复杂因素是项目不是按顺序生成的,而是偶尔会出现,而且我不想循环所有项目以检查和重新生成,因为一段时间后它会变成一个缓慢的过程。生成平均汉明距离为50%的随机二进制文件?
有没有一种机制或算法来实现这一目标?
目前我使用下面的代码:
def rand(size):
op = np.random.uniform()
return np.random.choice([0,1], size=size, p=[op, 1-op])
,但即使我生成10个项目它打破F.E. (汉明DIST):
[ [ 0 2510 8209 4305 3896 1619 7231 6356 8103 3265]
[2510 0 8131 4347 3940 1697 7219 6334 8037 3305]
[8209 8131 0 5858 6449 9312 2100 3317 1030 7196]
[4305 4347 5858 0 4661 4088 5598 5311 5764 4590]
[3896 3940 6449 4661 0 3485 6093 5650 6385 4251]
[1619 1697 9312 4088 3485 0 8034 6739 9152 2716]
[7231 7219 2100 5598 6093 8034 0 3831 2238 6510]
[6356 6334 3317 5311 5650 6739 3831 0 3405 5933]
[8103 8037 1030 5764 6385 9152 2238 3405 0 7112]
[3265 3305 7196 4590 4251 2716 6510 5933 7112 0]]
分钟:1030 平均距离:0.470624%
顺便说一句。二进制文件是10 000位。
答
到目前为止,以下解决方案似乎表现符合我的预期。
def rand(size):
return [np.random.randint(0,2) for _ in xrange(size)]
将更新,当我做更广泛的测试时,如果没关系。