以随机顺序迭代数组

Ole*_*ikh 2 c++ arrays loops vector

给定一系列N元素(比如std::vectorT*),是否有任何有效的方法以随机顺序迭代其元素,只访问每个元素一次.解决方案必须避免使用混洗索引创建其他数组.

编辑:

我们还需要能够跟踪原始指数

Ben*_*ley 13

不是特别随机,但考虑到你的限制,你几乎没有选择.

A is the array
S is the size of the array
Generate a random prime number (P), such that P > S
Q = P % S
for i = 1 to S
    process A[Q]
    Q = (Q + P) % S
Run Code Online (Sandbox Code Playgroud)

  • @WoLfulus:是的,它会这样做.它每次都以相同的增量移动.你碰巧选择了一个使该增量为-1的素数.就像我说的那样,它不是特别随机,但通过选择一个素数,你至少可以保证它将通过所有数字. (3认同)

CS *_*Pei 7

使用std::random_shuffle,所以您的代码将是这样的:

std::random_shuffle ( myvector.begin(), myvector.end() );  // in place no extra array
for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
   std::cout << ' ' << *it;
Run Code Online (Sandbox Code Playgroud)