我有一个创建大小为N的向量函数,它打乱:即使我反复重置srand(时间(NULL)),为什么还能顺利运行?
void rand_vector_generator(int N) {
srand(time(NULL));
vector <int> perm(N);
for (unsigned k=0; k<N; k++) {
perm[k] = k;
}
random_shuffle(perm.begin(),perm.end());
}
我打电话这个从我与循环主要功能:
for(int i=0; i<20; i++)
rand_vector_generator(10);
我想到这不是在我的洗牌中给我足够的随机性,因为我打电话给每个函数调用srand(time(NULL));
,并且种子与连续的调用呼叫没有太大差别。我的理解是我拨打srand(time(NULL));
一次而不是多次,因此种子不会“重置”。
这thread有点肯定我期待的结果是。
相反,我得到:
6 0 3 5 7 8 4 1 2 9
0 8 6 4 2 3 7 9 1 5
8 2 4 9 5 0 6 7 1 3
0 6 1 8 7 4 5 2 3 9
2 5 1 0 3 7 6 4 8 9
4 5 3 0 1 7 2 9 6 8
8 5 2 9 7 0 6 3 4 1
8 4 9 3 1 5 7 0 6 2
3 7 6 0 9 8 2 4 1 5
8 5 2 3 7 4 6 9 1 0
5 4 0 1 2 6 8 7 3 9
2 5 7 9 6 0 4 3 1 8
5 8 3 7 0 2 1 6 9 4
7 4 9 5 1 8 2 3 0 6
1 9 2 3 8 6 0 7 5 4
0 6 4 3 1 2 9 7 8 5
9 3 8 4 7 5 1 6 0 2
1 9 6 5 3 0 2 4 8 7
7 5 1 8 9 3 4 0 2 6
2 9 6 5 4 0 3 7 8 1
这些载体似乎很随机洗牌的给我。我错过了什么? srand
调用是否存在于与函数调用不同的范围内,因此每次调用都不会重置?或者我误解了更重要的东西?
'random_shuffle'不一定调用'rand'。 – aschepler
这个标准在'random_shuffle'上肯定有几个去处http://en.cppreference.com/w/cpp/algorithm/random_shuffle是(3)在C++ 17及更高版本中唯一有效的? –
你会如何判断某物是否具有“足够的随机性”?你是否运行过任何统计测试? –