在确定的时间内生成某些数字的随机序列

时间:2013-06-19 18:17:59

标签: c++ random

我编写了以下代码来生成某些数字{0,1,2,...,31}的随机序列。它工作正常,但不能保证在任何有限的时间内完成;在任何间隔之后,仍然只有一定(非常高)的概率将完成。 有关删除此问题的任何建议吗?

int th;
vector<int> V2 = vector<int> (32,0);
for (int k=0;k<32;k++){

    do{
        th = rand() % 32;
    } while ( V2[th] == 0 );

    V2[th] = k;
}

2 个答案:

答案 0 :(得分:7)

实际实施:

int a[] = { 0, 1, 2, ....., 31 };
std::random_shuffle(a, a + 32);

或使用矢量:

std::vector<int> v(a, a + 32); // from previous snippet
std::random_shuffle(v.begin(), v.end());

此外,通常情况下,如果您想要真正的随机排列,请不要忘记播种PRNG。

答案 1 :(得分:3)

使用0到31之间的数字填充向量,然后使用线性时间随机混洗算法,例如Fisher-Yates