向量中布尔值的均匀分布

Uniform Spread of boolean values in a vector

本文关键字:分布 布尔值 向量      更新时间:2023-10-16

我有一个布尔向量,例如:

vector<bool> bVec;

我使用反推在循环中用随机的 1 和 0 填充它:

bVec.push_back(0);
bVec.push_back(1);

我可以洗牌内容:

random_shuffle(bVec.begin(), bVec.end());

这对于随机洗牌的向量来说效果很好,但是,如果想要均匀分布的值,我似乎无法获得合适的向量。即我想计算 1 和 0 的数量并尽可能均匀地分布它们。 例如,如果我有 3 个 1 和 7 个 0,我会想要类似的东西0,1,0,0,1,0,0,1,0,0(或类似(

事实证明,编写我自己的函数既繁琐又耗时,并且容易出现错误。 有没有我找不到的功能可以做到这一点?

谢谢。

如果有人解决这个问题并需要答案(而不是像上面的评论那样争论语义(,我按如下方式解决了这个问题,用伪代码逐步解释:

1

(创建一个向量,随机洗牌值,计算1并将其用作所需的数量,然后将其全部设置回0。 现在,您有一个所需数量的 1 作为目标,以便在向量内均匀分布。2(使用matlabs linspace函数的C++实现(可以在这里找到一些变体:https://gist.github.com/jmbr/2375233(。 当您输入所需的 1 数量和向量的大小时,它会返回等距点,您可以向下舍入以在向量中创建索引。3( 将这些点设置为 1。

结果是一个完全间隔的向量。