【问题标题】:How to generate random binary numbers 0 or 1 with length of N and with option to control the probability of having 0 or 1?如何生成长度为 N 的随机二进制数 0 或 1 并可选择控制具有 0 或 1 的概率?
【发布时间】:2021-10-09 09:01:20
【问题描述】:

我想生成长度为 N 的随机二进制数(0 或 1)。棘手的部分是,它应该能够控制拥有更多 1 或 0 的概率。例如,我想要总共 100 个随机数,其中 0 的概率为 40%,而 1 的概率为 60%。请帮忙。

【问题讨论】:

标签: python c++ random binary numbers


【解决方案1】:

控制这种分布的一般解决方案如下:

首先生成一个介于 0-100 之间的统一随机数(或 0-1000 以获得更多控制权,即如果您需要 60.1% 的机会获得一个数字)

那么如果数字小于或等于 60,分配 1,现在您有 60% 的机会分配 1。

我希望这会有所帮助,我想你会弄清楚的。

【讨论】:

  • 我没有得到 60.1% 的机会。它仍然有大约±10-20%的偏差。有什么解决办法吗?
  • 好吧,如果你在大多数情况下掷硬币 10 次,你不会得到正好 5 个正面和 5 个反面。也许你问错了你原来的问题。如果您确实需要一定数量的 1 和 0,我认为您想创建一个包含所需元素数量的数组,然后将这些元素插入到新数组中的随机位置。
  • 我制作了一个包含 N 个数字的数组,其中 30% 1 和 70% 0。例如[1 1 1 0 0 0 0 0 0 0]。然后使用随机洗牌功能随机洗牌每个元素的位置。它产生了结果:[0 0 1 0 1 0 0 0 0 0]。这对我来说看起来不错。谢谢。
【解决方案2】:

您始终可以存储 0 和 1 的计数。在这里,由于您总共需要 100 个随机数,其中 0 的概率为 40%,而 1 的概率为 60%,所以让我们初始化 count_0=40,count_1=60,total_count=100。现在您可以生成一个介于 0 到 100 之间的随机数。

假设第一个随机生成的数字恰好是 35。由于 35 小于 40,所以第一个结果恰好是 0。递减 count_0。减少总计数。现在,对于下一个随机数,选择一个介于 0 和 99(total_count)之间的随机生成的数字。这次如果随机生成的数字小于或等于 count_0(等于 39),则将结果设置为 0,否则为 1。

按照此过程进行 100 次迭代以生成 100 个随机 0 和 1。这种方法不使用额外的空间和 O(n) 时间复杂度,其中 n 是要生成的 0 和 1 的数量。

【讨论】:

    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2020-05-24
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多