我需要一个函数pull(S,p)
,它带有一个有序集S
和带p
的数字p < n = |S|
,这样它就会返回p
的列表随机选择S
的不同元素。
假设s_i
,i = 1, ..., n
是i'th
的{{1}}元素。那么问题就是在S
范围内随机生成p
个不同的索引,并用这些索引拉动元素。
我如何实现这一目标?在此范围内生成{1, ..., n}
个随机数是不够的,因为这可能会导致冲突,修复冲突似乎效率低下。
答案 0 :(得分:3)
取出set的元素后,将该元素的最后一个元素与该元素交换。然后你将set的大小减小1.然后你重复按Random()* set的大小来获取元素。
答案 1 :(得分:0)
一种方法是将索引{1, ..., n}
混洗并将第一个p
元素作为索引