随机拉出一组不同的元素

时间:2014-03-05 09:28:07

标签: algorithm random set

我需要一个函数pull(S,p),它带有一个有序集S和带p的数字p < n = |S|,这样它就会返回p的列表随机选择S的不同元素。

假设s_ii = 1, ..., ni'th的{​​{1}}元素。那么问题就是在S范围内随机生成p个不同的索引,并用这些索引拉动元素。

我如何实现这一目标?在此范围内生成{1, ..., n}个随机数是不够的,因为这可能会导致冲突,修复冲突似乎效率低下。

2 个答案:

答案 0 :(得分:3)

取出set的元素后,将该元素的最后一个元素与该元素交换。然后你将set的大小减小1.然后你重复按Random()* set的大小来获取元素。

答案 1 :(得分:0)

一种方法是将索引{1, ..., n}混洗并将第一个p元素作为索引