【发布时间】:2013-04-23 04:24:16
【问题描述】:
我想从 {1,2,...(k-1),K} 中随机选择 N 个不同的数字,其中 K>N。我想编写一个 C 程序来有效地做到这一点。
任何帮助表示赞赏。
注意:
朴素的程序只是生成随机数,检查它是否已经生成,如果没有将其添加到列表中,很容易实现。我一直在寻找更有效的东西,好像 K 和 N 是可比的,那么这将只是低效的计算。
【问题讨论】:
-
如果
K和N具有可比性,那么 Fisher/Yates 洗牌(N的步骤)会做得很好。如果K比N大得多,那就太糟糕了,那么 create-and-check-for-dupes 会更好。