模式返回伪随机数生成器

Cho*_*lly 0 c c++ random algorithm

编辑:

由于许多人的反应不知道我在问什么,我已经改写了这个问题.

extern unsigned short lfsr();
int foo[65536];
for (int i = 0; i < 65536; i++)
    foo[lfsr()] = 1;
// every element of foo has been set to 1.
Run Code Online (Sandbox Code Playgroud)

我希望源代码lfsr()返回一个伪随机16位值,0到65535.如果调用65536次,它将返回0到65535之间的每个数字一次,没有重复.如果你再次这样做,它将返回相同的序列.不是一个伟大的随机数生成器,但它有其用途.

我曾经在1984年左右从Dr. Dobbs Journal of Computer Calisthenics和Orthodontia获得了这个代码.

这似乎与噪声发生器非常相似,但例外是循环重复并且不适用于音频.渲染相同的64K 16位PCM采样将在48 kHz的不到1.5秒内显着重复,我从未听说过16位噪声发生器.

注意:一个shuffle方法在1984年不会起作用,因为数组需要128K,这可能是Apple [或类似计算机]可用内存的两倍多.

答: 感谢Jesper Juhl和Jim Mischel将其识别为LFSR,线性反馈移位寄存器以及在哪里找到原始文章.

对不起措辞原文问题,感谢你的时间.

Jes*_*uhl 6

我相信你所寻找的是线性反馈移位寄存器.它可能具有您似乎想要以看似随机顺序返回完整序列的属性,而不重复该范围的元素.