Random 散列函数有多随机';s基于随机种子的输出?

Random 散列函数有多随机';s基于随机种子的输出?,random,hash,Random,Hash,我想要一个伪随机的比特源,我可以通过索引查看它;我的特殊用例是播放列表的随机重放,在这里我希望能够回放到以前的歌曲,而无需存储最初播放歌曲的顺序。大多数RNG的工作状态都是使用生成的每个新随机数修改的,并且以前的状态不容易检索 现在我有了这个想法:使用某种排序if seed,并从中计算哈希代码。散列码中的位用完后,增加种子数,然后计算下一个散列。由于种子只能可逆地修改,因此可以检索较旧的散列码和“随机”位 现在我的实际问题是:从理论角度来看,这有多随机?这对音乐播放列表来说并不重要,但我仍然对它

我想要一个伪随机的比特源,我可以通过索引查看它;我的特殊用例是播放列表的随机重放,在这里我希望能够回放到以前的歌曲,而无需存储最初播放歌曲的顺序。大多数RNG的工作状态都是使用生成的每个新随机数修改的,并且以前的状态不容易检索

现在我有了这个想法:使用某种排序if seed,并从中计算哈希代码。散列码中的位用完后,增加种子数,然后计算下一个散列。由于种子只能可逆地修改,因此可以检索较旧的散列码和“随机”位

现在我的实际问题是:从理论角度来看,这有多随机?这对音乐播放列表来说并不重要,但我仍然对它感兴趣。我还可以想象计算机游戏应用程序中的公平问题


很明显,这里没有太多的熵,但是(加密)散列函数应该在单个比特的变化上有完全不同的输出。我可以通过对种子执行其他可逆操作而不是增加1来改善随机性吗?

好主意。如果你想产生很多随机数,可能有点过头了

结果是否真的是“随机”取决于您使用的加密算法。好的onces(SHA,…)将给出具有相等分布的结果。均匀分布是此类算法的要求之一

请记住,加密/哈希算法要比随机数生成器复杂得多。因此,生成大量这样的数字将是一个问题。这可能会影响游戏,生成播放列表可能没有问题


顺便说一句:你看到了吗。这可能会让你的生活更轻松。

在的人可能更能回答任何关于哈希的问题。但一般来说,好的散列被构造成均匀分布的,因此输入中的一个小变化就会产生一个非常不同的散列。所以我想你可以说你很好,只增加一个。谢谢你的评论!我知道就性能而言,这不是最好的主意,但正如您所说,对于我的用例来说,这是微不足道的。另外,当我谈到游戏时,我主要想到了基于回合的游戏,其中撤销是有意义的,主要是纸牌游戏。我知道Collections.shuffle(),但我认为这并不重要。当然,对于播放列表用例,在重复之前播放所有歌曲可能是有意义的。尽管如此,您还是需要一种方法来取消播放列表的无序排列,或者将排列与实际播放列表分开存储。。。不管怎么说,这是OT;)