将随机均匀分布的数字组合成一个数组

时间:2014-11-02 20:15:36

标签: algorithm random language-agnostic

我有N个数组(技术上,STL容器)均匀分布的项目(std :: random_shuffle)。然后我查看这些数组并使用与这些项无关的一些逻辑从这些项中选择不同的数量(从0到K)并将其推送到结果数组。此结果数组是否代表均匀分布的项目数组?

伪代码:

std::vector<int> userInput;
userInput.push_back(1,3,6);
std::map<int, vector<int>> storage;
std::vector<int> result; 
for (auto i = 0; i < 10; ++i)
{
    std::vector<int> vec;
    for (auto j = 0; j < 10; ++j)
    {
        vec.push_back((i+j)*(10*(i+1)));
    }
    std::random_shuffle(vec.begin(), vec.end());
    storage.emplace(std::make_pair(i, std::move(vec));
}
for (auto k = 0; k < 10; ++k)
{
    vector<int> indices = someLogicHere(storage[k],userInput))
    for (auto index : indices)
    {
        result.push_back(storage[k][index]);
    }
}

让我们假设std :: random_shuffle为我们提供了统一的分布 “结果”向量是否均匀分布?

1 个答案:

答案 0 :(得分:0)

这完全取决于someLogicHere(storage[k],userInput))是否尊重统一分布。

你的伪代码中没有任何内容可以改变一次完成后的改组。您的声明“逻辑与项目无关”似乎保证了这一点,但伪代码本身并不能保证相同。

一般情况下,someLogicHere引入的任何偏差都会消除均匀性,因为初始集具有最大熵。