我想要一个可以通过索引查看的伪随机位源;我的特定用例是播放列表的随机重播,我希望能够倒退到较早的歌曲,而无需存储歌曲最初播放的顺序。大多数 RNG 使用的状态会随着生成的每个新随机数而修改,并且之前的状态不容易检索。
现在我有了这个想法:使用某种种子,并从中计算哈希码。在哈希码中的位用完后,增加种子,并计算下一个哈希。由于种子仅被可逆地修改,因此可以检索较旧的哈希码,因此可以检索“随机”位。
现在我的实际问题是:从理论的角度来看,这有多随机?这对于音乐播放列表来说并不重要,但我仍然对它感兴趣。我还可以想象需要考虑公平性的计算机游戏应用程序。
显然,没有涉及太多熵,但是(加密)散列函数应该在单个位的变化上具有完全不同的输出。我可以通过对种子进行一些其他可逆操作而不是增加一来提高随机性吗?