C++ 加权随机n次优化
一个数组中有10个加权元素。我想随机选择一个元素N次,然后计算每个元素出现的次数。是否有一种算法可以在不需要选择N次的情况下为我提供元素计数?N可能是一个很大的数字,在这种情况下,必须生成N个样本是低效的 例如: 盒子里有2个红色的球和8个白色的球。从盒子里随机挑选一个球,然后放回去,重复100次。计算拾取红色球或白色球的总次数C++ 加权随机n次优化,c++,algorithm,random,C++,Algorithm,Random,一个数组中有10个加权元素。我想随机选择一个元素N次,然后计算每个元素出现的次数。是否有一种算法可以在不需要选择N次的情况下为我提供元素计数?N可能是一个很大的数字,在这种情况下,必须生成N个样本是低效的 例如: 盒子里有2个红色的球和8个白色的球。从盒子里随机挑选一个球,然后放回去,重复100次。计算拾取红色球或白色球的总次数 我想知道是否有可能在不进行100次采样的情况下获得计数。假设数组有n个元素。让X1,X2,…,Xn表示随机变量,其中席代表NTH元素出现次数,然后条件为X1= x1,x
我想知道是否有可能在不进行100次采样的情况下获得计数。假设数组有n个元素。让X1,X2,…,Xn表示随机变量,其中席代表NTH元素出现次数,然后条件为X1= x1,x2= x2,…,和Xi-1= XI-1,席服从参数n -x1-x2-…xi-1和1/n-i+1。所以你可以按如下顺序画X1,X2,…,Xn:
#include <iostream>
#include <random>
template <typename Iter, typename Int_type>
void draw(Iter begin, Iter end, Int_type N)
{
auto n = std::distance(begin, end);
static std::mt19937 gen{std::random_device{}()};
while (begin != end) {
std::binomial_distribution<Int_type> d(N, 1 / static_cast<double>(n));
auto number = d(gen);
*begin++ = number;
--n;
N -= number;
}
}
int main()
{
unsigned count[10];
draw(std::begin(count), std::end(count), 10000u);
for (auto i : count) std::cout << i << ", ";
}
如果我没弄错你的问题,你想从一个实验室里抽取样本。你用的是哪种语言?例如,Python/NumPy已经有了这方面的功能。您可以添加一个示例吗?这个问题对我来说不是很清楚。@Yonlif我已经添加了example@MarkDickinson是的,我就是这么说的。我使用C++。@ RySoL:我把问题改写了一下;我希望在这个过程中我没有改变意思。