是否存在仅使用循环移位的伪随机数生成器?

时间:2018-04-16 15:40:47

标签: algorithm random theory

例如,

This维基百科的文章提出了一个仅使用xor和shift的简单RNG:

/* The state word must be initialized to non-zero */
uint32_t xorshift32(uint32_t state[static 1])
{
    /* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" */
    uint32_t x = state[0];
    x ^= x << 13;
    x ^= x >> 17;
    x ^= x << 5;
    state[0] = x;
    return x;
}

然而,在那里使用的移位操作用0填充移除的位。假设可用的唯一操作是循环移位和xor,是否可以实现同样简单的长周期RNG?上面的代码不起作用,因为它在几次迭代后循环,这是预期的,因为它是为非循环移位而设计的。

1 个答案:

答案 0 :(得分:1)

据我所知,如果使用n位,周期最多为2 * n,即你不能得到很少位的长周期。

原因是在最多 n次操作后,旋转返回到原点,因此结果为state_n=state_0^someThing(因为旋转和xor可以合并) 。然后我们再回到state_0。请注意,xoroshiro + 128也有一个班次。