Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 仅使用rand(开始、结束)6次,从50个单元阵列中选择6个不同的单元_C_Random Sample - Fatal编程技术网

C 仅使用rand(开始、结束)6次,从50个单元阵列中选择6个不同的单元

C 仅使用rand(开始、结束)6次,从50个单元阵列中选择6个不同的单元,c,random-sample,C,Random Sample,我试图想出一个算法,从一个有50个单元的数组中选择6个随机单元,这样每个单元被挑选的概率是相等的。 我需要找到一个解决方案,使用随机函数(开始,结束)不超过6次 我不能使用任何额外的数据结构,重要的是每个单元格被挑选的概率是相等和独立的。调用Random(0,49)。读取结果单元格,然后将数组中其后的所有内容向下移动一个位置,这样就有一个49单元格数组,其中缺少拾取的值 随机调用(0,48)并重复6次。将单元格放入一个列表中,洗牌,取其中的六个概率将不同概率为1/50、1/49、1/48。。每次

我试图想出一个算法,从一个有50个单元的数组中选择6个随机单元,这样每个单元被挑选的概率是相等的。 我需要找到一个解决方案,使用随机函数(开始,结束)不超过6次

我不能使用任何额外的数据结构,重要的是每个单元格被挑选的概率是相等和独立的。

调用Random(0,49)。读取结果单元格,然后将数组中其后的所有内容向下移动一个位置,这样就有一个49单元格数组,其中缺少拾取的值


随机调用(0,48)并重复6次。

将单元格放入一个列表中,洗牌,取其中的六个

概率将不同概率为1/50、1/49、1/48。。每次你移除一个单元格。只是数学,不是个人的:)P1(1/50),P2(1/49),P3(1/48)。。但是OP需要常数Pn(1/50)。问题的定义是他必须选择6个单元格。他可以对每个选择使用随机(0,50),如果结果重复,则丢弃结果,但结果与使用建议的解决方案相同。通过选择一个,您将自动减少可能性池。你说它是1/50,1/49,这在技术上是正确的,但实际上是1/50,1/49+1/1,1/48+1/1+1/1。。也许这是一个技巧性的问题,我们应该允许拾取同一个单元格两次?提取元素后,不必移动数组中的数据。你只需要调整索引。在获得第一个随机数后,从数组中“删除”该元素(比如#x)。生成第二个(0到48之间)时,所有>=x的数字实际上都指向初始数组中的x+1。您只需要一些空间来跟踪以前选择的索引。我不认为您只能保证“6次”解决方案。如果你将排除每个选择的值-那么概率将不同,如果你不排除值-你可以得到重复的值..我已经设法用一个值的链接列表来完成,当我选择一个值时,我从列表中删除单元格并选择一个介于0和48之间的随机数,依此类推。。。问题是我使用了一个额外的DS。它不符合你的标准,正如你所说的概率必须是equal@VitalyDyatlov-如果我排除一个值,当前阶段的概率将不同,但之前的概率可以保持相等(即,在我运行算法之前,每个数字出现的概率是相等的)将单元格放入列表意味着我使用另一个数据结构和另一件事-洗牌必须使用随机。。。但是你只能使用它6次。我的答案仍然在上面,我认为这些限制是人为的,愚蠢的,任何接受它们的开发人员都是不称职的。他们当然可以不同意,但我不在乎,因为我不会为任何愚蠢到相信这是一个现实场景的人工作。