在我的算法中,我有两个值需要随机选择,但每个值都必须选择预定的次数。
到目前为止,我的解决方案是将选择正确次数放入向量中,然后对其进行洗牌。在 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
,每当我需要一个新的迭代器时,我都会增加迭代器并获取该值。
这可行,但似乎可能有更有效的方法。因为我总是知道我将使用每个值的多少,所以我想知道是否有更算法的方法来执行此操作,而不仅仅是存储值。