模式返回伪随机数生成器

时间:2017-04-05 06:47:26

标签: c++ c algorithm random

修改

由于很多人不知道我在问什么,所以我已经改写了这个问题。

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.

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

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

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

注意: 一个洗牌方法在1984年不会起作用,因为阵列需要128K,这将是Apple [或类似计算机]可用内存的两倍以上。

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

对不起,原来的问题很糟糕,感谢你的时间。

1 个答案:

答案 0 :(得分:6)

我相信你要找的是linear-feedback shift register。它可能具有您似乎想要以看似随机顺序返回完整序列的属性,而不重复该范围的元素。