编写一种方法,以从大小为n的数组中随机生成一组m个整数。每个元素的选择概率必须相同。
这是一个相当知名的问题-在多本书和访谈中都有介绍-但要么我没有正确阅读该问题,要么对我而言,这个问题的要求实际上无法在Java中同时满足。
假设有一个大小为n = 3的数组
整数[] ar = {1,1,5}
如果w为我们随机生成的集合选择了 m = 2 ,我不知道如何保证每个元素被选择的概率相等。
换句话说,从大小为3的给定数组中请求2个整数组成的Java集合使得不可能确保每个元素的概率相等。为了说明这一点,如果我们称[0] a,[1] b,[2] c,则随机选择并删除的所有2个元素组合将如下所示:
由于选项1)和2)将自动使Java中集合的唯一元素要求无效,因此在这种特殊情况下元素'c'即数字 5 总是以100的概率结束%,如果我们最终得到一组2个元素。
如果数组仅包含重复项,即{1,1,1},那么我猜想更容易说明这个问题,那么一组m = 2整数将根本不可能。
关于这个问题,我是否有误读或误解的东西。