【发布时间】:2014-12-29 11:56:41
【问题描述】:
我有 N 个均匀分布的项目 (std::random_shuffle) 的数组(技术上是 STL 容器)。然后我检查这些数组并使用一些与这些项目无关的逻辑选择这些项目的不同数量(从 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 为我们提供了均匀分布 “结果”向量是否均匀分布?
【问题讨论】:
-
您能以代码或伪代码的形式发布您的算法吗?
-
未指定。如果向量如伪代码中所示,
storage[k]中的值与k相关,并且没有迹象表明从someLogicHere(storage[k])返回的向量大小与k无关。事实上,someLogicHere可以检查storage[k]的各个值,因此它可以直接引入偏差。我根本看不出random_shuffle有什么相关性(但无论如何都要考虑切换到shuffle。) -
如上所述,逻辑与存储在向量中的值无关,而仅与键有关。假设 someLogicHere 从用户输入(要获取的键列表)中获取值,并且仅当“key mod 2 == 0”时
标签: algorithm random language-agnostic