来自大小为n的数组的m个整数的集合

时间:2019-02-14 01:54:36

标签: java arrays random collections set

编写一种方法,以从大小为n的数组中随机生成一组m个整数。每个元素的选择概率必须相同。

这是一个相当知名的问题-在多本书和访谈中都有介绍-但要么我没有正确阅读该问题,要么对我而言,这个问题的要求实际上无法在Java中同时满足。

假设有一个大小为n = 3的数组

整数[] ar = {1,1,5}

如果w为我们随机生成的集合选择了 m = 2 ,我不知道如何保证每个元素被选择的概率相等。

换句话说,从大小为3的给定数组中请求2个整数组成的Java集合使得不可能确保每个元素的概率相等。为了说明这一点,如果我们称[0] a,[1] b,[2] c,则随机选择并删除的所有2个元素组合将如下所示:

  1. ab
  2. ba
  3. ac
  4. bc
  5. ca
  6. cb

由于选项1)和2)将自动使Java中集合的唯一元素要求无效,因此在这种特殊情况下元素'c'即数字 5 总是以100的概率结束%,如果我们最终得到一组2个元素。

如果数组仅包含重复项,即{1,1,1},那么我猜想更容易说明这个问题,那么一组m = 2整数将根本不可能。

关于这个问题,我是否有误读或误解的东西。

0 个答案:

没有答案