在我的算法中,我有两个值,我需要随机选择,但每个值必须选择预定的次数。随机选择两个值
到目前为止,我的解决方案是将选择放入一个向量正确的次数,然后洗牌。在C++:
// Example choices (can be any positive int)
int choice1 = 3;
int choice2 = 4;
int number_of_choice1s = 5;
int number_of_choice2s = 1;
std::vector<int> choices;
for(int i = 0; i < number_of_choice1s; ++i) choices.push_back(choice1);
for(int i = 0; i < number_of_choice2s; ++i) choices.push_back(choice2);
std::random_shuffle(choices.begin(), choices.end());
然后我把一个迭代choices
每当我需要一个新的我增加了迭代器,抓住价值。
这可行,但似乎可能有更有效的方法。因为我总是知道每个值的使用数量,所以我想知道是否有更多的算法来做这件事,而不是只存储这些值。
我会坚持工作的解决方案,除非有充分的理由不这样做。它被描述为瓶颈或类似的东西? – amit
有一种方法,但它不那么清晰和简洁。我会坚持这种技术。 –
我其实很喜欢这个解决方案。想到的所有其他解决方案(思考约5秒后)都涉及随机数生成器。但是,由于每个选择都有一个预先确定的数量,所以这些解决方案将是无效的,因为他们最终必须在选择已经发生最大次数后开始忽略值。 (不可否认,洗牌方法可能是CPU消耗,但至少可以使其成为可预测的运行时间,这与您在上面考虑的解决方案无关) – gnomed