ʞɔı*_*ɔıu 1 language-agnostic algorithm
如何以难以预测的顺序循环固定的整数范围(比如100000-999999)?
即我想要比A更优雅的东西A)选择一个随机数然后B)检查它是否已经被使用过,如果是这样的话,回到步骤A,原因如下(除非你能说服我):
线性同余随机数发生器(在Knuth的第2卷中以难以理解的细节覆盖)将以不易于预测的方式逐步遍历给定范围中的每个值而不重复.基本陈述是
v = k * v + l mod m
Run Code Online (Sandbox Code Playgroud)
其中m是集合的大小,k和l是m的相对素数(我相信这足以保证它按照需要工作),而v是正在使用的值.以某种或多或少的随机方式选择初始值,然后从那里开始.
一个优点是编写速度相当快,假设您可以避免溢出(通过限制k和m,或使用任意精度的算术例程).