生成两个具有90%相同元素的随机位数组

时间:2014-06-16 16:39:33

标签: c++ visual-c++-2010

我必须生成两个随机位数组。要求是生成只有10%误码率的数组,即2个数组之间的元素比较应该给我们大约90%的元素。

我分别使用rand函数生成数组,它导致两个数组中大约40%到60%的相同元素。为了减少到10%,我试图在一个数组中找到随机位置以将其替换为1,但它会破坏随机性。它可能不是优雅的方式,对于大数字它不起作用(我需要测试数组中的10,000位)。任何人都可以建议我如何生成两个错误非常少的随机二进制数组。

1 个答案:

答案 0 :(得分:9)

假设我理解你,这意味着第二个数组实际上并不是“随机”。它依赖于第一个数组,但随后有10%的位被翻转(产生10%的错误)。因此,我建议您遵循以下算法:

  1. 生成一个随机位数组
  2. 复制此阵列
  3. 随机选择第二个数组中10%的元素,并反转这些位。
  4. 注意:如果您想要10%的误差,请确保您不仅仅选择随机元素n/10次,因为您将不可避免地将相同的位反转两次。您必须选择n/10 不同的元素才能反转。但是,如果您希望最大误差为10%,那么故意引入重新反转单个位(并因此纠正它)的可能性可能是有利的。