随机选择N个不同的数字而不重复

时间:2013-04-29 13:22:18

标签: c algorithm random

我希望有一组随机选择的来自{1,2,...(k-1),K}的N个不同数字,其中K> N.我想写一个C程序来有效地做到这一点。

任何帮助表示感谢。

注意:

天真程序只是生成随机数,检查它是否已经生成,如果没有将其添加到列表中则很容易实现。我正在寻找更有效的东西,好像K和N是可比的,那么这将是低效的计算。

2 个答案:

答案 0 :(得分:3)

当K和N相当时,使用Knuth shuffle,但将shuffle限制为N次。

请注意,如果不这样做,可能会浪费大量内存。

答案 1 :(得分:2)

Reservoir sampling是一系列随机算法,用于从包含n个项目的列表S中随机选择k个样本,其中n是一个非常大或未知的数字。”

(请注意,关于您的问题,K和N的角色在维基百科页面上相反)