Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 加权随机n次优化_C++_Algorithm_Random - Fatal编程技术网

C++ 加权随机n次优化

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

一个数组中有10个加权元素。我想随机选择一个元素N次,然后计算每个元素出现的次数。是否有一种算法可以在不需要选择N次的情况下为我提供元素计数?N可能是一个很大的数字,在这种情况下,必须生成N个样本是低效的

例如: 盒子里有2个红色的球和8个白色的球。从盒子里随机挑选一个球,然后放回去,重复100次。计算拾取红色球或白色球的总次数


我想知道是否有可能在不进行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:我把问题改写了一下;我希望在这个过程中我没有改变意思。