我需要一个快速算法从通用列表中选择5个随机元素.例如,我想从a获得5个随机元素List<string>.
我有一组100个对象.如何从这个集合中获取5个对象的子集?
我现在正在这样做,但它只返回一个对象
int size = memberSet.size();
Set<Member> randomSet = new HashSet<Member>();
int item = new Random().nextInt(size);
int i = 0;
for(Member mbr : memberSet)
{
if (i == item){
randomSet.add(mbr);
}
i = i + 1;
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含大量值(53,000,000+)的数据文件,我想提取这些值中n 个的随机子集(例如 2,000,000)。我实现了一个 Perl 脚本,它将列表拉入内存,使用Fisher-Yates 方法对数组进行洗牌,然后打印出洗牌列表中的前n个值。然而,即使在较小的测试集(50,000 个值)上,这种改组过程也需要花费大量时间。
我正在寻找一种更有效、可扩展的方法来识别大量值的随机子集并将其打印出来。有什么建议么?
更新:根据答案和更多搜索,看起来正确的术语是“随机采样”。
阅读此答案后: 从集合中选择随机子集的最佳方法是什么?
它让我想知道,如何在Java中选择随机种子?
并且不要说使用System.currentTimeMillis()或System.nanoTime().阅读文章,看看为什么不.
这是一个很难的问题,但让我更难.假设您需要生成随机种子而不连接到互联网,而不使用用户输入(IE,没有gui),并且它必须是跨平台的(因此没有JNI来访问硬件).
我们可以监视一些JVM变量作为我们随机性的来源吗?
可以这样做吗?还是不可能?
random ×4
java ×2
algorithm ×1
c# ×1
collections ×1
element ×1
performance ×1
random-seed ×1
sampling ×1
set ×1