php - 随机和独特的子集生成

标签 php algorithm random set combinatorics

假设我们有 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/

相关文章:

c - 在数组中设置随机数

php - 在 foreach 循环中从数据库中“加载更多”数据

php - 如何在 IN 之间进行选择 .. 阅读更多

php - paypal 快速结帐-ordertotal 无效错误

C++ 强随机数生成器 - 必要吗?

javascript - 生成等于 100 但两个数字之间的差必须大于 4 的 m 个数字

php - PrestaShop 1.7.3 Product.php 类覆盖

algorithm - 为像谷歌这样的东西设计一个日志系统,以获取在指定时间范围内点击 URL 的频率

algorithm - 交替和顺序结构算法

algorithm - Facebook 黑客杯亚回合 1B - 老虎机黑客