假设我们有 1 到 25 之间的数字,我们必须选择一组 15 个数字。
如果我是对的,可能的集合是 3268760。
在这 3268760 个选项中,你必须生成 100000 个
生成 100000 个唯一且随机的子集的最佳方法是什么?
有没有办法、算法来做到这一点?
如果不是,检测重复项的最佳选择是什么?
我计划在 PHP 上执行此操作,但通用解决方案就足够了, 任何不太“学术”(更实用)的引用都会对我有很大帮助。
最佳答案
有一种方法可以随机生成子集的样本,保证没有重复,使用 O(1) 存储,并且可以随时重新生成。首先,写一个函数给generate a combination given its lexical index .其次,使用 pseudorandom permutation of the first Combin(n, m) integers以随机顺序遍历这些组合。只需将数字 0...100000 输入排列,使用排列的输出作为组合生成器的输入,并处理生成的组合。
关于php - 随机和独特的子集生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425184/