【问题标题】:JAVA - How do I generate a random number that is weighted towards certain numbers? [duplicate]JAVA - 如何生成对某些数字加权的随机数? [复制]
【发布时间】:2017-06-26 15:19:42
【问题描述】:

如何在 Java 中(使用 Eclipse)生成一个向特定数字加权的随机数?

例如,我有 100 个数字,每个数字都有 1% 的概率被平等地选择。但是,如果某个数字,比如说 5,在这 100 次中显示 8 次,那么它现在有 8% 的机会被随机选择,而其他数字仍然是 1%。

我如何编写一个随机生成器,它给我 10 个数字并给数字 5 显示 8% 的优势?

谢谢,如果我解释得不好。

【问题讨论】:

  • 你能尝试改写这个问题吗?你的第二段基本上只是给出一个简单的概率问题。对于你的第三段,没有办法给出 10 个数字和 8% 的概率选择 5。每个号码至少有 10% 的机会被选中。 :)
  • 用你的 100 个数字创建一个数组并选择一个随机索引。看起来很简单。
  • 我不同意第二段:如果你连续八次从100个数字中选择第5个,那么下一次显示第5个仍然是1%,
  • @Patrick - 我认为 OP 是说只抽取了一个数字。
  • @R.James:我理解这个问题的方式,“100”数字不一定是 1-100,但可能是“5, 5, 5, 5, 5, 9, 10, 11 .... 等等”,而选择数字 5 的更大机会来自于在列表中多次出现该数字。也许提问者可以澄清一下,我完全理解错了。所有 100 个数字都是唯一的吗?它们是按顺序排列的吗?

标签: java random


【解决方案1】:
public static void main(String[] args){
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);list.add(2);// to be continued ...        
    int randomInt = list.get((int) (Math.random() * list.size()));
    System.out.println(randomInt);
}

你会得到你的值列表,然后你只需要随机选择一个索引并取回值

Math.random() 将在 [0;1[ 中选择一个值,如果您乘以 List 的 10 个元素的大小,则当您转换为 @ 时,您将在 [0;10[ 中选择一个值987654325@您将获得10种可能的索引来查看List

ArrayListList的实现)允许重复元素所以: 如果您添加 1,2,2,3,4,5,6,7,8,9(顺序无关紧要),您将有 10 个元素,每个元素都可以通过 1/10 = 10 找到/100 = 10% 的概率(又名机会),但是出现两次的元素 2 在方法中将有 20% 的机会被选中,出现的数字越多它的机会越大选择增加,如你所说(数字出现的次数)/(元素总数)(这是基本数学)

【讨论】:

  • 你能解释一下如何加权吗?
  • @MichaelMarkidis 它将根据您输入的数字进行加权。例如如果您只是将 42 添加到列表中,因为它的唯一元素 42 将被加权 100%。如果您将 2 次 42 和 1 次 43 相加,那么您有 2/3 的机会获得 42 或两倍于 43 的可能性,依此类推。
  • @OHGODSPIDERS 这是有道理的,但这个答案在说明这一点方面做得很差。
  • @MichaelMarkidis 概率取决于某个数字被添加到列表中的频率。你可以有几个5s 来获得你想要的概率。但是 OP 没有指定数字是否在 1-100 之间并且是唯一的,所以这个答案可能正确与否。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 2015-04-03
  • 2016-05-09
  • 1970-01-01
  • 2019-11-05
  • 2021-09-10
相关资源
最近更新 更多