gpt4 book ai didi

java - 生成一个包含 n 个 1 的随机 BitSet

转载 作者:行者123 更新时间:2023-12-01 06:55:37 24 4
gpt4 key购买 nike

Possible Duplicate:
Randomly pick k bits out of n from a Java BitSet

是否有一种简单的方法来生成大小为 n*n(例如 64)且以随机顺序恰好有 n(例如 8)个 1 的随机 BitSet?

我想到的是,我可以生成一个随机位集并检查 bitSet.cardinality() 是否为 8,如果不是,则重试,但这似乎是一个性能不佳的解决方案。

谁有更好的主意?

最佳答案

使用reservoir sampling ,这可以在 O(N) 时间内完成:

public static BitSet randomBitSet(int size, int cardinality, Random rnd) {
if (0 > cardinality || cardinality > size) throw new IllegalArgumentException();
BitSet result = new BitSet(size);
int[] chosen = new int[cardinality];
int i;
for (i = 0; i < cardinality; ++ i) {
chosen[i] = i;
result.set(i);
}
for (; i < size; ++ i) {
int j = rnd.nextInt(i+1);
if (j < cardinality) {
result.clear(chosen[j]);
result.set(i);
chosen[j] = i;
}
}
return result;
}

关于java - 生成一个包含 n 个 1 的随机 BitSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com