我希望有一组随机选择的来自{1,2,...(k-1),K}的N个不同数字,其中K> N.我想写一个C程序来有效地做到这一点。
任何帮助表示感谢。
注意:
天真程序只是生成随机数,检查它是否已经生成,如果没有将其添加到列表中则很容易实现。我正在寻找更有效的东西,好像K和N是可比的,那么这将是低效的计算。
答案 0 :(得分:3)
当K和N相当时,使用Knuth shuffle
,但将shuffle限制为N次。
请注意,如果不这样做,可能会浪费大量内存。
答案 1 :(得分:2)
“Reservoir sampling是一系列随机算法,用于从包含n个项目的列表S中随机选择k个样本,其中n是一个非常大或未知的数字。”
(请注意,关于您的问题,K和N的角色在维基百科页面上相反)